在设计一个基于几个传统应用的 web 服务 API 时,除了 Response Body 中的 JSON/XML 数据结构外,我们还希望返回使 Web 缓存和开发人员都能理解的 HTTP 状态码。但是,如何将不同类型的错误映射到适当的 HTTP 状态码上呢?团队中的每个人都同意以下内容:
GET /package/1234 返回 404 Not Found 如果 1234 不存在
GET /package/1234/next_checkpoint 如果“next_checkpoint” 和 1234 都是有效的但是 next_checkpoint 在此处无意义,则返回 400 Bad Request
以此类推... 但是,在某些情况下,需要更具体的描述而不仅仅是 “400” - 例如:
POST /dispatch/?for_package=1234 如果 /dispatch 和包 1234 都存在,但 1234 还没有准备好进行调度,则返回 412 Precondition Failed。
这样做是否被认为是良好实践,即重用 RFC HTTP 状态码,还是我们应该创造新的状态码,这些状态码与我们特定的错误原因完全对应?
(编辑:HTTP/1.1 中的状态码 和 WebDAV 扩展中的状态码)