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

标签 rest specifications

假设我们有以下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/

相关文章:

REST api 的 Spring security 在身份验证失败时显示浏览器弹出窗口

json - Spring MVC @RequestBody 和部分对象/json 绑定(bind)

javascript - 好的示例/模板/最佳实践 API 文档

rest - .Net Core 和 SSL jet 可以使用 StreamSocket/RESTful/SignalR 作为服务器/客户端吗?

java - ElasticSearch:有没有办法在先前的 SearchRequest 之后将新文档插入所有索引?

javascript - localStorage getters/setters for key "getItem": bug, 规范不一致或其他什么?

language-agnostic - 为爱好项目编写规范是完成它们的唯一方法吗?

HTML5 应用程序缓存 list 文件扩展名

json - 单个独立文字能否形成有效的 JSON "document"?

performance - Taurus JSON 正文帖子