REST 调用中缺少路径参数应该导致 400 还是 404?
Should a missing Path Parameter in a REST call result in 400 or 404?
如果 REST 服务有 2 个用例,
GET
http://localhost:8080/resource/{id}
==> 即 returns 所有
根据“id”的资源数据
因此,如果客户端请求没有像 GET
这样的“id”路径参数
http://localhost:8080/resource/
那应该是一个合适的
对此请求的回应。应该是 400 还是 404?
请注意,GET
http://localhost:8080/resource/
没有托管服务
GET
http://localhost:8080/users/{id}/history/
==> 即 returns
根据“id”的用户历史详细信息
因此,如果客户端请求没有像 GET
这样的“id”路径参数
http://localhost:8080/users/history/
那应该是一个合适的
对此请求的回应。应该是 400 还是 404?
请注意,没有为 GET
托管的服务 http://localhost:8080/users/history/
So if client requests without "id" path parameter like GET http://localhost:8080/resource/ then what should be an appropriate response to this request. Should it be 400 or 404 ?
404.
- 那是调用者特别注意有效请求uri的错误码
- 404 默认是可缓存的。您希望客户端和代理记住并重用 404 响应。 400(可以涵盖各种各样的问题)不会出现这种行为。
同样的论点适用于你的两个例子。
如果 REST 服务有 2 个用例,
GET
http://localhost:8080/resource/{id}
==> 即 returns 所有 根据“id”的资源数据因此,如果客户端请求没有像
GET
这样的“id”路径参数http://localhost:8080/resource/
那应该是一个合适的 对此请求的回应。应该是 400 还是 404?请注意,
没有托管服务GET
http://localhost:8080/resource/
GET
http://localhost:8080/users/{id}/history/
==> 即 returns 根据“id”的用户历史详细信息因此,如果客户端请求没有像
GET
这样的“id”路径参数http://localhost:8080/users/history/
那应该是一个合适的 对此请求的回应。应该是 400 还是 404?请注意,没有为
GET
托管的服务http://localhost:8080/users/history/
So if client requests without "id" path parameter like GET http://localhost:8080/resource/ then what should be an appropriate response to this request. Should it be 400 or 404 ?
404.
- 那是调用者特别注意有效请求uri的错误码
- 404 默认是可缓存的。您希望客户端和代理记住并重用 404 响应。 400(可以涵盖各种各样的问题)不会出现这种行为。
同样的论点适用于你的两个例子。