格式错误的 URI API 请求的 HTTP 400 与 HTTP 404

use*_*512 5 api specifications http

想象一下我们有一个名为 的端点/guest/{guestId}。该端点有一个 GET 函数,如果您为其提供 guestId,它将返回一个包含所有访客信息的对象。

问题是在每种情况下应该返回什么 -

guestId = "" 导致/guest/
guestId = "invalidId" 导致/guest/invalidId

HTTP 1.1 文档似乎为传递无效 ID 留下了空间,但建议在 IDguestId为空时返回 404。对于无效 ID,从技术上讲,它会命中端点,但只是为其提供指向 400 的格式错误的语法,但同时向服务器提供了指向 404 的无效 URI。

什么是事实正确而不是基于观点的正确?

Eve*_*ert 6

这里没有解释的余地​​。的资源/guest/invalidId不存在,应该返回 404。

无论如何,请求本身并不是真正的“格式错误”,它只是使用了一个指向不存在资源的 uri。它的格式不正确,也许从您的特定应用程序的角度来看(它不是有效的 id),但从 HTTP 协议的角度来看它不是。

作为一般规则,这也可能有所帮助:

当您想向客户端发出错误并且客户端负责时。您需要发出 400-499 范围内的错误。如果您找不到一个好的特定错误来满足您的特定错误条件,只有那时您才会真正想要使用 400,因为在实践中,当没有其他真正合适的时候,它被用作状态代码。