免费获取学习方案
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缺 tokenHTTP 400102证书不存在HTTP 403频率免费档约 200 次/日、300 次/分3. 五种语言对照下面五段功能完全一致请求/hs/list/all打印 HTTP 状态码 返回前 60 字符。把你的token换成真实凭证即得数据。主机地址统一放在BASE常量。3.1 Pythonrequestsimportrequests BASEhttps://api.zhituapi.comurlf{BASE}/hs/list/all?token你的tokenrrequests.get(url,timeout10)print(r.status_code,r.text[:60])3.2 Node.jsfetchNode 18 内置constBASEhttps://api.zhituapi.com;consttoken你的token;consturl${BASE}/hs/list/all?token${token};fetch(url).then(rr.text().then(tconsole.log(r.status,t.slice(0,60)))).catch(econsole.log(ERR,e.message));3.3 JavaHttpURLConnectionJDK 标准库importjava.net.*;importjava.io.*;publicclassDemo{publicstaticvoidmain(String[]a)throwsException{StringBASEhttps://api.zhituapi.com;StringurlBASE/hs/list/all?token你的token;HttpURLConnectionc(HttpURLConnection)newURL(url).openConnection();c.setRequestMethod(GET);intcodec.getResponseCode();BufferedReaderbrnewBufferedReader(newInputStreamReader(c.getInputStream()));StringBuildersbnewStringBuilder();Stringline;while((linebr.readLine())!null)sb.append(line);intnMath.min(60,sb.length());System.out.println(code sb.substring(0,n));}}3.4 Gonet/httppackagemainimport(fmt;io;net/http;os)funcmain(){BASE:https://api.zhituapi.comurl:BASE/hs/list/all?token你的tokenr,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{nlen(b)}fmt.Println(r.StatusCode,string(b[:n]))}3.5 C#HttpClientusingSystem;usingSystem.Net.Http;usingSystem.Threading.Tasks;classDemo{staticasyncTaskMain(){varBASEhttps://api.zhituapi.com;varurlBASE/hs/list/all?token你的token;usingvarcnewHttpClient();varrawaitc.GetAsync(url);vartawaitr.Content.ReadAsStringAsync();intnMath.Min(60,t.Length);Console.WriteLine(${(int)r.StatusCode}{t.Substring(0,n)});}}3.6 PHPcURL?php$BASEhttps://api.zhituapi.com;$url$BASE./hs/list/all?token你的token;$chcurl_init($url);curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);$bodycurl_exec($ch);$codecurl_getinfo($ch,CURLINFO_HTTP_CODE);curl_close($ch);echo$code. .mb_substr($body,0,60).PHP_EOL;4. 统一错误处理跨语言五种语言都要处理同一件事网络异常超时/不可达→ 捕获后重试或告警别让主流程崩。错误码读到104先查「token 拼进 URL 没」读到102先查「凭证是否复制错/过期」。注意错误以纯文本104:...返回不是 JSON解析前先判首字符。限频循环调用时各语言都加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 MaxRetriesExceeded5. 接口层验证五种语言代码逻辑等价同一 GET填入真实 token 后行为一致。无 token / 假 token 行为无 token : HTTP 400 - 104:缺少token参数 假 token : HTTP 403 - 102:Licence证书(FAKE_TOKEN_000)不存在带 token 的完整数据需填入真实凭证后运行即得。6. 坑与注意事项不要为取数引入 SDK五语言标准库已足够第三方 HTTP 封装反而多一层依赖。JSON 解析拿到 body 后各语言用原生解析Java Jackson/Gson、Goencoding/json、C#System.Text.Json、PHPjson_decode字段以实际返回为准先打印键名。限频是共通坑无论哪种语言循环拉多只都要退避建议统一封装带sleep的fetch_with_retry。token 别进代码库五语言都应把 token 走环境变量/配置中心绝不上库。HTTPS 证书生产环境信任系统 CA内网代理场景按需配置。7. 小结浏览器、Python、Excel、Power BI、Java/Go/Node/C#/PHP——同一套 GET 接口覆盖了多少种消费端。这正是「一个 URL 就是一个数据源」它不挑语言、不挑工具。下一篇《聚宽/米筐 notebook 里补外部数据平台没有的用 HTTP 拿》聊聊当你已经在某个量化平台里怎么用平台内置的 Python notebook 发一个 HTTP 请求把外部数据并进来。本文所有数据来自公开行情接口的真实返回仅用于技术演示。A 股涨红跌绿本文不构成任何投资建议据此操作风险自负。
返回列表