我知道正在编写API的人,并希望使用HTTP状态代码来报告查询结果。例如如果用户调用example.com/api/product_info?product_id=X
,并且产品不存在,则会返回HTTP状态400: Bad Request
。我认为,因为这是一个有效的调用(即实际的HTTP请求没有格式错误),它应该返回一个200
代码响应,并且只有响应的主体类似{status: 'error'; message: 'No such product'}
。< / p>
所以我的问题是,
1)使用HTTP状态代码来传达非HTTP程序状态是否合适,如上例所示?
2)是否有一些标准或至少广泛使用的规范描述何时适合使用HTTP状态代码?
答案 0 :(得分:2)
前几天我实际上只是在讨论这个问题 - http://blogs.mulesoft.org/api-best-practices-response-handling/
您的状态代码应该反映API的响应,因为200是&#34; OK&#34;并应用于成功返回的数据。但是,201应该用于创建的项目。
如前所述,如果用户尝试呼叫但失败(即:users /?id = 5),服务器可以返回400以通知用户它是错误请求,或者404如果资源不存在。
它还取决于操作 - 如果他们正在搜索用户并且没有响应,我将不会返回错误,只有200而没有找到结果。但是,如果他们试图对不存在的用户进行PUT或PATCH,我会告诉他们一个错误 - 因为他们的应用程序中某处存在问题。
在上面发布的链接中,您将找到更多状态代码,但使用状态代码的最大优势之一是它只是通过服务器实际发生的标题通知客户端。这允许他们进行相对快速(和低内存)检查,而不必反序列化主体并循环遍历查找错误键的数组。
基本上,你给他们提供了快速,轻松地了解正在发生的事情的工具 - 我认为每个(理智的)开发人员都很欣赏。
希望这有帮助! - 迈克