【问题标题】:Should REST API returns error 400 on request that should not have query?REST API 是否应该在不应该有查询的请求上返回错误 400?
【发布时间】:2020-06-23 12:14:02
【问题描述】:

如果端点/请求 URL 应该不接收任何查询但请求者仍然提供查询,那么 HTTP 中是否有关于如何处理请求的标准?

如果存在,标准说明了什么?如果没有,是否有任何其他相关标准/声明与此相关,例如在 HTTP 标准中一般应该如何处理请求查询或类似的处理?

谢谢

【问题讨论】:

  • 通常不期望的部分参数会被忽略。

标签: api rest http


【解决方案1】:

默认情况下,当你收到比预期更多的参数时,如果你不需要它,你不在乎

【讨论】:

  • 是的,但是如果所述参数是必需的,例如“id”号,该怎么办。当它预计存在但只有一个客户提供这样的查询“/?id=10&id=11”时,应该如何处理这种情况?
【解决方案2】:

如果端点/请求 URL 应该不接收任何查询但请求者仍然提供查询,那么 HTTP 中是否有关于如何处理请求的标准?

从HTTP的角度来看,请求行中的整个target-uri就是资源的标识符:

POST /123?456

在本例中,目标 uri 为 /123?456

RFC 7231 定义 404 Not Found

404(未找到)状态码表示源服务器没有找到目标资源的当前表示或不愿意透露存在的表示。

也就是说,如果你想引起客户注意目标uri的拼写,404 Not Found就是这样做的方法。

也就是说,没有关于服务器如何解释目标 uri 的“规则”。如果您想忽略查询部分,并提供与/123 相同的表示形式,那么这很好

当你收到比预期更多的参数时,如果你不需要它,你不在乎

在消息传递中,在尝试确保您的架构向前/向后兼容时,忽略消息中无法识别的部分可能很有用;使用旧规范的旧客户端可以使用新规范与新服务器通信,反之亦然。

header specification for HTTP中描述了相同的原理

其他收件人应该忽略无法识别的标头字段。这些要求允许增强 HTTP 的功能,而无需事先更新已部署的中介。

【讨论】:

  • 所以,例如,如果服务器只需要一个“id”,那么请求是 /?id=10&id=12 我们可以抛出 404 ?
  • 是的。我们还可以将一堆缓存元数据放入响应中,以便中间组件可以为我们处理。如果我们需要为客户端提供更详细的解释,则进入响应消息正文
猜你喜欢
  • 2018-08-17
  • 2017-02-17
  • 2011-05-17
  • 2017-10-20
  • 2021-01-11
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多