[簡約webAPI]分別以asp|jsp|php簡單粗暴實現webAPI,輸出json數據
https://gitee.com/landv_admin/csharp_login_report_plug-in
原本打算使用golang編寫一個RESTful API,但因為環境所限,此次采用“偷懶的方式”,其實也不算偷懶,至少編寫代碼上面沒有偷懶,只是在部署上偷懶了,三台機器物理地址以及公網地址均不同,說白了就是這三玩意兒沒在一塊,嘛都沒在,好嘛,服務器環境也均然不同,分別為asp、java、php編寫部署的系統。
既然都是腳本語言,那就暴力解決此次問題,靈活性畢竟很高嘛。
ASP+sqlServer
廢話不多說上代碼
<%@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
<%@ 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,幾行就搞定了功能
<?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下載 //一般情況下是有的,在php\ext\php_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化數據好簡單的說。哈哈哈哈 } } ?>