【发布时间】: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