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

如何决定在未定义的REST路由上返回404或405状态,rest,http,http-headers,Rest,Http,Http Headers,我正在写一个RESTful API,我有一个疑问。我创建了一个控制器来处理对未定义资源的请求(我指的是不正确的URI,不是正确的URI,而是ID不存在的URI) 我的第一个直觉是返回404状态码,告诉客户端资源不存在(在GET请求中),但当我开始概括处理HEAD、OPTIONS、POST、PUT和其他HTTP动词的逻辑时,我认为最好的办法是返回405,因为事实上,不允许使用这些方法(包括GET)在无效的路由上 在OPTIONS方法的响应中,我返回了一个允许方法的空列表(我也不包括OPTIONS方

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

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

在OPTIONS方法的响应中,我返回了一个允许方法的空列表(我也不包括OPTIONS方法,即使它返回了响应)


你觉得怎么样?有什么想法吗?我认为这个领域有点模糊。

只是我的观点,但我不认为这是解释“方法不允许”的正确方式,否则404的意义何在?根据同样的逻辑,您也可以认为应该是403,因为所有用户都被禁止执行该操作

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

例如,仅写资源在删除操作时可能返回405

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