Json SpringBoot使用PUT映射创建/更新资源
考虑以下Json主体-Json SpringBoot使用PUT映射创建/更新资源,json,spring-boot,rest,Json,Spring Boot,Rest,考虑以下Json主体- { "id": 1, "userName": "test-user1@test.com", "emails": [ { "id": 69, "emailAddress": "test-user1-x@test.com" },
{
"id": 1,
"userName": "test-user1@test.com",
"emails": [
{
"id": 69,
"emailAddress": "test-user1-x@test.com"
},
{
"emailAddress": "test-user1-y@test.com"
}
]
}
在此示例中,“用户”实体与“电子邮件”实体具有一对多关系。当我更新用户时,我也想更新和/或创建电子邮件。我知道应该有一个用于创建/更新电子邮件的端点,并且应该有一个用于创建/更新用户的端点
帖子/用户
PUT/users/{id}
POST/users/{id}/email
放置/users/{id}/emails/{emailId}
但我想知道,使用“PUT/users/{id}”端点创建/更新电子邮件是否是一种好的做法?例如:如果emails数组元素具有“id”属性,则更新现有电子邮件。如果电子邮件数组中缺少“id”属性,则创建电子邮件。这是一种好的思考方式。仅使用POST创建,仅用于更新 POST是一种在服务器上更改状态的方法,意味着每次创建POST时都会创建新记录 PUT是幂等的,这意味着对于相同的请求,对于任意数量的调用,结果应该是相同的 我建议: 创建一个用户
PUT /users/{id}
更新id为{id}的用户。请求正文包含用户信息,id为
作为url中的路径变量从中获取
POST /users/{id}/emails
为用户id{id}创建电子邮件,id取自url,电子邮件
信息在身体里
PUT /users/{id}/emails/{emailId}
更新id为{emailId}的用户{id}电子邮件的电子邮件,电子邮件id为
取自url,来自正文的电子邮件数据
PUT /users/{id}/emails/{emailId}