2012-03-27 4 views
9

현재 일부 리소스에 대한 액세스를 제공하는 웹 서비스를 작성 중입니다. REST를 따르려고하지만 API의 일부와 관련된 문제가 발생했습니다. REST API, 경로 변수 vs 요청 매개 변수

내가 가지고있는 follwing을하는 URI :

  • /MYSERVICE/사용자/ : 모든 사용자가 얻을 수있는
  • /MYSERVICE/사용자/{userId를}는 : 특정 사용자를 얻을 수
  • /MYSERVICE/배지/ : 얻을 수있는 특정 바 : 모든 배지는
  • /MYSERVICE/배지/{badgeId가}를 얻을 수 있습니다 dge

내 문제는 특정 배지가있는 모든 사용자를 얻는 방법을 구현해야한다는 것입니다. 나는 이것이 따라서 나는 사용자 목록에 적용되는 필터 만, 다음 URI 것을 고려할 수 :

  • /MYSERVICE/사용자/필터 = 배지 : {badgeId}

아니면 내가이 때문에 배지의 바로 하위 자원, 다음 URI 것을 고려할 수 있습니다 :/

  • /MYSERVICE/배지/{badgeId}/사용자

"REST 호환"으로 보이는 것이 어느 것입니까?

나는 반드시이 주제에 대한 몇 가지 게시물을 읽었다 : Rest Standard: Path parameters or Request parameters하지만 그들은 내 문제를 다루지 않는 것 같습니다.

+2

REST는 URI가 어떻게 생겼는지에 대해 의견이 없습니다. 어느 쪽이든이 "REST를 준수하는 것"입니다. –

+0

참고로 언급 한 질문에 총을 맞았습니다. [answer] (http://stackoverflow.com/a/31118242)에 관심이있을 수 있습니다. – tne

답변

0

나는 /myservice/users/?filter=badge:{badgeId}을 선호하며 더 많은 API가이 형식을 사용한다고 생각합니다.

5

RESTful이 되려면 HATEOAS (끔찍한 두문자어이지만 진정한 RESTful 인 키)를 사용하는 것이 좋습니다. HATEOAS를 사용

, 당신의 배지 표현은 다음과 같이 보일 수 있습니다 :

<badge> 
    <id>1234</id> 
    <name>Admin</name> 
    <link rel = "/rel/users" 
     href = "/myservice/users?badge=1234" /> 
    <link rel = "self" 
     href = "/myservice/badges/1234" /> 
</badge> 

이것은 그들이 단순히/REL/사용자 링크가 제공 HREF 무엇에 GET으로 클라이언트가 서버의 URI 체계에서 분리 할 수 ​​있습니다. 서버가 여전히 내부적으로 URI 체계를 정의 할 필요는 있지만, 어떤 시점에서 당신이 그것을 고려하지 않는다고 결정하면 클라이언트를 깨지 않고 쉽게 변경할 수 있습니다. 예를 들어, 당신이로 변경하여 배지 표현을 야기 두 번째 옵션에 URI 방식을 변경할 수 있습니다 :

<badge> 
    <id>1234</id> 
    <name>Admin</name> 
    <link rel = "/rel/users" 
     href = "/myservice/badges/1234/users" /> 
    <link rel = "self" 
     href = "/myservice/badges/1234" /> 
</badge> 

클라이언트는/REL을 사용하여/사용자가 관계를 연결하는 URI의 영향을받지 않습니다 변화. 이게 무슨 종기입니까 ... HATEOS를 사용하고 URI 체계는 그다지 중요하지 않습니다..

건배!