Cru*_*yro 11 rest http-status-codes http-status-code-404
如果我有如下所示的 REST 资源:
获取http://www.example.com/customers/ {customerId}/orders
如果提供的 customerId 不存在,我的服务器应该返回 404(未找到)还是 400(错误请求)?
我想说404 Not Found
在这种情况下你应该回来。
为了详细说明这个问题,我对本例中的规范的解释如下:
400 Bad Request
用于应用程序成功接收请求,并且应用程序确定请求有问题的情况:端点不存在,或者请求参数/变量的格式或性质不正确/格式错误以某种方式使请求无效。
这就是 @Trevor Conn 的示例,其中customerID
请求中的格式无效(太长、太短、无效字符等),并且由于错误而无法尝试查找或操作。
这一200
系列响应(@Trevor Conn 也提到过)表明针对有效实体或主题的请求已成功处理。
204 No Content
应该在找到主题或执行操作,并且请求的真实有效输出或结果为“Nothing”的情况下使用。
据我了解,这做了一些事情:
204 No Content
,它将向浏览器指示请求已成功,但实际上不会导航到任何地方(视口和当前 URI 都将保持不变)。在您的情况下,404 Not Found
这将是对有效端点请求的正确响应,格式正确customerID
,但不会解析为客户。
稍微往兔子洞里走去……
您还可以跟踪哪些有效的customerID
已被删除/存档,并响应410 Gone
它们是否曾经存在,或者451 Unavailable For Legal Reasons
客户是否因法律要求而被删除。
另外值得注意的是,如果您使用 OOP 语言工作,您可能处于将端点/操作视为“方法”的生态系统中。
如果您确实要深入了解 HTTP 响应代码的兔子洞,则值得注意的是,400 Bad Request
在这种情况下,句柄的使用缺少“方法”。这与 不同405 Method Not Allowed
,其中的“方法”指的Method Not Allowed
是 HTTP 方法 ( GET
/// ) 。 应该并且仅在客户端尝试对不支持该方法的端点使用这些方法之一的情况下使用。POST
PUT
DELETE
405
一个例子是使用:
DELETE http://www.example.com/customers/{customerId}/orders
Run Code Online (Sandbox Code Playgroud)
正确的用法是:
DELETE http://www.example.com/customers/{customerId}/orders/{orderID}
Run Code Online (Sandbox Code Playgroud)
再往下看:“不允许”严格指的是该方法是否被实现,如果用户缺乏执行其他实现的 HTTP 方法的权限,则正确的响应将是403 Forbidden
,或者401 Unauthorized
如果客户端的权限可以无法确定,因为客户端尚未进行身份验证。
更多兔子洞...
501 Not Implemented
是 HTTP 方法失败的服务器指示器(因为服务器本身,无论是 Nginx、Apache 还是任何其他服务器)在基础级别上不支持 HTTP 请求方法。
IE:
EXPELLIARMUS http://www.example.com/customers/{customerId}
Run Code Online (Sandbox Code Playgroud)
205 Reset Content
类似于204
它指示请求成功以及真正的空响应,只不过它指示客户端就地重置其文档视图(根本204
不触发任何操作)。
归档时间: |
|
查看次数: |
13685 次 |
最近记录: |