HTTP协议基础与RESTful风格:方法、状态码、请求头、响应体

Agent工具调用接口的核心传输载体是HTTP协议。本章从底层原理出发,系统讲解HTTP方法、状态码、请求头与响应体的设计规范,并结合RESTful风格说明如何在Agent接口中正确使用这些元素。

1. HTTP协议请求-响应模型

HTTP协议基于客户端-服务器(C/S)模型,采用无状态、明文传输的请求-响应交互模式。一次完整的HTTP事务包含以下阶段:

  1. 客户端(Agent/应用)建立TCP连接(默认端口80/443)。
  2. 客户端发送HTTP请求(请求行 + 请求头 + 可选的请求体)。
  3. 服务器解析请求,执行逻辑,返回HTTP响应(状态行 + 响应头 + 响应体)。
  4. 连接关闭或复用(HTTP/1.1默认Keep-Alive)。
HTTP 请求-响应交互流程 客户端 (Agent) HTTP 请求 方法 + 头 + 体 POST /api/tool_call 服务器 HTTP 响应 状态码 + 头 + 体 200 OK 数据库 1. 构建请求 2. 发送 4. 返回 5. 接收 3. 读写 说明:Agent接口需明确指定方法、内容类型头、可接受格式,并根据状态码决策重试/降级。

2. HTTP方法(Methods)

RESTful风格要求每种方法对应一种资源操作。Agent工具调用中常用以下方法:

方法 语义 幂等 请求体 Agent典型用途
GET获取资源是否查询工具列表、获取任务状态
POST创建资源/触发动作否是调用工具、提交任务
PUT整体替换资源是是更新工具配置、覆盖状态
PATCH部分更新资源否是修改工具参数、增量变更
DELETE删除资源是可无取消任务、注销工具会话
设计原则:Agent接口应严格遵循语义化方法。例如,纯查询使用 GET,不要用 POST 做查询(除非请求体过大需用 POST 包裹,此时应明确标注)。

3. HTTP状态码(Status Codes)

状态码是服务端向Agent传递处理结果的数字信号。按大类划分如下:

范围 类别 常用码值 Agent处理建议
2xx成功200 OK, 201 Created, 204 No Content正常解析响应体;201 指示资源已创建,204 无体需特殊处理
3xx重定向301 Moved, 302 Found, 307 Temporary RedirectAgent应跟随 Location 头自动跳转(默认最多5次)
4xx客户端错误400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found, 429 Too Many Requests检查请求格式、认证信息、频率限制;不要盲目重试
5xx服务器错误500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable实现指数退避重试(Exponential Backoff)与熔断
必避误区:不要将业务逻辑错误码放在响应体而“硬吃”200状态码。正确的做法是:状态码反映HTTP事务结果,业务状态由响应体中的 code 或 status 字段承载。

4. HTTP请求头(Request Headers)

请求头携带元数据,直接影响服务器解析与安全校验。Agent接口必须关注以下头部:

头部 作用 示例值 必选/可选
Content-Type声明请求体格式application/jsonPOST/PATCH/PUT 必选
Accept声明客户端可接受的响应格式application/json推荐必选
Authorization身份认证令牌Bearer <token>认证接口必选
X-Request-ID链路追踪标识uuid-v4强烈推荐;用于日志串联
User-Agent标识客户端类型AgentSDK/1.0推荐;便于服务端识别
Cache-Control控制缓存行为no-cache根据场景可选

完整请求示例(调用Agent工具)

POST /v1/tools/calculator HTTP/1.1
Host: api.agent.example.com
Content-Type: application/json
Accept: application/json
Authorization: Bearer sk-xxxxxxxxxxxxxxxx
X-Request-ID: 550e8400-e29b-41d4-a716-446655440000
User-Agent: AgentClient/1.0

{
  "operation": "add",
  "a": 10,
  "b": 20
}

5. HTTP响应体与响应头

响应头中的 Content-Type 决定Agent如何解析响应体。标准Agent接口通常返回JSON结构:

HTTP/1.1 200 OK
Content-Type: application/json
X-Request-ID: 550e8400-e29b-41d4-a716-446655440000
X-RateLimit-Remaining: 99

{
  "code": 0,
  "message": "success",
  "data": {
    "result": 30,
    "execution_time_ms": 2
  }
}
响应体规范:推荐使用顶层 code + message + data 结构。 code=0 表示成功,非零值为业务错误码。错误时 data 可为 null 或携带错误详情 details。

6. RESTful资源设计流程

设计一个Agent工具调用接口时,遵循以下5步流程:

  1. 识别资源:确定Agent要操作的实体(如 任务、工具实例、会话)。
  2. 规划URL:使用名词复数形式,层级通过 / 表达。例:/api/v1/tasks、/api/v1/tasks/{task_id}。
  3. 分配方法:对照上表为每个端点选择正确的HTTP方法。
  4. 定义请求/响应Schema:明确必选头、可选头、请求体JSON结构、成功/错误响应结构。
  5. 指定状态码映射:列出每个端点所有可能的状态码,并附带处理策略(重试、报错、降级)。

7. 常见错误与调试要点

错误场景 表现 解决方案
缺失 Content-Type服务器返回 415 Unsupported Media Type在请求头中显式设置 Content-Type: application/json
Accept 与服务端不匹配服务端返回 406 Not Acceptable统一使用 Accept: application/json
Token过期被拒返回 401 Unauthorized实现Token刷新逻辑,或重新获取凭证
请求体格式错误返回 400 Bad Request + 错误描述校验JSON合法性,检查字段类型及必填项
请求过快触发限流返回 429 Too Many Requests + Retry-After读取 Retry-After 头,等待指定秒数再重试
服务端5xx返回 503 或 502实行指数退避:初始延迟1s,每次翻倍,最大30s

8. 调试工具与命令行快速验证

推荐使用 curl 快速验证接口行为:

# GET 请求查询工具状态
curl -s -w "\nHTTP Status: %{http_code}\n" \
  -H "Authorization: Bearer sk-your-token" \
  -H "Accept: application/json" \
  https://api.agent.example.com/v1/tools/calculator/status

# POST 请求调用工具
curl -s -w "\nHTTP Status: %{http_code}\n" \
  -X POST \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer sk-your-token" \
  -H "Accept: application/json" \
  -d '{"operation":"add","a":10,"b":20}' \
  https://api.agent.example.com/v1/tools/calculator
调试技巧:使用 -w "\nHTTP Status: %{http_code}\n" 可以在 curl 输出末尾显示状态码;添加 -v 可查看完整请求/响应头信息,快速定位缺失头部或格式问题。