意外路径变量类型为400 vs 404

问题描述 投票:2回答:2

假设我们有以下API:

GET /api/colors/{color}
GET /api/integers/{number}

在代码中我希望'color'匹配enum中的某个值,'number'是一个整数。

例如:

GET /api/colors/red
GET /api/integers/2

会回复HTTP 200。

但那我应该如何回应以下请求:

GET /api/colors/foo
GET /api/integers/bar

应该是404,因为颜色'foo'和整数'bar'不存在?或400因为客户端没有使用一些约定的允许值(枚举,整数)?

rest specifications
2个回答
0
投票

404一起回应的资源可能是后来的200

例如,您查询的是当前不可用的颜色,但可能会在明天添加:

GET /api/colors/lightblue

应该回应404

虽然像/api/integers/bar这样的请求格式不正确,将来会出现格式错误,所以它应该回应400;一个整数在语义上永远不会是一个字符串。

发送400告诉客户端“不再查询”,客户端可以隐式“记住”(缓存)这个答案。

404告诉客户“现在,我没有你要求的,请稍后再试”。客户端可以基于启发式或显式应用缓存。


0
投票

应该是404,因为颜色'foo'和整数'bar'不存在?

404

所有4xx状态代码都通知客户端请求存在某种问题。语义上的区别是404暗示目标-ur中存在拼写错误。

我们关心的原因之一:404cacheable;通用组件可以记住对请求的响应,并在重复请求时保存到服务器的往返。

© www.soinside.com 2019 - 2024. All rights reserved.