假设我们有以下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因为客户端没有使用一些约定的允许值(枚举,整数)?
与404
一起回应的资源可能是后来的200
。
例如,您查询的是当前不可用的颜色,但可能会在明天添加:
GET /api/colors/lightblue
应该回应404
。
虽然像/api/integers/bar
这样的请求格式不正确,将来会出现格式错误,所以它应该回应400
;一个整数在语义上永远不会是一个字符串。
发送400
告诉客户端“不再查询”,客户端可以隐式“记住”(缓存)这个答案。
404
告诉客户“现在,我没有你要求的,请稍后再试”。客户端可以基于启发式或显式应用缓存。