2012-07-03 3 views
3

RESTful 서비스를 설계 중입니다. 일련의 데이터를 나열하는 것입니다. 주된 문제는 집합에 합리적이고 단일 식별자가 없다는 것입니다. 또한 특정 세트가 시스템 지식 내에서 쉽게 계산 될 수 없습니다. 결과적으로 GET/items/{identifier} 서비스를 가질 수없는 것 같습니다.디자인 여러 ID가있는 RESTful 서비스

요청되는 각 요소의 ID가 있습니다. 내 주요 문제는 URI에 ID를 나열하는 것이 RESTful하지 않은 것입니다 (예 : GET 항목/{id1}, {id2}, ..., {idn}). 권리?

비슷한 사용 예가있는 DELETE를 볼 수 있습니다 - 하나의 요청주기에서 여러 항목을 제거하십시오.

REST 영역에 머물고있는 동안 어떻게 그러한 사용 사례를 만족시킬 수 있습니까? 그게 가능하니?

+1

query의 구문이 걱정 편안하고 어떤 제약 조건입니다에 ||또는 동작을 모델링 해 봅시다 ? URI는 RFC 3986에 규정 된 규칙을 따르는 단순한 식별자입니다. 개인적으로 URI 식별자의 일부로 쉼표로 구분 된 값 목록을 사용할 때 아무런 문제가 없습니다. –

답변

0

질문에 표시된 접근 방식은 실제로 ids의 각 조합에 리소스가 있음을 의미합니다. 결과는 동일하지만, 1, 2

/items/1,2 

/items/2,1 

위의 서로 다른 자원을 나타냅니다의 우리가 2 ids 있다고 가정 해 봅시다. 이것은 API 사용자에게 혼동을 줄 수 있습니다.

이 모델을 작성하는 또 다른 방법은 필터링 매개 변수로 쿼리 매개 변수를 사용하는 것입니다. id은 실제로 리소스의 필드라고 가정합니다.

예, id 1 item를 받고 :

GET 
/items/1 

Response: 

{ 
    "id": 1, 
    "type": "table", 
    "color": "black", 
    ... 
} 

그래서 질문은, 나는 대량으로 여러 항목을 얻기 위해 무엇을해야하는 경우? 이 질문은 특정 필드의 값으로 필터링 items의 일반적인 질문으로 일반화 할 수 있습니다. 예컨대 : 점점 모든 그래서 같은 질문 id1 또는 2입니다 items을 얻기 위해 요구 될 수있다 유형 테이블

GET 
/items?query="name='table'" 

Response: 
{ 
    "data": [ 
     { 
      "id": 1, 
      "type": "table", 
      "color": "black", 
      ... 
     }, 
     { 
      "id": 2, 
      "type": "table", 
      "color": "grey", 
      ... 
     }, 
     { 
      "id": 6, 
      "type": "table", 
      "color": "brown", 
      ... 
     } 
    ] 
} 

items. 의 우리가

GET 
/items?query="id=1||id=2" 

Response: 
{ 
    "data": [ 
     { 
      "id": 1, 
      "type": "table", 
      "color": "black", 
      ... 
     }, 
     { 
      "id": 2, 
      "type": "table", 
      "color": "grey", 
      ... 
     } 
    ] 
}