【问题标题】:What is the proper HTTP status code to be used when a strategy selection fails server side?当策略选择在服务器端失败时使用的正确 HTTP 状态代码是什么?
【发布时间】:2020-10-22 20:12:31
【问题描述】:

考虑实现算法的服务器端过程和用于对提供的输入数据执行算法的 API 端点。

为了修正这个想法,假设请求内容描述了两个地方之间的旅行,并且服务器端算法用于计算完成旅行所需的时间。还想象一下,存在许多计算旅行时间的算法,并且算法选择在某种程度上基于请求内容(调用 API 端点的客户端可以指定他不想使用收费公路,或者他可能想使用尽可能不繁忙的道路)。

这种情况通常使用strategy pattern的变体之一进行编码

现在图像,API 客户端指定他想使用风景最优美的路线,并且我们的服务器端实现不包含用于此请求的算法(可能唯一可用的算法是“避开收费公路”,“最不繁忙的道路”和“最短路径”)。在这种情况下,服务器无法处理用户请求,必须向客户端返回某种错误状态代码。

我应该认为服务器无法处理请求因此返回 5XX 状态码还是客户端请求包含无效参数因此返回 4XX 状态码?

换句话说,服务器是因为服务器端问题而无法处理请求,还是客户端向服务器发送了无效/格式错误的请求?

【问题讨论】:

  • 从来没有一个“正确”的状态码可用于 Web API - 这取决于作为 API 设计者的您认为最合适的任何内容(包括但不限于定义您自己的 4xx /5xx 此实例的状态代码)。就个人而言,我会坚持使用已知的 4xx 响应 - 也许是 422 Unprocessable Entity?
  • @IanKemp 同意你的观点,因为我们希望有一个完整的服务器端实现(我的意思是,考虑到业务场景允许的所有情况)所以如果算法选择错误,这意味着客户端请求了一个不允许/设想的用例,所以这是客户端错误而不是服务器错误。
  • @IanKemp 但我不是休息专家,正如您在评论中注意到的那样,http 状态代码需要某种解释,它们不是确定性的。所以我问那些在这种权衡和解释方面比我更有经验的人。

标签: rest http asp.net-core asp.net-core-webapi http-status-codes


【解决方案1】:

提及

我们的服务器端实现不包括用于此请求的算法

将 API 与现有“算法”一起使用是客户的责任。
根据我对您的问题的理解,客户端没有明确发送?algorithm=ASTAR 之类的参数。 只剩下两种可能:

  • 服务器确实理解请求但无法处理它。 ?tollRoads=false 是一个有效参数
    • 是否有后备方案?您可以重定向到任何其他算法吗?
      • 是 => 300 您可以将用户重定向到其他网址
      • 否 => 204/501 请求有效,但服务器无法处理
  • 这不是一个有效的参数 => 400 用户不应该发送这样的参数

【讨论】:

    猜你喜欢
    • 2010-09-26
    • 1970-01-01
    • 2010-12-29
    • 1970-01-01
    • 2019-07-11
    • 2018-02-24
    • 2015-09-18
    相关资源
    最近更新 更多