HTTP动词PUT不是用于创建而是用于更新内容吗?

21

在CouchDB中,要创建一个新文档,您需要发送:

PUT /albums/70b50bfa0a4b3aed1f8aff9e92dc16a0

PUT 方法不是用来创建数据,而是用来更新数据的吗?

4个回答

20

它被用于两种情况。引用RFC

PUT方法要求在提供的请求URI下存储所包含的实体。 如果请求URI引用已存在的资源,则应将所包含的实体视为驻留在源服务器上的已修改版本。 如果请求URI没有指向现有资源,并且该URI能够由请求用户代理定义为新资源,则源服务器可以使用该URI创建资源。


因此,换句话说,如果不存在则插入 - 否则更新。 - Jnr

18

对于我而言,PUT请求的关键术语始终是幂等的。虽然在使用POST请求时,您总是会“添加另一个”项目到系统状态中,但在使用PUT请求时,即使执行多次操作,动作也是相同的(因为您正在寻址一个项目)。

例如:

进行100次POST /albums = 您最终将得到100个不同的专辑(但内容相同)

进行100次PUT /albums/123 = 您最终将获得一个具有ID 123的单个专辑(带有相同的内容)


1
POST 不需要添加任何内容。 - Darrel Miller
1
仅仅是为了澄清,特别是参考Victor的回答,PUT方法在第一次调用时是创建操作,在此之后则是更新操作。因此,它保持幂等性。 - Justin Pihony

2

PUT是指在您知道现有URI或新URI将是什么时,创建一个新的或完全替换现有资源。POST用于更新现有资源的部分内容,或者在服务器必须分配新的URI时创建新资源。就这么简单。PUT和POST都用于创建和更新,关键是您是否已经知道URI或需要服务器为您分配它。


1

PUT 确实用于更新内容,但如果您已经有一个 id,那么就是在更新。通常在 REST 中,您会 POST/albums(或其他任何地方)来创建一个具有尚未知 id 的新记录。由于您有 id,因此您正在更新具有该 id 的空文档以提供的内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接