2017-04-14 62 views
0

我有一個端點/groupsREST:更新與不同領域的資源需要不同的用戶權限

我可以通過發佈一些信息,以/groups

單組創建一組可以通過/groups/{id}

閱讀

我可以通過發佈到/group/{id}

更新組中的一些字段但是我有不同的字段需要由不同的用戶更新權限,例如:A組可能具有結構

{ 
"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. 我應該允許通過張貼到/group/{id}/members/{id}與完成所有更新如果成員試圖更新一個不允許更新的字段,會拋出一個未經授權的錯誤。
  2. 或者我應該將每個操作分解爲/group/{id}/members/{id}/role,/group/{id}/members/{id}/shared/group/{id}/members/{id}/status?這個問題是我不想提出很多請求來更新所有的字段(我想最終會有很多這樣的字段)。

所以只是爲了澄清我的問題是:它認爲適當的休息做我選項1在那裏我可以發佈更新到端點,如果你試圖改變,你是不是允許一個領域,可能會失敗至?

回答

1

在我看來,選項1比選項2

好得多至於你說的選項2是帶寬的浪費。

更重要的是,通過選項1,您可以輕鬆實現原子更新(更新「全有或全無」)。它應該完成成功或完全失敗。不應該有部分更新。

對於選項2,很可能會執行更新以成功完成某些請求並拒絕另一個請求,即使這兩個請求被視爲單個操作。