无效路径参数/查询参数的错误代码应该是什么

问题描述

对于无效的路径参数和无效的查询参数服务应该返回什么,我有点困惑。 尤其是路径参数,没人能确认是400还是404。

假设以下是服务端点:https://samples-service.com/rest/v1/qvc/{countryCode}/users?numberOfusers=10

countryCode 是路径参数。

  • 可接受的国家/地区代码为美国和英国。
  • 如果用户输入了错误的国家/地区代码,应该如何响应? 400 错误请求或 404 未找到?

我听说有人为这两种回答提供了理由。

J使用 404: 如果用户尝试访问无效路径,则服务应返回 404 Not Found。所以既然是路径参数,应该是404

400 的理由 因为是不正确的参数。应该是404。不管是路径参数还是查询参数还是payload

对我来说,这两个都有意义。不确定哪个是正确的。

numberOfusers 是查询参数 如果用户输入了无效数字(例如:负数、-9)。服务应该返回 400 或 404。 我认为在这种情况下 400 是可以接受的。但只是想确认一下。

解决方法

无论是使用路径参数还是查询参数标识资源,都是在标识资源,因此如果未找到,则返回 404 Not Found

示例

https://samples-service.com/rest/v1/qvc/{countryCode}/users
https://samples-service.com/rest/v1/qvc/users?countryCode={countryCode}

如果请求具有已定义限制的查询参数,例如pageSize 必须介于 1 和 100 之间(包括 1 和 100),则超出该范围的值无效,您应该返回 400 Bad Request

示例

https://samples-service.com/rest/v1/qvc/US/users?pageSize=0
https://samples-service.com/rest/v1/qvc/users?countryCode=US&pageSize=0

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...