新方法
认识 HTTP QUERY
QUERY 是一个安全、幂等、可携带请求体的查询方法 —— 相当于“带 body 的 GET”。它让复杂的查询条件放进请求体,而不必塞进超长 URL,也不必借用语义并不匹配的 POST。
/api/echo
→ request
QUERY /productsNEWAccept: application/jsonContent-Type: application/json { "category": "boots", "inStock": true}← response
200 OKContent-Location: /products?…Cache-Control: max-age=60 { "results": 42, "cacheable": true}同一搜索,四种实现
同一个商品搜索,四种实现方式的对比:
| 能力 | GET · URL | GET · body | POST | QUERY |
|---|---|---|---|---|
| 请求体 (Request body) | 无 | 语义未定义 · 应避免 | JSON | JSON |
| 安全 Safe(无副作用) | ✓ | ✓ | ✗ | ✓ |
| 幂等 Idempotent | ✓ | ✓ | ✗ | ✓ |
| 响应可缓存 Cacheable | ✓ | ~不可靠 · 未定义 | ~默认否 · 需显式声明 | ✓经 Content-Location |
| 过滤条件不进 URL | ✗ | ✓ | ✓ | ✓ |
| 不受 URL 长度限制 | ✗~2KB 上限 | ✓ | ✓ | ✓ |
| 已标准化并广泛支持 | ✓ | ✓ | ✓ | ~新 RFC · 采用早期 |