假设我们有以下API:
GET /api/colors/{color}
GET /api/integers/{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
告诉客户“现在,我没有您的要求,请稍后再试”。客户端可以基于启发式或显式应用缓存。
关于rest - 意外路径变量类型为400 vs 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55710574/