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

时间:2010-10-14 17:00:07

标签: http rest couchdb

在CouchDB中,要创建您发送的新文档:

PUT /albums/70b50bfa0a4b3aed1f8aff9e92dc16a0

PUT是否用于更新数据而不是创建数据?

4 个答案:

答案 0 :(得分:18)

它用于两者。 Quoth the RFC

  

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

答案 1 :(得分:15)

PUT的关键术语总是幂等。对于POST,你总是在系统状态中“添加另一个”项目,PUT即使多次执行动作也是一样的(因为你正在处理一个项目)。

示例:

做100次POST /专辑=你最终会有100张不同的专辑(但内容相同)

做100次PUT /专辑/ 123 =你最终会得到一张id为123的单张专辑(含内容)

答案 2 :(得分:1)

PUT确实用于更新内容,但如果您已有ID,则表示您正在更新。在REST中,您通常POST/albums(或其他)来创建具有未知ID的新记录。由于您有一个ID,因此您将使用该ID将空文档更新为您提供的内容。

答案 3 :(得分:1)

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