ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

A05_五种语言,同一个接口:Java _ Go _ Node.js _ C# _ PH

A05_五种语言,同一个接口:Java _ Go _ Node.js _ C# _ PH

五种语言,同一个接口:Java / Go / Node.js / C# / PHP 调用对照

行情接口是纯 HTTP GET、返回 JSON,不依赖任何 SDK、不绑定任何语言。本文用同一个资源/hs/list/all,分别用 Java、Go、Node.js、C#、PHP 五种后端语言的标准库各写一份调用,证明「会发 GET 请求,就能取 A 股数据」。主机地址只在各段代码的BASE常量里出现,全程不引入任何第三方 SDK。


1. 问题场景

前面覆盖了浏览器、Python、Excel、Power BI。但你的主力后端可能是 Java 微服务、Go 网关、C# 桌面、PHP 站点——难道为了取行情还得在栈里塞一套 Python?

不需要。行情接口是「一个 URL 返回 JSON」,而任何现代语言的标准库都能发 HTTP GET。本文把同一份数据用 5 种语言各写一遍,你会看到它们高度同构:拼 URL → GET → 读 body → 解析 JSON。


2. 数据契约

内容
接口GET /hs/list/all
返回JSON 数组,每条{dm, mc, jys}
字段dm=代码,mc=名称,jys=交易所(SH/SZ)
错误码104=缺 token(HTTP 400);102=证书不存在(HTTP 403)
频率免费档约 200 次/日、300 次/分

3. 五种语言对照

下面五段功能完全一致:请求/hs/list/all,打印 HTTP 状态码 + 返回前 60 字符。把你的token换成真实凭证即得数据。主机地址统一放在BASE常量。

3.1 Python(requests)

importrequests BASE="https://api.zhituapi.com"url=f"{BASE}/hs/list/all?token=你的token"r=requests.get(url,timeout=10)print(r.status_code,r.text[:60])

3.2 Node.js(fetch,Node 18+ 内置)

constBASE="https://api.zhituapi.com";consttoken="你的token";consturl=`${BASE}/hs/list/all?token=${token}`;fetch(url).then(r=>r.text().then(t=>console.log(r.status,t.slice(0,60)))).catch(e=>console.log("ERR",e.message));

3.3 Java(HttpURLConnection,JDK 标准库)

importjava.net.*;importjava.io.*;publicclassDemo{publicstaticvoidmain(String[]a)throwsException{StringBASE="https://api.zhituapi.com";Stringurl=BASE+"/hs/list/all?token=你的token";HttpURLConnectionc=(HttpURLConnection)newURL(url).openConnection();c.setRequestMethod("GET");intcode=c.getResponseCode();BufferedReaderbr=newBufferedReader(newInputStreamReader(c.getInputStream()));StringBuildersb=newStringBuilder();Stringline;while((line=br.readLine())!=null)sb.append(line);intn=Math.min(60,sb.length());System.out.println(code+" "+sb.substring(0,n));}}

3.4 Go(net/http)

packagemainimport("fmt";"io";"net/http";"os")funcmain(){BASE:="https://api.zhituapi.com"url:=BASE+"/hs/list/all?token=你的token"r,err:=http.Get(url)iferr!=nil{fmt.Println("ERR",err);os.Exit(1)}deferr.Body.Close()b,_:=io.ReadAll(r.Body)n:=60;iflen(b)<n{n=len(b)}fmt.Println(r.StatusCode,string(b[:n]))}

3.5 C#(HttpClient)

usingSystem;usingSystem.Net.Http;usingSystem.Threading.Tasks;classDemo{staticasyncTaskMain(){varBASE="https://api.zhituapi.com";varurl=BASE+"/hs/list/all?token=你的token";usingvarc=newHttpClient();varr=awaitc.GetAsync(url);vart=awaitr.Content.ReadAsStringAsync();intn=Math.Min(60,t.Length);Console.WriteLine($"{(int)r.StatusCode}{t.Substring(0,n)}");}}

3.6 PHP(cURL)

<?php$BASE="https://api.zhituapi.com";$url=$BASE."/hs/list/all?token=你的token";$ch=curl_init($url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);$body=curl_exec($ch);$code=curl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);echo$code." ".mb_substr($body,0,60).PHP_EOL;

4. 统一错误处理(跨语言)

五种语言都要处理同一件事:

  1. 网络异常(超时/不可达)→ 捕获后重试或告警,别让主流程崩。
  2. 错误码:读到104先查「token 拼进 URL 没」;读到102先查「凭证是否复制错/过期」。注意错误以纯文本104:...返回,不是 JSON,解析前先判首字符。
  3. 限频:循环调用时各语言都加sleep/time.Sleep/Thread.sleep退避,免费档上限 300 次/分。

一个跨语言通用的重试骨架(伪代码):

for attempt in 1..N: try: resp = GET(url) if resp starts with '{': return parse_json(resp) if resp starts with '104' or '102': raise AuthError(resp) if status == 401: sleep(2^attempt); continue # 限频退避 except NetworkError: sleep(2^attempt); continue raise MaxRetriesExceeded

5. 接口层验证

五种语言代码逻辑等价(同一 GET),填入真实 token 后行为一致。无 token / 假 token 行为:

无 token : HTTP 400 -> 104:缺少token参数 假 token : HTTP 403 -> 102:Licence证书(FAKE_TOKEN_000)不存在

带 token 的完整数据需填入真实凭证后运行即得。


6. 坑与注意事项

  1. 不要为取数引入 SDK:五语言标准库已足够;第三方 HTTP 封装反而多一层依赖。
  2. JSON 解析:拿到 body 后各语言用原生解析(Java Jackson/Gson、Goencoding/json、C#System.Text.Json、PHPjson_decode),字段以实际返回为准(先打印键名)。
  3. 限频是共通坑:无论哪种语言,循环拉多只都要退避;建议统一封装带sleepfetch_with_retry
  4. token 别进代码库:五语言都应把 token 走环境变量/配置中心,绝不上库。
  5. HTTPS 证书:生产环境信任系统 CA;内网代理场景按需配置。

7. 小结

浏览器、Python、Excel、Power BI、Java/Go/Node/C#/PHP——同一套 GET 接口,覆盖了多少种消费端。这正是「一个 URL 就是一个数据源」:它不挑语言、不挑工具。

下一篇《聚宽/米筐 notebook 里补外部数据:平台没有的,用 HTTP 拿》,聊聊当你已经在某个量化平台里,怎么用平台内置的 Python notebook 发一个 HTTP 请求,把外部数据并进来。


本文所有数据来自公开行情接口的真实返回,仅用于技术演示。A 股涨红跌绿,本文不构成任何投资建议,据此操作风险自负。

返回列表