REST:使用需要不同用户权限的不同字段更新资源

时间:2017-04-14 03:30:09

标签: rest http

我有一个端点/groups

我可以通过将一些信息发布到/groups

来创建一个组

/groups/{id}

可以阅读单个群组

我可以通过POST到/group/{id}

来更新群组中的某些字段

但是,我有不同的字段需要由具有不同权限的用户更新,例如:组可能具有结构

{
 "id": 1,
 "name": "some name",
 "members": [
  {
   "user_id": 456,
   "known_as": "Name 1",
   "user": { /* some user object */},
   "status": "accepted",
   "role": "admin",
   "shared": "something"
  },
  {
   "user_id": 999227,
   "known_as": "Name 1",
   "user": { /* some user object */},
   "status": "accepted",
   "role": "basic",
   "shared": "something"
  },
  {
   "user_id": 9883,
   "known_as": "Name 1",
   "user": { /* some user object */},
   "status": "requested",
   "role": "basic",
   "shared": "something"
  }
 ],
 "link": "https://some-link"
}

作为示例,我对/group/{id}/members/{id}端点有以下3个操作:

  • 我希望只有用户才能更新自己的known_as字段
  • 我只希望群组管理员能够更新每个成员的rolestatus字段。
  • 我希望用户和管理员都能够更新shared字段

我的选择是:

  1. 我是否应该允许所有更新通过使用成员字段的子集POST到/group/{id}/members/{id}来完成,如果他们尝试更新不允许更新的字段,则会抛出未经授权的错误?< / LI>
  2. 或者我应该将每个操作分为/group/{id}/members/{id}/role/group/{id}/members/{id}/shared/group/{id}/members/{id}/status?这个问题是我不想要更新所有字段的请求(我想最终会有很多字段)。
  3. 所以只是为了澄清我的问题是:我的选项1 是否被认为是正确的REST我可以将更新发布到端点,如果您尝试更改某个字段,则可能会失败允许吗?

1 个答案:

答案 0 :(得分:1)

在我看来,选项1比选项2好得多。

如你所说,选项2是浪费带宽。

更重要的是,使用选项1,您可以轻松实现原子更新(更新“全有或全无”)。它应该成功完成或完全失败。永远不应该有部分更新。

使用选项2,很可能实现更新以成功完成某个请求并拒绝另一个请求,即使这两个请求被视为单个操作。