2017-10-04 1 views
1

Many-To-Many과 관련된 2 개의 리소스가 있습니다. 하나의 리소스는 users이고 다른 리소스는 roles입니다. user은 다른 roles을 할당 할 수 있지만 role은 다른 users을 할당 할 수 있습니다.REST 호출을 통해 리소스 A를 리소스 B에 매핑하는 방법은 무엇입니까?

  • /users 모든 사용자
  • 돌아갑니다
  • /rolesMany-To-Many 관계는 나에게 다음과 같은 리소스 경로를 사용할 수 있습니다 모든 역할

반환합니다에 할당 된 모든 역할을 반환합니다

  • /users/1/roles을 id가 1 인 사용자
  • /roles/1/users 1

이제 ID로 역할에 할당 된 모든 사용자를 반환의가 나는 두 개의 서로 다른 아이디어가 1

ID로 사용자 ID 2에 역할을 할당 할 말을하게됩니다 :

  • PUT /users/1/roles/2 (No request body, as no use). 이 접근법은 매우 읽기 쉽고 명확하게 멱등 할 것입니다. 또한 나는 응답을 기대하지 않는다. 그러나 PUT 요청과 함께 요청 본문을 보내지 않는 것이 이상하게 보입니다.

  • POST /users/1/roles (Role object as request body)이 접근법은 기술적으로 더 정확합니다. 그러나 이미 기존 역할을 매핑하고 싶지는 않습니다. 이 사용자의 역할을 더 많이 만들었습니다. 또한 요청에 이미 존재하는 역할을 첨부하는 것은 매우 쓸모없는 것처럼 보입니다. A BadRequest은 존재하지 않는 역할을 추가하려고하기 때문에 매우 혼란 스러울 것입니다.

모두이가 이해할 수있는 REST에서 수행되는 방법

이 방법을 준수 ... 나에게 정말 올바른 실제로없는 것?

답변

0

사용자에게 할당 된 역할을 업데이트 중이므로 PUT 동사를 사용합니다. 그러나 요청 본문을 사용하여이 사용자에게 할당하려는 역할의 전체 목록을 지정하는 것이 좋습니다. 당신이 말한대로

PUT /users/1/roles (list of assigned Role objects as request body) 

POST 동사는 일반적으로 새로운 객체를 생성하는 데 사용됩니다. 나는 목록에 하나 개의 특정 역할을 추가 할 수 있도록/1/roles` 처음 RESTful APIs from Scratch: Lessons Learnt (so far)

+0

이것은 내가'GET 할 필요가 있음을 의미/사용자 :

또한, 여기에 추가되어 내가 유용 동료로부터 조언 'PUT/users/1/roles'로 다시 보내십시오. 나는 이것에 관해 모른다. –

+0

예. 이것이 일반적인 패턴입니다. –

+0

필자도'Roles'와'Permissions.'를 가진 동일한 별자리를 갖게 될 것입니다. 전체 시스템은 그들 자신의 허가를 정의 할 다른 서비스를 가질 것입니다. 시스템이 커짐에 따라 역할이 100 개가 넘는 권한을 가질 수 있습니다. 이제 권한을 추가하려면 필요한 많은 데이터 전송이 필요한 것 같습니다. 정말 팔리는 것 같지 않습니다. –