【问题标题】:Which response code for resources max. limit in REST API?资源的最大响应代码。 REST API 的限制?
【发布时间】:2018-09-11 10:40:18
【问题描述】:

我正在设计一个用于注册课程的 REST API。在我的端点中,我可以POST 注册:

POST to http://my-api/class/learn-rest/enrollment

这会创建一个新的注册。但是,在这种情况下,注册人数只能是固定的,比如说 5。

当用户尝试添加第 6 次注册时,我应该返回哪个 HTTP 响应代码?

【问题讨论】:

    标签: rest http post httpresponse http-response-codes


    【解决方案1】:

    虽然建议某些特定的 HTTP 代码可能是基于意见的答案,但您应该记住一件事 - 这应该是 4xx Client error

    4xx 客户端错误:此类状态代码适用于错误似乎是由客户端引起的情况。

    在现有错误中,以下看起来最适合您:

    • 409 Conflict:表示由于请求中存在冲突而无法处理请求,例如多个同时更新之间的编辑冲突。

    我认为是这样,因为存在下一个可能的情况:假设您将注册限制设置为 5,系统中已经存在 4 个,并且服务器同时收到 2 个请求以创建新注册。在这种情况下,只有一个请求(服务器的第一个请求)是正常的。

    【讨论】:

    • +1 到 409,尽管 400 和一般客户端错误一样完全可以接受。虽然 409 经常用于版本控制/并发冲突,但它似乎也适合此用例,同时满足 RFC 7231 定义“由于与目标资源的当前状态发生冲突,请求无法完成”。跨度>
    【解决方案2】:

    好问题。不知道为什么它被否决。

    我建议使用 400。如果您无法为 4xx 错误找到特定且适当的状态代码,则应该使用它。

    • 409:这是不合适的,因为它通常是可重试的。但是,在您的情况下重试肯定会解决问题。
    • 429:它也是可重试的。

    进行了更多研究(知名 api 提供商使用的一些做法)

    LimitExceededException:如果请求导致超出以下限制之一、保险库限制、标签限制或预置容量限制,则返回。 400 错误请求

    https://docs.aws.amazon.com/amazonglacier/latest/dev/api-error-responses.html

    除非更具体的错误状态适合给定请求,否则服务应返回“400 Bad Request”和符合 Microsoft REST API 指南中提供的错误响应指南的错误负载。

    https://github.com/Microsoft/api-guidelines/blob/vNext/Guidelines.md#1521-error-response

    【讨论】:

    • 400 在这里作为一般客户端错误是合适的,尽管 409 可能是更合适的特定错误,用于表示与现有状态的冲突。关于它是否可重试,如果调用者先删除其中一个资源然后重试,有可能调用者可以解决冲突。
    猜你喜欢
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多