[简约webAPI]分别以asp|jsp|php简单粗暴实现webAPI,输出json数据
原本打算使用golang编写一个RESTful API,但因为环境所限,此次采用“偷懒的方式”,其实也不算偷懒,至少编写代码上面没有偷懒,只是在部署上偷懒了,三台机器物理地址以及公网地址均不同,说白了就是这三玩意儿没在一块,嘛都没在,好嘛,服务器环境也均然不同,分别为asp、java、php编写部署的系统。
既然都是脚本语言,那就暴力解决此次问题,灵活性毕竟很高嘛。
ASP sqlServer
废话不多说上代码
代码语言:javascript复制<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<% 'utf8编码必须添加这个东东,还必须在第一行,不然无法生效 %>
<% '文件类型,json %>
<% 'Response.ContentType = "application/json; charset=utf-8" %>
<% 'html头部添加,如果编码使用utf8<meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> %>
<%
' 内置这个json库
' <!--#include file = './JSON_2.0.4.asp'-->
' VBS JSON 2.0.3
' Copyright (c) 2009 Tu�rul Topuz
' Under the MIT (MIT-LICENSE.txt) license.
'
Const JSON_OBJECT = 0
Const JSON_ARRAY = 1
Class jsCore
Public Collection
Public Count
Public QuotedVars
Public Kind ' 0 = object, 1 = array
Private Sub Class_Initialize
Set Collection = CreateObject("Scripting.Dictionary")
QuotedVars = True
Count = 0
End Sub
Private Sub Class_Terminate
Set Collection = Nothing
End Sub
' counter
Private Property Get Counter
Counter = Count
Count = Count 1
End Property
' - data maluplation
' -- pair
Public Property Let Pair(p, v)
If IsNull(p) Then p = Counter
Collection(p) = v
End Property
Public Property Set Pair(p, v)
If IsNull(p) Then p = Counter
If TypeName(v) <> "jsCore" Then
Err.Raise &hD, "class: class", "Incompatible types: '" & TypeName(v) & "'"
End If
Set Collection(p) = v
End Property
Public Default Property Get Pair(p)
If IsNull(p) Then p = Count - 1
If IsObject(Collection(p)) Then
Set Pair = Collection(p)
Else
Pair = Collection(p)
End If
End Property
' -- pair
Public Sub Clean
Collection.RemoveAll
End Sub
Public Sub Remove(vProp)
Collection.Remove vProp
End Sub
' data maluplation
' encoding
Function jsEncode(str)
Dim charmap(127), haystack()
charmap(8) = "b"
charmap(9) = "t"
charmap(10) = "n"
charmap(12) = "f"
charmap(13) = "r"
charmap(34) = """"
charmap(47) = "/"
charmap(92) = "\"
Dim strlen : strlen = Len(str) - 1
ReDim haystack(strlen)
Dim i, charcode
For i = 0 To strlen
haystack(i) = Mid(str, i 1, 1)
charcode = AscW(haystack(i)) And 65535
If charcode < 127 Then
If Not IsEmpty(charmap(charcode)) Then
haystack(i) = charmap(charcode)
ElseIf charcode < 32 Then
haystack(i) = "u" & Right("000" & Hex(charcode), 4)
End If
Else
haystack(i) = "u" & Right("000" & Hex(charcode), 4)
End If
Next
jsEncode = Join(haystack, "")
End Function
' converting
Public Function toJSON(vPair)
Select Case VarType(vPair)
Case 0 ' Empty
toJSON = "null"
Case 1 ' Null
toJSON = "null"
Case 7 ' Date
' toJSON = "new Date(" & (vPair - CDate(25569)) * 86400000 & ")" ' let in only utc time
toJSON = """" & CStr(vPair) & """"
Case 8 ' String
toJSON = """" & jsEncode(vPair) & """"
Case 9 ' Object
Dim bFI,i
bFI = True
If vPair.Kind Then toJSON = toJSON & "[" Else toJSON = toJSON & "{"
For Each i In vPair.Collection
If bFI Then bFI = False Else toJSON = toJSON & ","
If vPair.Kind Then
toJSON = toJSON & toJSON(vPair(i))
Else
If QuotedVars Then
toJSON = toJSON & """" & i & """:" & toJSON(vPair(i))
Else
toJSON = toJSON & i & ":" & toJSON(vPair(i))
End If
End If
Next
If vPair.Kind Then toJSON = toJSON & "]" Else toJSON = toJSON & "}"
Case 11
If vPair Then toJSON = "true" Else toJSON = "false"
Case 12, 8192, 8204
toJSON = RenderArray(vPair, 1, "")
Case Else
toJSON = Replace(vPair, ",", ".")
End select
End Function
Function RenderArray(arr, depth, parent)
Dim first : first = LBound(arr, depth)
Dim last : last = UBound(arr, depth)
Dim index, rendered
Dim limiter : limiter = ","
RenderArray = "["
For index = first To last
If index = last Then
limiter = ""
End If
On Error Resume Next
rendered = RenderArray(arr, depth 1, parent & index & "," )
If Err = 9 Then
On Error GoTo 0
RenderArray = RenderArray & toJSON(Eval("arr(" & parent & index & ")")) & limiter
Else
RenderArray = RenderArray & rendered & "" & limiter
End If
Next
RenderArray = RenderArray & "]"
End Function
Public Property Get jsString
jsString = toJSON(Me)
End Property
Sub Flush
If TypeName(Response) <> "Empty" Then
Response.Write(jsString)
ElseIf WScript <> Empty Then
WScript.Echo(jsString)
End If
End Sub
Public Function Clone
Set Clone = ColClone(Me)
End Function
Private Function ColClone(core)
Dim jsc, i
Set jsc = new jsCore
jsc.Kind = core.Kind
For Each i In core.Collection
If IsObject(core(i)) Then
Set jsc(i) = ColClone(core(i))
Else
jsc(i) = core(i)
End If
Next
Set ColClone = jsc
End Function
End Class
Function jsObject
Set jsObject = new jsCore
jsObject.Kind = JSON_OBJECT
End Function
Function jsArray
Set jsArray = new jsCore
jsArray.Kind = JSON_ARRAY
End Function
Function toJSON(val)
toJSON = (new jsCore).toJSON(val)
End Function
%>
<%
'浩秦版权所有
'root@landv.pw
' ASP数据库数据输出JSONhttp://www.dahuangphone.com/dispbbs.asp?boardid=8&Id=32&authorid=4
'开始查询并输出json
dim aa
aa = Request.QueryString("aa")
If aa<>"" Then
' true
' 这是设置密码的地方
if aa ="密码" Then
QueryDate
End if
Else
' false
' 仅限调试使用
'Response.Write "aa为空"
'Response.End
End if
'需要在外部进行声明
dim conn
Sub LinkDate()
' 链接数据库
Dim ConnStr
ConnStr = "Provider = Sqloledb; User ID =用户名 ;Password=密码;Initial Catalog =数据库名字;Data Source =数据库地址;"
On Error Resume Next
Set conn = Server.CreateObject("ADODB.Connection")
conn.open ConnStr
If Err Then
' true
' 仅限调试使用
'Set conn = Nothing
'Response.Write "no"
'Response.End
Else
' false
' 仅限调试使用
'Response.Write "yes"
'Response.End
End if
End Sub
' 貌似永远用不上关闭哈
Sub CloseDate()
' 关闭链接
If IsObject(conn) Then
' true
conn.Close
set conn=Nothing
Else
' false
End if
End Sub
Sub QueryDate()
' 查询数据并返回
' ADO查询 https://www.runoob.com/ado/ado-query.html
' 链接数据库
LinkDate
' 查询语句
' emmm从这里过滤字段即可,不用一个一个对应json了
sql = "SELECT * FROM 数据库名字和判断"
' 输出json
Response.Write QueryToJSON(conn, sql).Flush
' 关闭数据库
CloseDate
End Sub
%>
<%
'QueryToJSON 此函数来自JSON官方JSON_UTIL_0.1.1.asp
Function QueryToJSON(dbc, sql)
Dim rs, jsa
Set rs = dbc.Execute(sql)
Set jsa = jsArray()
While Not (rs.EOF Or rs.BOF)
Set jsa(Null) = jsObject()
For Each col In rs.Fields
jsa(Null)(col.Name) = col.Value
Next
rs.MoveNext
Wend
Set QueryToJSON = jsa
End Function
%>
jsp mysql
链接的mysql数据库,jsp需要下载两个jar包,gson和mysql
代码语言:javascript复制<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*,java.sql.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%-- <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> --%>
<%-- https://www.it610.com/article/5283384.htm --%>
<%@page import="com.google.gson.JsonArray"%>
<%@page import="com.google.gson.JsonObject"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%
//
//out.println("你的 IP 地址 " request.getRemoteAddr());
String result = request.getParameter("aa");
//func转换成int类型,不如switch无法进行判断哈,奶奶个熊的,switch还不支持string,写这种古老技法还得研究一下,靠。
int func = Integer.parseInt(request.getParameter("func"));
String startData = request.getParameter("startData"); //开始时间
String stopData = request.getParameter("stopData"); //结束时间
String customSql =request.getParameter("customSql");//自定义SQL,需要过滤,只保留select函数indexOf,
String zz = "你的密码"; //密码验证
//out.println(result);
//out.println(zz);
//登录密码验证
if(zz.equals(result)){
//功能判断
switch(func) {
case 0:
//执行约定好的功能
String strReturn;
strReturn = queryHaccount();
out.println(strReturn);
//out.println("0");
break;
case 1:
//功能二
out.println("1");
break;
case 2:
out.println("2");
break;
default:
out.println("default");
}
}
%>
<%!
String queryHaccount(){
String strMessage = null;
String sql ="SELECT * FROM 数据库名字和where过滤"; //先查询在完善
//数据库链接
Connection conn =null;
//向数据库发送sql语句
Statement st = null;
//结果集
ResultSet rs = null;
// 数据库链接字符串
String url = "jdbc:mysql://IP:3306/数据库名字?useUnicode=true&characterEncoding=utf-8";
String user ="用户名";
String pass ="密码";
try{
Class.forName("com.mysql.jdbc.Driver");
//数据库的地址,密码,用户名
conn =DriverManager.getConnection(url,user,pass);
st = conn.createStatement();
rs = st.executeQuery(sql);
JsonObject object = new JsonObject();
JsonArray array = new JsonArray();
while(rs.next()){
JsonObject ob = new JsonObject();
//此处添加字段信息,先手动添加吧,后续写一个循环自动添加上。
//这里得手动对应哈
ob.addProperty("a",rs.getString("a"));
ob.addProperty("b",rs.getString("b"));
ob.addProperty("c",rs.getString("c"));
array.add(ob);
}
object.add("landv",array);
strMessage =object.toString();
} catch (Exception e){
}finally {
try {
rs.close();
} catch (Exception e) {
}
try {
st.close();
} catch (Exception e) {
}
try {
conn.close();
} catch (Exception e) {
}
}
return strMessage;
}
%>
php sqlServer
php不亏是php,几行就搞定了功能
代码语言:javascript复制<?php
// https://www.cnblogs.com/zyf-zhaoyafei/p/4473924.html
// https://www.microsoft.com/en-us/download/details.aspx?id=20098
// 到微软官网下载SQL Server Driver for PHP
//https://www.jb51.net/article/56568.htm
//从jb51下载
//一般情况下是有的,在phpextphp_pdo_mssql.dll
// 只需要在php-apache2handler.ini或者php.ini里面修改。
//去掉分号;extension=php_mssql.dll
//去掉分好;extension=php_pdo_mssql.dll
//实践出真理,还是使用jb51下载的这个52对应版本的吧
//https://blog.csdn.net/a1170201028/article/details/81191582
//通过PDO方式连接sqlserver
//https://www.jb51.net/article/135859.htm
//获取get信息
//密码验证
$aa = $_GET["aa"];
// 功能选择
$func = $_GET["func"];
$startData = $_GET["startData"]; //开始时间
$stopData = $_GET["stopData"]; //结束时间
$customSql = $_GET["customSql"]; //自定义SQL,需要过滤,只保留select函数
if ($aa=="你的密码") {
# 登录验证
# echo $aa;
switch ($func) {
case '0':
# 执行约定好的功能
FunctionQuery();
#echo '10';
break;
case '1':
# code...
echo '1';
break;
default:
# code...
echo "other";
break;
}
}
function FunctionQuery(){
# code...
$conn = new PDO("sqlsrv:server=数据库IP;database=数据库名字","用户名","密码");
#条件语句
$sql = "SELECT * FROM ";
$res = $conn->query($sql);
while ($row = $res->fetch()){
#print_r($row);
#https://www.cnblogs.com/yiven/p/6491019.html
echo json_encode($row);//php好爽,比asp,jsp,json化数据好简单的说。哈哈哈哈
}
}
?>