REST API - 更改组成员身份

时间:2013-09-12 13:09:39

标签: api rest group-membership

/group/1/group/2/item/42/group/1的成员。我想从/item/42中移除/group/1并将其放入/group/2。我目前的解决方案是:

GET    /group/1/item/42   => Get the item from the first group
POST   /group/2/item      => Create a clone of the item in the 2nd group
DELETE /group/1/item/42   => Delete the original item from the 1st group

此解决方案存在(至少)两个严重问题:

  1. 如果客户在DELETE之前停止,则该项目将成为两个组的成员。
  2. /group/2中的商品ID不一样,看起来该商品会失去其身份。
  3. 如果我想在一个步骤中更改项目的组成员资格(如果可能,保留其身份),我应该如何重新设计API?

2 个答案:

答案 0 :(得分:1)

在您的情况下,我不会使用URI将项目链接到组。

如果组中的项是1到n关系,则每个项应该具有到其组的链接(例如,数据库外键)。

因此,您的URI空间可以更简单:

./[groups|items]/{id}

RESTful方式是使用POST修改项目资源。

POST /items/42 { group: 2 }

在这种情况下,您的后端会将请求标识为对现有资源的更新。

以下是API如何运作的一些演示。

GET /items --list of all items by IDs
GET /groups --list of all groups by IDs
GET /items/42 --item 42 properties

POST /items { id: 33, name: "Cool Item", group: 2} -- adds a new item, linked to group 2
PUT /groups/4 { id: 4, name: "Hot group"} --adds a new group
POST /groups/4 {name: "Cool group" } --updates the name of group 4
POST /items/33 { group: 4 } --moves the new item 33 to group 4

GET /items?group=4 --list of all items belonging to group 4

如果需要,可以使用POST而不是PUT。

答案 1 :(得分:0)

如果你需要原子操作,我会考虑

POST /group/2?moveFrom=/group/1/item/42