假设我们有以下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,因为客户未使用某些约定的允许值(枚举,整数)?
答案 0 :(得分:0)
是否为404,因为颜色'foo'和整数'bar'不存在?
404。
所有4xx状态代码都通知客户端请求存在某种问题。语义上的区别是404
暗示目标uri中存在拼写错误。
我们关心的原因之一:404
是cacheable;通用组件可以记住对请求的响应,并在重复请求时保存到服务器的往返行程。
答案 1 :(得分:0)
以404
响应的资源可能在以后的某个时间是200
。
例如,您查询一种颜色,该颜色到今天为止尚不可用,但明天可能会添加:
GET /api/colors/lightblue
应回复404
。
鉴于/api/integers/bar
之类的请求格式不正确,将来还会格式不正确,因此应以400
进行响应;从语义上讲,整数不能是字符串。
发送400
告诉客户端“不要再次查询”,客户端可以隐式“记住”(缓存)此答案。
404
告诉客户端“当前,我没有您的要求,请稍后再试”。客户端可以基于启发式或显式应用缓存。