rest - 当查询字符串中缺少参数时使用什么状态码?
问题描述
我有一个端点,它需要通过查询字符串传递的参数(是一个 GET 动词)。
当请求中缺少此参数时,应提供什么适当的状态代码?400是一个?还是我应该用 404 回应?
[GET /search?q=ok] => 200 OK
[GET /search] => 400 Bad Request? or 404 Not Found? Or 422 Unprocessable Entity? Others?
解决方案
TLDR这是一个 HTTP 400 - 错误请求。
这是400
因为用户没有发送必填输入字段。
为什么不 422 - 因为这种情况适合400
. 牢记您的消费者,如果您确实不需要,则不应使用非流行的响应代码。
HTTP 404 的案例:
1)客户端请求的网址在您的服务器中不存在(通常这将由您的服务器处理。应用程序开发人员通常不需要做任何事情,除非您想要一个漂亮的 404 页面和 SEO 原因)。
2) 如果它是一个path
参数并且客户端正在寻找一个具有 id 的实体(例如 (/students/{id}
并且您的应用程序找不到这样的实体,您可以使用 HTTP 404 进行响应。
比方说,用户发送查询参数并且您没有找到任何与查询参数匹配的项目,别搞错了,它仍然是一个HTTP 200
with body 作为一个空数组左右(不是 404,不像前一个案例中提到的那样)
推荐阅读
- redis - redis哨兵故障转移后返回老主人
- c# - DispatchTimer 未在服务中触发
- draftjs - 如何在 Draft.js 中使用修饰符装饰文本
- xtext - 扩展 Xbase 类型系统
- java - 在 LWJGL 中提高渲染性能的最佳方法
- r - 从字符串转换为逻辑时如何明确警告会产生 NA
- javascript - Codeigniter + Biostall 的 Google Maps API v3:不同标记中的不同信息窗口
- python - Python:杀死子进程不起作用(错误的PID)
- android - 'com.android.support:appcompat-v7:27.1.1' 与 com.google.android.gms:play-services-maps:15.0.1 冲突?
- c++ - 在现代 C++ 中是否可以将字符串文字作为参数传递给 C++ 模板?