【发布时间】:2015-03-14 19:27:30
【问题描述】:
我认识一个正在编写 API 并希望使用 HTTP 状态代码来报告查询结果的人。例如如果用户调用example.com/api/product_info?product_id=X,并且该产品不存在,它将返回HTTP状态400: Bad Request。我认为,由于这是一个有效的调用(即实际的 HTTP 请求没有格式错误),它应该返回一个 200 代码响应,并且响应的正文类似于 {status: 'error'; message: 'No such product'}。
所以我的问题是,
1) 如上例所示,使用 HTTP 状态码来传达非 HTTP 程序状态是否合适?
2) 是否有一些标准或至少广泛使用的规范来描述何时适合使用 HTTP 状态代码?
【问题讨论】:
-
当客户询问不存在的产品资源时,我认为 404 更适合您的情况。当事情没有按预期进行时,您应该返回 4XX 或 5XX。 This 可能会有所帮助。 2.HTTP specification
-
@FrAn 不确定这是否真的是资源不存在的情况。再举个例子,如果 api 调用是
/setprice?product=X&price=Y,如果产品 X 存在,但 Y 不是可接受的价格(例如,当最低价格为 5 美元时为 1 美元),您会返回什么响应?还是 404? -
在这种情况下,我会返回 400 或 403,在这种情况下,客户正在尝试设置价格,但价格值是不可接受的,而不是尝试获取产品,所以没有 404。这是值得商榷的问题。
标签: http-status-codes api-design