如何决定在未定义的 REST 路由上返回 404 或 405 状态

How to decide between returning 404 or 405 status on undefined REST routes

我正在写 RESTful API 我有疑问。我创建了一个控制器来处理对未定义资源的请求(我的意思是不正确的 URI,不是正确的 URI,而是不存在的 ID)。

我的第一直觉是 return 一个 404 状态代码告诉客户端资源不存在(在 GET 请求上),但是当我开始概括处理 HEAD、OPTIONS 的逻辑时,POST、PUT 和其他 HTTP 动词,我认为最好的办法是 return 405,因为实际上,不允许在无效路由上使用这些方法(包括 GET)。

在 OPTIONS 方法的响应中,我 return 允许方法的空列表(我也不包括 OPTIONS 方法,即使它是 return 响应) .

你怎么看?有任何想法吗?我觉得这个字段有点模糊。

只是我的意见,但我认为这不是解释 "Method not allowed" 的正确方法,否则 404 有什么意义?按照同样的逻辑,您也可以争辩说它应该是 403,因为所有用户都被禁止执行该操作。

我认为这个方法是关于服务支持这种资源的操作种类,而不是资源的任何特定实例。它甚至不需要查找资源(一般来说),它只需要查看 URL 和方法,并决定这是否是一个可用的操作。

例如,只写资源可以 return 405 执行 DELETE 操作。

405 最常见的用法可能是当特定 URL 有效,但对于传入的另一个 HTTP 方法而言。