【问题标题】:Upsert (update or insert) of resources with generated URIs in REST?在 REST 中使用生成的 URI 更新(更新或插入)资源?
【发布时间】:2016-02-12 11:44:33
【问题描述】:

我的数据访问层支持 upsert 操作(Spring Data 的CrudRepository.save()),当未设置 id 字段时插入新记录,并在设置 id 字段时更新。

我想知道如何证明创建两个单独的 REST 方法(在后端和前端)所需的额外工作是合理的:

  • POST /users,用于创建新用户(并生成新创建资源的 URI)
  • PUT /users/{id},用于更新现有用户

只创建一个 REST 方法:

  • POST /用户

除了更加 RESTful 之外,使用两种单独的方法还有什么好处吗?

【问题讨论】:

    标签: rest


    【解决方案1】:

    将不同的资源用于不同的操作更加清晰。 通过 REST 思想 - PUT 幂等方法和 POST 不是幂等的。因此,每个 POST 请求都应该返回新的项目作为响应,但 PUT 应该返回相同的项目作为响应。

    我认为当行为符合预期时这是一件好事。

    但是,如果您为您的 api 编写文档,您可以使用一个资源来执行两个操作(但我会选择第一个选项)。

    【讨论】:

      【解决方案2】:

      支持 upsert 的数据访问层并不意味着 REST API 也应该支持它。我不会用两种含义超载POST /users。坚持使用两种不同的资源。

      编辑:

      POST /users 具有“向资源集合添加新实例”的一般含义。我认为没有办法将其扩展到“......或如果给出 ID 则更新现有实例”。 /userscollection 资源,而不是您要操作的单个资源。对集合资源执行POST 应该操纵集合,而不是单个现有资源。

      【讨论】:

      • 你如何证明这一点?约定?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 2023-03-21
      • 2020-11-07
      相关资源
      最近更新 更多