首页 > 解决方案 > 当查询字符串中缺少参数时使用什么状态码?

问题描述

我有一个端点,它需要通过查询字符串传递的参数(是一个 GET 动词)。

当请求中缺少此参数时,应提供什么适当的状态代码?400是一个?还是我应该用 404 回应?

[GET /search?q=ok] => 200 OK
[GET /search] => 400 Bad Request? or 404 Not Found? Or 422 Unprocessable Entity? Others?

标签: resthttprfc

解决方案


TLDR这是一个 HTTP 400 - 错误请求。

这是400因为用户没有发送必填输入字段。

为什么不 422 - 因为这种情况适合400. 牢记您的消费者,如果您确实不需要,则不应使用非流行的响应代码。

HTTP 404 的案例:

1)客户端请求的网址在您的服务器中不存在(通常这将由您的服务器处理。应用程序开发人员通常不需要做任何事情,除非您想要一个漂亮的 404 页面和 SEO 原因)。

2) 如果它是一个path参数并且客户端正在寻找一个具有 id 的实体(例如 (/students/{id}并且您的应用程序找不到这样的实体,您可以使用 HTTP 404 进行响应。

比方说,用户发送查询参数并且您没有找到任何与查询参数匹配的项目,别搞错了,它仍然是一个HTTP 200with body 作为一个空数组左右(不是 404,不像前一个案例中提到的那样)


推荐阅读