0

当 API 接收到映射系统中附加数据但未找到附加数据的属性时,我无法选择正确的 HTTP 状态。我最初的想法是422因为它描述了用例,但听起来它是为 WebDAV 保留的。然后我在想也许是一个404,但我在心里把它与一个不正确的 URL 联系起来。另一个选项是使用错误代码200并显示失败消息。

示例:密钥nvdaKey不是系统知道的密钥配置。

POST: pgpTool.com/encrypt

{
  "message": "my secret message",
  "keyConfigName": "nvdaKey"
}
4

1 回答 1

1

IANA HTTP 状态代码注册表目前将HTTP 语义列为状态代码422的权威参考

422(Unprocessable Content)状态码表示服务器理解请求内容的内容类型(因此415(Unsupported Media Type)状态码是不合适的),请求内容的语法正确,但无法处理包含的说明。

因此,如果您认为这是赢家,那就去吧。

403 Forbidden也是一个选项(“我理解您的要求,但我拒绝满足它”)。

状态码是通过网络域传输文档的元数据;目标受众是通用 HTTP 组件(浏览器、缓存、代理......) 客户端应该从正文中获取消息的语义(就像我们期望人类阅读 Web 以通过以下方式学习错误一样)读取返回的网页,而不是读取 HTTP 标头)。

因此,除了一些纯粹的机械问题(缓存、标头的解释)之外,只要您获得正确的类 (Client Error / 4xx),就不一定要准确地生成正确的状态代码。

请注意,无法识别 422 的客户端应将响应视为 400。

于 2022-03-01T01:12:18.217 回答