【问题标题】:JSON:API HTTP status code for duplicate content creation avoidanceJSON:API HTTP 状态码,用于避免重复内容创建
【发布时间】:2017-12-03 18:54:13
【问题描述】:

假设我有一个支持创建新消息的端点。我避免在后端创建两次相同的消息,以防用户尝试按下按钮两次(或者前端应用程序行为异常)。

目前对于重复操作,我的服务器正在响应 303 请参阅其他指向先前创建的资源 URL。但我看到我也可以使用找到的 302。哪一个看起来更合适?

请注意,避免重复的策略可能更复杂(例如,对于约会,我们会检查发布的约会是否在现有约会的一小时内)

【问题讨论】:

    标签: api duplicates json-api http-response-codes ruby-on-rails-5


    【解决方案1】:

    JSON:API specification 定义:

    服务器必须在处理 POST 请求以创建具有已存在的客户端生成 ID 的资源时返回 409 Conflict。

    【讨论】:

      【解决方案2】:

      我建议使用 HTTP 状态码 409:冲突。

      【讨论】:

        【解决方案3】:

        3XX 系列状态码通常用于客户端需要采取额外操作(例如重定向)来完成请求时。更一般地说,状态代码会向客户传达他们需要采取的行动或向他们提供有关请求的必要信息。

        通常对于此类“错误”请求(例如由于重复而导致的重复请求失败),您会以 400 状态代码进行响应,以向客户表明他们的请求存在问题并且未得到处理。您可以使用响应来更准确地传达问题。

        还要考虑的是,如果请求只是来自客户端的“即发即弃”,那么只要您已经处理了重复的情况并且客户端不再需要任何行为,则发送 200 响应可能是可以接受的.这告诉客户“请求已被适当地接收和处理,您无需再做任何事情。”但是,这有点欺骗性,因为它不会向客户端指示错误或允许任何修改的行为。

        【讨论】:

        • 所以您会选择 400 并最终发送指向原始非重复内容的链接?另外我正在使用 Jsonapi 以防这提供额外的规则......我认为 300 将是 400 和 200 之间的一个很好的选择。当我使用邮递员进行测试时,300 代码会自动重播到重定向 URL 和我想知道这是否由 HTTP 层自动完成,或者是否可以在 javascript 中轻松检测到...
        猜你喜欢
        • 2022-01-01
        • 1970-01-01
        • 2020-07-15
        • 1970-01-01
        • 1970-01-01
        • 2015-03-25
        • 2015-11-25
        • 1970-01-01
        • 2019-11-27
        相关资源
        最近更新 更多