【问题标题】:SpringBoot use PUT mapping for create/update resourcesSpring Boot 使用 PUT 映射来创建/更新资源
【发布时间】:2020-06-13 04:30:38
【问题描述】:

考虑跟随 Json 主体 -

{
    "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}/emails

PUT /users/{id}/emails/{emailId}

但我想知道使用“PUT /users/{id}”端点创建/更新电子邮件是一种好习惯吗?例如:如果 emails 数组元素具有“id”属性,则更新现有电子邮件。如果 emails 数组中的“id”属性缺失,则创建电子邮件。是不是很好的思考方式。

【问题讨论】:

    标签: json spring-boot rest


    【解决方案1】:

    使用 POST 仅创建,使用 PUT 仅更新。

    POST 是一种改变服务器状态的方法,意味着每次发布新记录时都会创建。

    PUT 是幂等的,这意味着对于相同的请求结果对于任意数量的调用应该是相同的。

    我会推荐这个:

    POST /users
    

    创建用户

    PUT /users/{id}
    

    更新 id 为 {id} 的用户。请求正文包含用户信息,id 是 取自 url 的路径变量。

    POST /users/{id}/emails
    

    为用户 id {id} 创建一个电子邮件,id 取自 url,email 信息在正文中。

    PUT /users/{id}/emails/{emailId}
    

    更新用户 {id} 的电子邮件,电子邮件 ID 为 {emailId},电子邮件 ID 为 取自 url,来自正文的电子邮件数据。

    【讨论】:

      猜你喜欢
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-21
      • 2015-02-26
      • 1970-01-01
      • 2021-11-30
      • 2017-02-21
      相关资源
      最近更新 更多