我有一个REST服务,并且根据正在查看的资源类型,我可以进行某些操作
所以Resource1支持Operation1和Operation2
例如:
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(未实现)更准确还是其他错误代码?
您必须考虑资源(存在的资源并对其进行操作)而不是服务(如WebServices)(您称其做某事)。
因此,REST API的每个操作本身就是一种资源(例如,对长时间运行的操作或通过向操作资源发送POST请求而触发的某种更复杂的交易进行建模),并且该资源的URI是任何不透明的字符串,可以是“ Resource1 / Operation1”或“ / someOther /任意/路径”,
501表示HTTP服务器本身具有未实现的,必须满足请求的特定功能-即,它缺少某些技术功能-但资源本身是有效的。
但是,正如您所写的那样,您的Rest API根本不旨在支持Resource2的Operation2,这意味着不存在“ Resource2 / Operation2”服务资源。因此,404响应是唯一合理的选择。
关于“客户端将如何交互……”,请问自己:考虑到您是资源(即某个任意网站)的使用者,在收到404时是否会重新访问相同的URL?(可能不会)(如果没有),您会收到501吗?(可能是的,因为您同时认为问题已解决)
TL; DR
返回404