[简约webAPI]分别以asp|jsp|php简单粗暴实现webAPI,输出json数据
原本打算使用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化数据好简单的说。哈哈哈哈 } } ?>