【发布时间】:2017-11-09 14:52:43
【问题描述】:
我有一个 POST 端点,它在数据库中创建/插入一条新记录。
POST /payments/cards 将在数据库中添加/保存支付卡,并在 200 OK 时返回添加的卡信息作为响应。现在,如果我们再次调用相同的端点,它会更新数据库中现有的支付卡,这不应该发生。
所以,我正在添加逻辑检查支付卡是否已经存在,以便我们不会更新它。
在这种情况下要返回的 HTTP 状态是什么?
【问题讨论】:
我有一个 POST 端点,它在数据库中创建/插入一条新记录。
POST /payments/cards 将在数据库中添加/保存支付卡,并在 200 OK 时返回添加的卡信息作为响应。现在,如果我们再次调用相同的端点,它会更新数据库中现有的支付卡,这不应该发生。
所以,我正在添加逻辑检查支付卡是否已经存在,以便我们不会更新它。
在这种情况下要返回的 HTTP 状态是什么?
【问题讨论】:
对于 POST 响应,如果创建了新记录,则使用 201,否则使用 200 或者可能使用 409。我认为 409 Conflict 是最合适的,但是,当然很少在野外看到:
由于与资源的当前状态冲突,请求无法完成。仅在预期用户可能能够解决冲突并重新提交请求的情况下才允许使用此代码。响应正文应该包含足够的信息让用户识别冲突的来源。理想情况下,响应实体将包含足够的信息供用户或用户代理解决问题;但是,这可能是不可能的,也不是必需的。
在响应 PUT 请求时最有可能发生冲突。例如,如果正在使用版本控制并且被 PUT 的实体包括对资源的更改,这些更改与早期(第三方)请求所做的更改相冲突,则服务器可能会使用 409 响应来指示它无法完成请求.在这种情况下,响应实体可能会以响应 Content-Type 定义的格式包含两个版本之间差异的列表。
【讨论】: