2012-02-21 8 views
32

사용자가 단일 GET 요청으로 단일 제품 또는 제품 목록을 가져올 수있는 RESTful API를 설계하려고합니다. 각 제품에는 고유 ID가 있습니다.REST API : 하나의 get에서 여러 리소스 요청하기

단일 제품 URL은 간단하다 :

http://mycompany.com/api/v1/product/id 

이 하나의 제품에 대한 정보를 반환합니다. 여러 제품 정보의 URL이 어떻게 표시되는지 혼란 스럽습니다.

어떻게 ID를 쉼표 ID의 목록을 분리된다

http://mycomapny.com/api/v1/product/ids 

어떻습니까?

+2

id는 http : //mycompany.com/api/v1/getproducts와 같은 것을 사용합니다. ids = [listofids] – Dampsquid

+1

API 디자인 복제에 대해 질문하는 방법은 무엇입니까? Rails의 구현 세부 사항에 대한 질문은? – Tgr

답변

28

귀하의 제안이 충분합니다.

일부 공용 REST API를 검토하여 처리 방법을 확인하는 것이 좋습니다. 예를 들어 StackExchange API는 ID를 세미콜론으로 구분합니다. - https://api.stackexchange.com/docs/answers-by-ids

+0

API 예를 제공해 주셔서 감사합니다. – user824212

+1

사람들이 왜 제품을 사용하지 않는지 궁금합니다. id [] = 1 & id [] = 2. URL 파서가이 문제를 잘 처리합니다. –

+5

@JulioGreff 제 생각에, 그것은 약간 추한 것처럼 보입니다. 다른 특별한 이유는 없습니다. –

65

id로 필터링 된 리소스의 여러 표현을 나열한 것처럼 생각하는 것이 좋습니다. 따라서 당신은 기본 자원에 GET 요청합니다

https://example.com/api/v1/products

을 그리고 id하여 응답 목록을 필터링 : 쉼표로 구분 식별자의

https://example.com/api/v1/products?id=1,2,3

+14

이것은 우수한 답변입니다 imho, 이유 :'/ products'와'products? id = 1,2,3'은 __consistent__ 응답 (= 수집 자원)을 줄 것입니다. '/ products/1'과'/ products/1,2,3'를 비교하는 것은 클라이언트 두통의 대책입니다. 물론 모든 중첩 된 끝점이 기본적으로 콜렉션을 반환하지 않는 한 (흥미로운 접근법입니다. 예를 들어 [api + json] (http://jsonapi.org/) 형식) – Philzen

+1

이 방법이 마음에 들지만 https://example.com/api/v1/products?id=1&id=2&id=3이 아니어야합니까? – Nitek

+2

@Nitek 아니요; 중복 된 쿼리 매개 변수가 배열로 결합된다는 [보장은 없습니다] (http://stackoverflow.com/q/1746507/578288). 예를 들어, PHP는 실제로'id'가''[1,2,3]와 같다고 말할 것입니다. 그러나 Ruby on Rails가'3 '과 같다고 말할 것이고, 다른 프레임 워크도 다르게 작동 할 것입니다. 'id'는'1'과 같습니다. –