在CouchDB中,要创建一个新文档,您需要发送:
PUT /albums/70b50bfa0a4b3aed1f8aff9e92dc16a0
PUT 方法不是用来创建数据,而是用来更新数据的吗?
它被用于两种情况。引用RFC:
PUT方法要求在提供的请求URI下存储所包含的实体。 如果请求URI引用已存在的资源,则应将所包含的实体视为驻留在源服务器上的已修改版本。 如果请求URI没有指向现有资源,并且该URI能够由请求用户代理定义为新资源,则源服务器可以使用该URI创建资源。
对于我而言,PUT请求的关键术语始终是幂等的。虽然在使用POST请求时,您总是会“添加另一个”项目到系统状态中,但在使用PUT请求时,即使执行多次操作,动作也是相同的(因为您正在寻址一个项目)。
例如:
进行100次POST /albums = 您最终将得到100个不同的专辑(但内容相同)
进行100次PUT /albums/123 = 您最终将获得一个具有ID 123的单个专辑(带有相同的内容)
PUT是指在您知道现有URI或新URI将是什么时,创建一个新的或完全替换现有资源。POST用于更新现有资源的部分内容,或者在服务器必须分配新的URI时创建新资源。就这么简单。PUT和POST都用于创建和更新,关键是您是否已经知道URI或需要服务器为您分配它。
PUT
确实用于更新内容,但如果您已经有一个 id,那么就是在更新。通常在 REST 中,您会 POST
到 /albums
(或其他任何地方)来创建一个具有尚未知 id 的新记录。由于您有 id,因此您正在更新具有该 id 的空文档以提供的内容。