1

我已经使用名为 project 和 device 的两个资源创建了一个安静的 Web 服务。它旨在使用诸如“/project/{projectId}/device/{deviceId}”之类的 URI 来访问项目中的特定设备。但是,如果设备不属于该项目,则没有任何意义。如果 projectId 和 deviceId 不匹配,系统应该返回什么状态码?

  1. HTTP 400 错误请求:不太可能,因为请求的语法是正确的。

  2. HTTP 403 Forbidden:很可能,但我想在项目或设备被禁用时返回 403。

  3. 未找到 HTTP 404:projectId 和 deviceId 都存在。他们只是不匹配。

4

1 回答 1

5

404 未找到

这表明 URL整体上不对应任何资源。

RFC 2616 秒 10.4.5

服务器未找到任何与请求 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 秒 10.4.1

由于语法错误,服务器无法理解该请求。

“403 Forbidden”语义有点模糊。

于 2012-06-25T05:36:01.847 回答