应该使用 Post 或 Put - 如果对象存在要更新,否则要创建新对象?
Post or Put should be used - if the object exists to be updated otherwise new to be created?
我有一个方法可以接收对象并检查数据库是否存在。如果答案为是,则更新该值,否则在数据库中插入新记录。应该使用哪个 - PUT 或 POST,因为在一种情况下我正在更新记录,而在另一种情况下创建了新记录?
这种行为就是我们通常所说的“更新插入”,基本上是插入一个不存在的项目,否则更新该项目。 Reference
至于您可以使用哪个 http 动词:
The difference between PUT and POST is that PUT is idempotent: calling it once or several times successively has the same effect (that is no side effect), whereas successive identical POST requests may have additional effects, akin to placing an order several times. Reference
话虽如此,upsert 操作根据情况有不同的效果,所以我会说 POST
请求更合适,因为如果记录已经存在,它将 return 一个 200 OK
表示记录已更新,如果不存在则return一个201 CREATED
表示插入了一条新记录。
但这并不是一成不变的,我看到人们遵循不同的方法,例如:
- 如果用户可以控制将使用哪些属性来识别记录是否已存在,则更新插入端点可能是
PUT
- 如果系统可以自主决定使用哪些属性来确定记录是否已经存在,那么更新插入端点可能是
POST
项目 #1 的示例是 PUT /resource/identifier
,系统将获取 identifier
并查看数据库以查看它是否已经存在,如果存在,它会完全更新记录,如果存在不存在它插入一个新记录用提供的标识符标记它。
项目 #2 的示例是 POST /resource
,用户不关心将使用哪些属性来确定记录的存在,它相信无论他做什么都会执行正确的操作已发送。
我有一个方法可以接收对象并检查数据库是否存在。如果答案为是,则更新该值,否则在数据库中插入新记录。应该使用哪个 - PUT 或 POST,因为在一种情况下我正在更新记录,而在另一种情况下创建了新记录?
这种行为就是我们通常所说的“更新插入”,基本上是插入一个不存在的项目,否则更新该项目。 Reference
至于您可以使用哪个 http 动词:
The difference between PUT and POST is that PUT is idempotent: calling it once or several times successively has the same effect (that is no side effect), whereas successive identical POST requests may have additional effects, akin to placing an order several times. Reference
话虽如此,upsert 操作根据情况有不同的效果,所以我会说 POST
请求更合适,因为如果记录已经存在,它将 return 一个 200 OK
表示记录已更新,如果不存在则return一个201 CREATED
表示插入了一条新记录。
但这并不是一成不变的,我看到人们遵循不同的方法,例如:
- 如果用户可以控制将使用哪些属性来识别记录是否已存在,则更新插入端点可能是
PUT
- 如果系统可以自主决定使用哪些属性来确定记录是否已经存在,那么更新插入端点可能是
POST
项目 #1 的示例是 PUT /resource/identifier
,系统将获取 identifier
并查看数据库以查看它是否已经存在,如果存在,它会完全更新记录,如果存在不存在它插入一个新记录用提供的标识符标记它。
项目 #2 的示例是 POST /resource
,用户不关心将使用哪些属性来确定记录的存在,它相信无论他做什么都会执行正确的操作已发送。