【问题标题】:HTTP status to return when POST is called multiple times?多次调用 POST 时返回 HTTP 状态?
【发布时间】:2017-11-09 14:52:43
【问题描述】:

我有一个 POST 端点,它在数据库中创建/插入一条新记录。

POST /payments/cards 将在数据库中添加/保存支付卡,并在 200 OK 时返回添加的卡信息作为响应。现在,如果我们再次调用相同的端点,它会更新数据库中现有的支付卡,这不应该发生。

所以,我正在添加逻辑检查支付卡是否已经存在,以便我们不会更新它。

在这种情况下要返回的 HTTP 状态是什么?

【问题讨论】:

    标签: rest post http-post


    【解决方案1】:

    对于 POST 响应,如果创建了新记录,则使用 201,否则使用 200 或者可能使用 409。我认为 409 Conflict 是最合适的,但是,当然很少在野外看到:

    由于与资源的当前状态冲突,请求无法完成。仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。响应正文应该包含足够的信息让用户识别冲突的来源。理想情况下,响应实体将包含足够的信息供用户或用户代理解决问题;但是,这可能是不可能的,也不是必需的。

    在响应 PUT 请求时最有可能发生冲突。例如,如果正在使用版本控制并且被 PUT 的实体包括对资源的更改,这些更改与早期(第三方)请求所做的更改相冲突,则服务器可能会使用 409 响应来指示它无法完成请求.在这种情况下,响应实体可能会以响应 Content-Type 定义的格式包含两个版本之间差异的列表。

    【讨论】:

    • 是的,我考虑过 409。422 更合适吗?请有任何想法.. 422 UNPROCESSABLE ENTITY 服务器了解请求实体的内容类型(因此 415 Unsupported Media Type 状态码不合适),请求实体的语法是正确的(因此 400 Bad Request 状态码是不合适的) 但无法处理包含的说明。例如,如果 XML 请求正文包含格式正确(即语法正确)但语义错误的 XML 指令,则可能会发生这种错误情况。
    • 肯定也会建议 409,或者干脆 403。
    猜你喜欢
    • 2015-02-16
    • 2017-07-29
    • 1970-01-01
    • 2021-01-13
    • 2018-07-23
    • 2018-09-14
    • 2023-03-24
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多