REST中的资源不支持操作时的HTTP状态代码404或501

sba*_*y71 7 rest http

我有一个REST服务,并且根据正在查看的资源类型,我可以进行某些操作

所以Resource1支持Operation1Operation2

例如:

Resource1/Operation1

Resource1/Operation2
Run Code Online (Sandbox Code Playgroud)

并且Resource2仅支持Operation1

例如:

Resource2/Operation1
Run Code Online (Sandbox Code Playgroud)

因此,如果我收到Operation2on 的呼叫Resource2(例如Resource2/Operation2:),则由于Operation2有效,服务器不会引发错误,但是内部不支持该错误,因此我应该返回404(未找到)还是501(未实现)更准确还是其他错误代码?

Ger*_*cke 7

您必须考虑资源(存在的资源并对其进行操作)而不是服务(如WebServices)(您称其做某事)。

因此,REST API的每个操作本身就是一种资源(例如,对长时间运行的操作或通过向操作资源发送POST请求而触发的某种更复杂的交易进行建模),并且该资源的URI是任何不透明的字符串,可以是“ Resource1 / Operation1”或“ / someOther /任意/路径”,

501表示HTTP服务器本身具有未实现的,必须满足请求的特定功能-即,它缺少某些技术功能-但资源本身是有效的。

但是,正如您所写的那样,您的Rest API根本不旨在支持Resource2的Operation2,这意味着不存在“ Resource2 / Operation2”服务资源。因此,404响应是唯一合理的选择。

关于“客户端将如何交互……”,请问自己:考虑到是资源(即某个任意网站)的使用者,在收到404时是否会重新访问相同的URL?(可能不会)(如果没有),您会收到501吗?(可能是的,因为您同时认为问题已解决)

TL; DR

返回404