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

时间:2019-04-16 14:28:47

标签: rest specifications

假设我们有以下API:

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

在代码中,我希望'color'与枚举中的某些值匹配,并且'number'是整数。

例如:

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

将使用HTTP 200进行响应。

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

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

是否为404,因为颜色'foo'和整数'bar'不存在?还是400,因为客户未使用某些约定的允许值(枚举,整数)?

2 个答案:

答案 0 :(得分:0)

  

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

404

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

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

答案 1 :(得分:0)

404响应的资源可能在以后的某个时间是200

例如,您查询一种颜色,该颜色到今天为止尚不可用,但明天可能会添加:

GET /api/colors/lightblue

应回复404

鉴于/api/integers/bar之类的请求格式不正确,将来还会格式不正确,因此应以400进行响应;从语义上讲,整数不能是字符串。

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

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