【问题标题】:HTTP status code for arguments combination is not valid?参数组合的 HTTP 状态代码无效?
【发布时间】:2012-06-25 05:35:13
【问题描述】:
我已经使用名为 project 和 device 的两个资源创建了一个安静的 Web 服务。它旨在使用诸如“/project/{projectId}/device/{deviceId}”之类的 URI 来访问项目中的特定设备。但是,如果设备不属于该项目,则没有任何意义。如果 projectId 和 deviceId 不匹配,系统应该返回什么状态码?
HTTP 400 错误请求:不太可能,因为请求的语法是正确的。
HTTP 403 Forbidden:很可能,但我想在项目或设备被禁用时返回 403。
找不到 HTTP 404:projectId 和 deviceId 都存在。他们只是不匹配。
【问题讨论】:
标签:
rest
http-status-codes
【解决方案1】:
404 未找到
这表明该网址作为一个整体不对应任何资源。
来自RFC 2616 sec 10.4.5:
服务器没有找到任何匹配 Request-URI 的东西。不
指示该状况是暂时的还是
永久的。
但是,您始终可以在正文和标题中提供其他信息。例如,您可以在正文中放置相关项目 URI 和相关设备 URI 的链接,并说明设备与项目无关。
404 Not Found
The project http://example.com/project/1234 does not contain the device
http://example.com/device/4321
“400 Bad Request”状态应该只用于有语法错误的请求。来自RFC 2616 sec 10.4.1
由于格式错误,服务器无法理解请求
语法。
“403 Forbidden”语义有点模糊。