HTTP基础:RESTful API、请求方法、状态码、Headers、Body格式

说实话,很多刚接触 SDK 的同学,觉得 HTTP 就是调几个接口、传几个参数。但等到真的接入多语言 SDK 的时候,各种超时、鉴权失败、数据对不上,才会发现基础没打牢。

HTTP 是 SDK 通信的骨架。你绕不开它。

这一章,我就带你从头梳理一遍。不会讲太深,但都是干活时一定会碰到的点。

1. RESTful API —— 它到底长什么样?

RESTful 不是协议,是一种设计风格。说白了,就是把你的数据当作“资源”,然后用标准 HTTP 方法去操作它。

我在接入某海外翻译 SDK 时,对方给的文档里全是 RESTful 风格的路径。比如:

POST /v2/translate
GET  /v2/languages
DELETE /v2/glossary/{id}

每个路径代表一个资源,动作由请求方法决定。我建议你一开始就用这种风格来理解接口,后面对接任何 SDK 都会顺很多。

核心原则:一个 URL 对应一个资源,不同操作使用不同的 HTTP 方法。

2. 请求方法 —— 你至少得用熟这四个

方法 作用 幂等 我遇到过的坑
GET 获取资源 是 参数过长被截断,改用 POST 反而更稳
POST 创建资源 否 多次点击导致重复订单,后来加了幂等键
PUT 整体更新 是 漏传字段导致其他字段被清空
DELETE 删除资源 是 删除后重复请求返回 404,正常现象

嗯,这里要注意:GET 请求不要带 body。有些同学习惯把所有东西塞进 JSON 里用 GET 发,结果服务端根本读不到。我在第一次对接 REST API 的时候就犯过这个错,排查了半天才发现是客户端把参数放错了位置。

3. 状态码 —— 别只记住 200 和 404

状态码是服务端给你的信号。看懂它,能省掉一堆日志分析工作。

  • 2xx 成功:200 OK,201 Created。我最常用的是 200,但创建资源时建议用 201。
  • 3xx 重定向:301/302。SDK 里很少遇到,但如果你发现 302,检查一下是否被中间件拦截了。
  • 4xx 客户端错误:400 参数错误,401 未授权,403 禁止访问,404 不存在,429 请求太频繁。
  • 5xx 服务端错误:500 内部错误,502 网关错误,503 服务不可用。

我的习惯:只要看到 4xx,优先检查自己传的参数和鉴权;看到 5xx,先等一会儿重试,大概率是服务端抽风。

我曾经在对接某语音识别 SDK 时,连续收到 429 状态码。当时以为是 SDK 有问题,后来发现是我自己并发太高,没做限流。加了一个简单的令牌桶后就正常了。

4. Headers —— 那些你容易漏掉的字段

Headers 是请求和响应的“元数据”。有些字段不传,接口直接拒绝你。

Header 名称 说明 例子
Content-Type 告诉服务端 body 的格式 application/json
Authorization 鉴权,通常 Bearer Bearer eyJhbGci...
Accept 告诉服务端你期望的返回格式 application/json
X-Request-ID 追踪请求,调试利器 uuid

注意:如果服务端返回 415 Unsupported Media Type,99% 是 Content-Type 写错了。我曾经把 multipart/form-data 写成了 application/x-www-form-urlencoded,折腾了半小时。

5. Body 格式 —— 用 JSON 还是 Form?

现在大部分 SDK 都推荐 JSON。结构清晰,调试也方便。但我遇到过有些老系统只支持 XML 或表单格式。

  • JSON:{"key":"value"},嵌套友好,适合复杂结构。
  • 表单:key1=value1&key2=value2,简单、体积小,但不支持数组。
  • Multipart:上传文件时必须用这个。

你想想看,如果你用 JSON 而对方要求表单,服务端解析出来就是空。这种情况我一般先看文档,再写个 curl 测试一下,避免浪费时间。

6. 一张图串起 HTTP 核心流程

下面这张图是我自己总结的 —— 一次典型的请求-响应过程,标注了刚才讲的关键要素。

一次 RESTful 请求中的核心要素 客户端 (SDK/浏览器) 请求方法 请求头 Headers 请求体 Body 服务端 状态码 响应体 响应头 Headers 💡 记住: - 请求方法 + URL = 动作 - 状态码 = 结果对错 - Headers + Body = 数据

7. 写在后面

HTTP 基础说难不难,但一不留神就踩坑。我建议你在写 SDK 接入代码之前,先用 Postman 或 curl 手动调一遍接口,确认方法、Headers、Body 都对,再写代码。

嗯,别再问我为什么用 GET 传 JSON 没反应了 —— 先去查 Content-Type。