资源已存在时POST的HTTP响应代码

我正在构建一个允许客户端存储对象的服务器。 这些对象在客户端完全构造,完整的对象ID对于对象的整个生命周期是永久的。

我已经定义了API,以便客户端可以使用PUT创建或修改对象:

PUT /objects/{id} HTTP/1.1
...

{json representation of the object}

{id}是对象ID,因此它是Request-URI的一部分。

现在,我也在考虑允许客户端使用POST创建对象:

POST /objects/ HTTP/1.1
...

{json representation of the object, including ID}

由于POST意味着“追加”操作,我不知道如果对象已经存在该怎么办。 我应该将请求视为修改请求还是应该返回一些错误代码(哪个)?


#1楼

“302 Found”听起来合情合理。 并且RFC 2616说它可以回答除GET和HEAD之外的其他请求(这肯定包括POST)

但是它仍然让访问者通过这个URL来获取RFC的“Found”资源。 为了使它直接进入真正的“找到”URL,应该使用“303 See Other”,这是有道理的,但强制另一个调用GET以下的URL。 好的方面,这个GET是可缓存的。

我想我会用“303见其他” 。 我不知道我是否可以回复身体中发现的“东西”,但我想这样做是为了将一次往返保存到服务器上。

更新:重新阅读RFC之后,我仍然认为不存在的 “4XX + 303 Found”代码应该是正确的。 但是, “409 Conflict”是现有的最佳答案代码 (由@ Wrikken指出),可能包括指向现有资源的Location头。


#2楼

我认为你不应该这样做。

如您所知,POST是修改集合的,它用于创建新项目。 所以,如果你发送id(我认为这不是一个好主意),你应该修改集合,即修改项目,但这是令人困惑的。

用它来添加一个没有id的项目。 这是最好的做法。

如果要捕获UNIQUE约束(而不是id),则可以响应409,就像在PUT请求中一样。 但不是身份证。


#3楼

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值