【问题标题】:What error should be returned if response don't return expected field?如果响应没有返回预期字段,应该返回什么错误?
【发布时间】:2022-09-22 21:49:20
【问题描述】:

假设您向端点发送请求并期望接收记录数组字段作为响应,如下所示:

{
\"records\": [
...
],
}

现在您正在处理response.data.record,但随后您发现记录字段不存在。

我应该抛出异常吗?如果是,描述此错误的最佳状态代码是什么?

考虑一个请求的格式正确并发送到端点。

我正在遍历数组并搜索特定对象,因此我考虑返回404,但在这种特定情况下,我什至没有要迭代的数组。

  • 这在很大程度上是一个意见问题,因此对于 SO 来说是题外话,但这看起来像一个错误的请求对我来说,有一个特定的 HTTP 状态代码:400
  • 通常 API 端点定义结果响应,应该为端点固定,除非它对提供的参数做出反应并返回特定结果。但是,如果您访问 API 端点,它应该始终返回一个后续响应/数据结构以供依赖。如果请求将返回响应,其中无法返回响应/数据结构,则服务器本身应根据问题以 HTTP-Error 响应。这将是 HTTP 状态代码 400,或者如果找不到匹配的资源,则 HTTP 状态代码 404 可能就足够了。
  • 但这意味着请求在某种程度上是错误的,对吧?这里的重点是,由于某种原因,响应不如预期。我们可以假设请求的格式正确。
  • 如果由于“服务器端”上缺少资源来处理而发生这种情况,则使用 500 可能是可以的,即不受客户要求的影响.如果由于客户端的请求,服务器请求记录(例如客户端请求服务器迭代客户端的查询记录)。然后,我认为使用 404 是安全的,因为这显然是服务器缺少的东西客户要求.

标签: javascript error-handling http-error


【解决方案1】:

通常,当您不希望请求以它到达的方式时,您可以使用400 - bad request。根据Mozilla MDN docs

400 错误请求 - 由于某些被认为是客户端错误(例如,格式错误的请求语法、无效的请求消息帧或欺骗性请求路由),服务器无法或不会处理请求。

因为,通常在找不到资源时使用 404。

【讨论】:

  • 在这种情况下,请求已正确发送。使用400仍然有效吗?
  • 哦,我明白了。如果您正在使用客户端,则不应返回任何状态代码。根据客户端-服务器架构,您只需通知用户此请求没有结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-13
  • 2012-02-20
  • 2018-05-23
  • 2018-07-22
  • 2019-05-26
相关资源
最近更新 更多