触发异步修改服务器状态的RPC over HTTP应选用哪种HTTP方法?
我们使用HTTP协议触发Web服务器上的异步操作,该操作随后在后台从另一台服务器加载数据并写入我们服务器的数据库。
┌──────┐ ┌──────┐ ┌───────────┐ │client│ │server│ │data-source│ └──┬───┘ └──┬───┘ └─────┬─────┘ │ │ │ │ ?METHOD? /sync-data │ │ │────────────────────→│ │ │ │ │ │ 202 ACCEPTED │ │ │←────────────────────│ │ │ │ │ │ │ Fetch data │ │ │───────────→│ │ │ │ │ │ [data] │ │ │←───────────│ │ │ │ │ │───────╮ │ │ │ Store │ │ │ │ data │ │ │ │←──────╯ │ │ │ │ ┌──┴───┐ ┌──┴───┐ ┌─────┴─────┐ │client│ │server│ │data-source│ └──────┘ └──────┘ └───────────┘
(ASCII时序图工具 credit:Diagon)
问题:该调用应选用哪种HTTP方法?
我并非寻求主观意见,而是希望得到符合行业标准、针对该特定场景的专业解答。
我整理了各方法的支持与反对论据,其中「常规用途」参考了REST中CRUD与HTTP方法的映射规则。
| 方法 | 常规用途 | 本场景适用理由 | 不适用理由 |
|---|---|---|---|
| GET | 读取数据 | • 请求不会立即改变服务器状态 • 无请求体 • 测试最简便 | • 服务器状态最终会被改变 |
| POST | 创建新对象 | • 是用于变更操作的常用方法 | • 触发的异步操作并非创建类型 • 方法返回后服务器状态尚未改变 |
| PUT | 替换现有对象 | • 听起来可行,但... | • 用于替换服务器数据的内容未包含在请求中 • 方法返回后服务器状态尚未改变 |
| DELETE | 删除现有对象 | N/A | N/A |
| PATCH | 部分更新现有对象 | N/A | • 我们并非修改「记录的部分字段」 • 用于替换服务器数据的内容未包含在请求中 • 方法返回后服务器状态尚未改变 |
编辑说明:针对被标记为「主观意见类」的质疑
我并非询问个人主观意见,而是希望了解哪种HTTP方法最符合上述场景的行业标准。我可能有自己的看法,但需要行业标准作为支撑。我整理的论据看似主观,实则是梳理已知信息以寻找答案的过程。
请不要仅凭「哪种最佳」的表述就判定为「主观意见类」问题。
内容的提问来源于Stack Exchange,提问作者Honza Zidek
相关产品推荐
相关产品推荐

