云计算百科
云计算领域专业知识百科平台

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)

import requests
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+ 内置)

const BASE = "https://api.zhituapi.com";
const token = "你的token";
const url = `${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 标准库)

import java.net.*;
import java.io.*;
public class Demo {
public static void main(String[] a) throws Exception {
String BASE = "https://api.zhituapi.com";
String url = BASE + "/hs/list/all?token=你的token";
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setRequestMethod("GET");
int code = c.getResponseCode();
BufferedReader br = new BufferedReader(new InputStreamReader(c.getInputStream()));
StringBuilder sb = new StringBuilder(); String line;
while ((line = br.readLine()) != null) sb.append(line);
int n = Math.min(60, sb.length());
System.out.println(code + " " + sb.substring(0, n));
}
}

3.4 Go(net/http)

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

3.5 C#(HttpClient)

using System;
using System.Net.Http;
using System.Threading.Tasks;
class Demo {
static async Task Main() {
var BASE = "https://api.zhituapi.com";
var url = BASE + "/hs/list/all?token=你的token";
using var c = new HttpClient();
var r = await c.GetAsync(url);
var t = await r.Content.ReadAsStringAsync();
int n = 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. 统一错误处理(跨语言)

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

  • 网络异常(超时/不可达)→ 捕获后重试或告警,别让主流程崩。
  • 错误码:读到 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 MaxRetriesExceeded


    5. 接口层验证

    五种语言代码逻辑等价(同一 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、Go encoding/json、C# System.Text.Json、PHP json_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 股涨红跌绿,本文不构成任何投资建议,据此操作风险自负。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » A05_五种语言,同一个接口:Java _ Go _ Node.js _ C# _ PH
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!