在REST中使用生成的URI升级(更新或插入)资源?

时间:2016-02-12 11:44:34

标签: rest

我的数据访问层支持upsert操作(Spring Data' s refl),当未设置id字段时,插入新记录,当id字段设置时,它会被更新。

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

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

仅创建一个REST方法:

  • POST / users

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

2 个答案:

答案 0 :(得分:1)

使用不同的资源进行不同的操作会更加清晰。 通过REST意识形态 - PUT幂等方法和POST不是幂等的。因此每个POST请求都应该返回响应的新项目,但是PUT应该返回相同的项目作为响应。

我认为,当行为出现时,这是一件好事。

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

答案 1 :(得分:0)

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

修改

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