技术博客
笑话大全多语言接入:Python / Java / Node.js / Go 完整示例

笑话大全多语言接入:Python / Java / Node.js / Go 完整示例

作者: 万维易源
2026-08-31
笑话大全多语言接入PythonJavaNode
# 笑话大全多语言接入:Python / Java / Node.js / Go 完整示例 > 接口 341-5 · 免费 · POST/GET · JSON · 适用人群:中高级开发者 · 阅读时间:约 6 分钟 ## 核心要点 - 四种语言(Python / Java / Node.js / Go)均给出"替换 AppKey 即可运行"的示例。 - 统一要点:超时 20s、判 `ret_code == 0` 再取 `text`、失败读 `remark`。 - 接口无业务参数,四种语言写法高度相似,仅 HTTP 客户端不同。 ## Why 不同团队技术栈不同:数据分析用 Python,后端用 Java/Go,前端/网关用 Node。本篇把四种语言的"最小可运行调用"一次性给全,你照抄对应那段、替换 AppKey 就能用,不必再各自摸索超时与错误判断。 ## What | 项 | 说明 | |----|------| | 端点 | `https://route.showapi.com/341-5?appKey=YOUR_APPKEY` | | 方式 | POST(或 GET) | | 超时 | 20s(对齐 OpenAPI `x-read-timeout`) | | 成功判定 | `showapi_res_body.ret_code == 0` | | 展示字段 | `showapi_res_body.text` | ## How ### Python(requests) ```python import requests APP_KEY = "YOUR_APPKEY" resp = requests.post( "https://route.showapi.com/341-5", params={"appKey": APP_KEY}, headers={"content-type": "application/x-www-form-urlencoded"}, timeout=20, ) body = resp.json()["showapi_res_body"] if body["ret_code"] == 0: print(body["text"]) else: print("失败:", body["remark"]) ``` ### Java(HttpClient,Java 11+) ```java import java.net.http.*; import java.net.URI; public class JokeDemo { public static void main(String[] args) throws Exception { String appKey = "YOUR_APPKEY"; HttpClient client = HttpClient.newBuilder().connectTimeout(java.time.Duration.ofSeconds(20)).build(); HttpRequest req = HttpRequest.newBuilder() .uri(URI.create("https://route.showapi.com/341-5?appKey=" + appKey)) .header("content-type", "application/x-www-form-urlencoded") .timeout(java.time.Duration.ofSeconds(20)) .POST(HttpRequest.BodyPublishers.noBody()) .build(); HttpResponse<String> res = client.send(req, HttpResponse.BodyHandlers.ofString()); System.out.println(res.body()); // 解析 JSON 后判 showapi_res_body.ret_code == 0 再取 text } } ``` ### Node.js(fetch) ```javascript const APP_KEY = "YOUR_APPKEY"; const resp = await fetch(`https://route.showapi.com/341-5?appKey=${APP_KEY}`, { method: "POST", headers: { "content-type": "application/x-www-form-urlencoded" }, }); const data = await resp.json(); const body = data.showapi_res_body || {}; if (body.ret_code === 0) console.log(body.text); else console.log("失败:", body.remark); ``` ### Go(net/http) ```go package main import ( "fmt" "io" "net/http" "time" ) func main() { appKey := "YOUR_APPKEY" client := &http.Client{Timeout: 20 * time.Second} req, _ := http.NewRequest("POST", "https://route.showapi.com/341-5?appKey="+appKey, nil) req.Header.Set("content-type", "application/x-www-form-urlencoded") resp, err := client.Do(req) if err != nil { fmt.Println("请求错误:", err) return } defer resp.Body.Close() b, _ := io.ReadAll(resp.Body) fmt.Println(string(b)) // 解析 JSON 后判 showapi_res_body.ret_code == 0 再取 text } ``` ## 返回示例与解析 四种语言拿到的 JSON 结构一致,详见[返回字段全解](https://www.showapi.com/guides/joke-api-response-fields-341)。建议解析后统一以 `ret_code == 0` 为成功条件。 ## 进阶 / 边界 - **超时务必设置**:未设超时可能阻塞;本接口建议 20s。 - **错误判断用业务级 `ret_code`**:不要只看 HTTP 200,要看 `showapi_res_body.ret_code`。 - **生产加缓存**:高频调用请缓存(见[缓存与档位](https://www.showapi.com/guides/joke-api-cache-tier-341))。 - **AppKey 走配置**:各语言都建议从环境变量读取 AppKey,勿硬编码。 ## FAQ **Q1:四种语言返回结果不一样吗?** 一样。都是同一接口的 JSON,差异只在 HTTP 客户端与 JSON 解析写法。 **Q2:GET 和 POST 用哪种?** 都支持,示例用 POST;GET 把 appKey 放 query 即可。 **Q3:Java/Go 示例里怎么解析 JSON?** 示例打印原始 body;生产请用 Jackson(Java)/ encoding/json(Go)解析 `showapi_res_body`。 **Q4:超时设多少合适?** 对齐官方 OpenAPI 的 20s 读/连接超时即可。 **Q5:能并发调用拉多条不同笑话吗?** 可以,但注意免费接口的使用档位限制,高频并发可能触发限流。 ## 相关能力 / 下一步阅读 - [笑话大全返回字段全解:showapi_res_body 与 id/title/text 一文读懂](https://www.showapi.com/guides/joke-api-response-fields-341) - [免费接口也要讲边界:笑话大全缓存策略与档位限制应对](https://www.showapi.com/guides/joke-api-cache-tier-341) - [笑话大全调用失败排查:showapi_res_code 与 ret_code 非 0 怎么办](https://www.showapi.com/guides/joke-api-error-341) - **本系列共 10 篇**:查看[笑话大全 API 指南总目录](https://www.showapi.com/guides/joke-api-guides-341)