Go、Rust、Java 接入大模型 API:59API 十分钟上手指南
想在现有后端接入大模型,最快的路线是先跑通一次 HTTP 请求。Go、Rust、Java 都可以通过 OpenAI 兼容接口发送相同的 JSON,只需分别处理 HTTP 客户端、超时和响应解析。下面用同一个请求文件完成三种语言的首次调用。
1. 准备密钥、模型 ID 和请求文件
59API 提供按量付费的大模型访问,价格处于低价梯队,适合开发测试和控制推理成本。平台提供原生官方品质模型,不做模型降级;例如,可根据预算与任务需求选择 DeepSeek V4 Flash 或 Gemini 2.5 Flash,具体价格以控制台为准。
先在本机设置环境变量:export API_KEY='你的59API密钥'。密钥只放在服务端环境变量或密钥管理服务中。59API 的基础地址为 https://api.59api.com,本文使用的完整请求地址是 https://api.59api.com/v1/chat/completions。
从控制台取得实际模型 ID,或使用 Bearer 鉴权请求 GET https://api.59api.com/v1/models 查看可用模型。展示名称与接口 ID 可能不同,应复制实际 ID。然后在工作目录创建 request.json,将下面的占位文字替换为该 ID:
{"model":"替换为实际模型ID","messages":[{"role":"user","content":"只回复:连接成功"}],"stream":false}
2. Go:使用标准库直接调用
Go 无需安装 SDK。把以下内容保存为 main.go,与 request.json 放在同一目录,执行 go run main.go。示例设置了 60 秒超时,并在读取响应前检查状态码。
package main; import ("bytes"; "fmt"; "io"; "net/http"; "os"; "time"); func main() { b,e:=os.ReadFile("request.json"); if e!=nil { panic(e) }; req,e:=http.NewRequest("POST","https://api.59api.com/v1/chat/completions",bytes.NewReader(b)); if e!=nil { panic(e) }; req.Header.Set("Authorization","Bearer "+os.Getenv("API_KEY")); req.Header.Set("Content-Type","application/json"); client:=&http.Client{Timeout:60*time.Second}; res,e:=client.Do(req); if e!=nil { panic(e) }; defer res.Body.Close(); out,e:=io.ReadAll(res.Body); if e!=nil { panic(e) }; if res.StatusCode<200 || res.StatusCode>=300 { panic(fmt.Sprintf("HTTP %d: %s",res.StatusCode,out)) }; fmt.Println(string(out)) }
成功后会输出完整响应 JSON。业务代码可用 encoding/json 解码,读取 choices[0].message.content,并检查 choices 是否为空。
3. Rust:用 reqwest 发送异步请求
先执行 cargo new llm-demo,进入项目目录并放入 request.json。安装依赖:cargo add [email protected] --no-default-features --features rustls-tls,以及 cargo add tokio --features macros,rt-multi-thread。将以下内容写入 src/main.rs,执行 cargo run。
use std::{env,fs,time::Duration}; #[tokio::main] async fn main() -> Result<(),Box<dyn std::error::Error>> { let client=reqwest::Client::builder().timeout(Duration::from_secs(60)).build()?; let res=client.post("https://api.59api.com/v1/chat/completions").bearer_auth(env::var("API_KEY")?).header("Content-Type","application/json").body(fs::read("request.json")?).send().await?; let status=res.status(); let text=res.text().await?; if !status.is_success() { return Err(format!("HTTP {}: {}",status,text).into()); } println!("{}",text); Ok(()) }
这里先保存状态码,再消费响应正文,方便排查错误。需要结构化结果时,可增加 serde_json 依赖,把成功响应解析为业务结构。
4. Java:JDK 17 自带 HTTP 客户端
Java 可以直接使用 java.net.http,无需第三方依赖。在 request.json 所在目录启动 jshell,粘贴以下代码;JShell 会继承启动终端的 API_KEY 环境变量。
import java.net.*; import java.net.http.*; import java.nio.file.*; import java.time.*; var client=HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build(); var request=HttpRequest.newBuilder(URI.create("https://api.59api.com/v1/chat/completions")).timeout(Duration.ofSeconds(60)).header("Authorization","Bearer "+System.getenv("API_KEY")).header("Content-Type","application/json").POST(HttpRequest.BodyPublishers.ofFile(Path.of("request.json"))).build(); var response=client.send(request,HttpResponse.BodyHandlers.ofString(java.nio.charset.StandardCharsets.UTF_8)); if(response.statusCode()<200 || response.statusCode()>=300) throw new RuntimeException("HTTP "+response.statusCode()+": "+response.body()); System.out.println(response.body());
集成到 Spring 等应用时,把 HttpClient 作为可复用实例管理;使用 Jackson 等 JSON 库读取结果。已有 OpenAI SDK 项目也可配置 59API 密钥和兼容地址,注意 SDK 是否自动追加 /v1,避免路径重复。
5. 上线前补齐这四项
- 检查配置:启动时校验密钥非空。401 优先检查鉴权;400 检查模型 ID、请求字段和模型支持范围。
- 限制重试:遇到 429 或临时服务错误,结合 Retry-After、指数退避和随机延迟重试,并设置次数上限。请求发出后超时,重试可能产生额外调用费用。
- 控制用量:记录响应中的 usage,限制并发和输入长度;按模型支持情况设置输出上限参数。比较相同任务的总成本与结果质量。
- 按需流式:本文使用非流式响应。切换 stream=true 后,需要解析 SSE 事件,不能继续把整个响应当作单个 JSON;前端断开时也应取消上游请求。
准备试跑时,可以注册 59API,用一个模型和短提示完成首轮验证,再逐步增加并发。平台也兼容 Claude Code、Codex、Gemini CLI,并提供邀请返利;具体返利规则以平台说明为准。
Ready to get started?
Connect Claude & GPT in minutes at the lowest prices — full-power, never downgraded. Sign up to get your API key.
Sign up free