2016-12-07 3 views
1

사용자는 REST 리소스에 대해 다른 권한을 가질 수 있습니다. 자원을 삭제하거나 편집하는 것과 같습니다. 또한 하위 리소스는 다른 사용자 권한을 가질 수 있습니다.REST 리소스에 대한 사용자 권한 및 상태 표시

예 :

사용자가 내가 그에게 권리 (허용 행위) 및 개체의 상태를 보여주고 싶은 고양이 리소스를 요청
GET /cats -> return all cats 
GET /cats/{id} -> return cat {id} 
UPDATE /cats/{id} -> update cat {id} 
POST /cats/{id}/like -> create a like to the cat {id} 
DELETE /cats/{id}/like -> delete your like to the cat {id} 

. 이 예에서

:

  1. 사용자가 고양이를 업데이트 할 수 있습니까?
  2. 사용자가 고양이를 좋아할 수 있습니까?
  3. 사용자가 이미 고양이를 좋아합니까?

우리의 UI는 객체에 허용되는 행동을 보여주기 위해이 정보를 사용한다 :

  1. 업데이트 버튼이 버튼처럼

비추천 버튼이 어떻게이 정보를 추가 할 수 있습니다 내 리소스 응답. 하나의 자원에 정보를 추가 할 수 있어야하며 오브젝트 목록에도 정보를 추가 할 수 있어야합니다.

허용 된 모든 동작에 대한 http 헤더의 링크에 대해 생각했습니다. 그러나 이것은 하나의 객체에 대해서만 가능할 것입니다. 그들의 더 나은 해결책인가?

답변

1

컬렉션을 포함하는 응답의 헤더에 컬렉션 관련 링크를 포함 할 수없는 이유가 확실하지 않습니다. 나는 그것이 가능하지 않다는 당신의 말로 당신을 데려 갈 것이다. 그러나 그것은 옵션 이어야만하는 것처럼 보인다.

또 다른 옵션은 응답 데이터 주변에 봉투를 사용하는 것입니다. 그러면 컬렉션 레벨에서 링크를 포함한 메타 데이터를 포함 할 수 있습니다. (주석 기준)

GET /cats?owner=12 
{ 
    "totalRecords": 2, 
    "links": [ ... ], 
    "records": [ ... ] 
} 

편집

당신은 봉투 또는 직접 속성으로 하나의 cat 표현으로 links 속성을 추가해야합니다.

GET /cats/354 
{ 
    "name": "Poke", 
    ..., 
    "links": [ 
     { "rel": "like", "href": "/cats/12/like" }, 
     .... 
    ] 
} 

그런 다음 컬렉션의 각 cat는 그것과 관련된 관련 링크를해야합니다 : 같은 당신의 고양이가 보일 것이다. 이는 link 헤더를 사용하는 대신 일반적으로 허용되는 방법입니다.

변화 : 링크 자원의 동사를 포함하여 같은

  • 어떤 사람들은 이러한 { "rel": "like", "verb": "POST", "href": "/cats/12/like" }
  • 심판에게 링크 속성의 이름을 같은 일부 사람들로, 같은 "links": { "like": "/cats/12/like", "delete": "/cats/12" }
+0

로 컬렉션으로 100 마리의 고양이를 돌려 주면 헤더 링크에 100 개의 액션이 허용됩니다. 이것은 모범 사례가 될 수 없습니까? – user1482309

+0

@ user1482309 아, 네가 무슨 말하는지 알 겠어. 내 대답을 편집 할게. –

+0

감사합니다. Eric. 나는이 생각에 대해 토론 할 것이다. – user1482309