2017-01-03 1 views
1

제 질문은 컬렉션의 항목 목록을 가져 오는 끝점 디자인에 관한 것입니다. 여기 내 이해는 컬렉션에 대한 GET은 해당 컬렉션에있는 항목의 목록을 반환하지만 이것에 대한 세부 정보는 없다는 것입니다.컬렉션을 가져올 때 세부 정보를 반환하는 것은 (Un) -REST-full입니까?

리소스 ID 목록은 인간에게별로 좋지 않으므로 GUI 프런트 엔드는 컬렉션의 각 항목에 대한 세부 정보를 요청합니다. 컬렉션은 "사용자"다음 컬렉션에 GET 그냥 사용자 ID 목록 돌려 말하는 경우

(그들 모두! 페이징을 나는 상상?)

GUI는 다음 각 ID에 대한 세부 정보를 요청하고 이것을 사용하여 인터페이스를 채 웁니다. 목록의 경우, 예를 들어이 인터페이스에 사용자의 성명 및 이메일 주소 만 표시하면 사용자가 세부 정보를 볼 수 있습니다.

이제 "목록 검색"이 ID보다 조금 더 반환 된 경우 클라이언트와 API 사이에서 많은 앞뒤로 저장 될 것이라고 생각합니다. ID, 전체 이름 및 이메일 주소를 포함 할 수 있습니다. 각 항목.

RESTful이 깨졌습니까? 하나의 요청으로 얼마나 많은 세부 정보를 반환해야하는지 어디에서 중지합니까? 클라이언트가 요청의 일부로 포함 할 속성을 지정하도록 허용합니까?

컬렉션을 "검색하는"방법은 무엇입니까? 결과를 "필터링"하기 위해 컬렉션에 대해 GET에 인수가 지정되도록 허용합니까?

답변

1

API는 클라이언트의 요구에 서비스하기 위해 존재합니다. 고객이 세부 정보가 필요한 경우 정보를 반환해야합니다.

즉, 캐시 할 수있는 항목이 절충됩니다. 목록이 정적이 아니지만 내용이있는 경우 링크 목록을 반환하는 것이 더 나을 것입니다. 그런 다음 클라이언트는 각 요소에 대해 하나의 호출을 작성하고 캐시에 위치합니다. 이러한 요소에 대한 나중에 호출은 클라이언트 또는 클라이언트와 서버 사이의 중간 캐시에 의해 처리됩니다. 이는 처음에는 더 많은 절대적인 전화 번호를 희생해서 목록에 대한 전체 통화 대역폭을 줄입니다.

또 다른 옵션은 ?include=id, full-name, email과 같은 검색어 매개 변수를 지원하는 것입니다. 기본적으로 자체 링크 만 반환하지만 클라이언트는 반환되는 표현에 어떤 속성을 채우고 싶은지 지정할 수 있습니다. 이 쿼리 매개 변수를 지원하는 경우 기본적으로 가장 중요한 정보 만 반환하는 것이 좋습니다.

컬렉션을 검색하는 한 검색의 성격과 복잡성에 따라 다릅니다. 쿼리 매개 변수는 하나의 옵션입니다. 검색 끝점에 POST을 사용하고 본문에 검색 조건을 보내면 특히 URL이 2k 자 (일부 브라우저의 기본 URL 길이 제한)보다 긴 경우 적합합니다. 이 방법으로 저장된 검색을 수행 할 수도 있습니다. 서버에서 POST 검색 조건 리소스를 만들고 클라이언트에 GET /widgets?search-criteria=<id>을 보냅니다.

+0

이것은 구현의 합리적인 방법처럼 들리며 추론을 포함하여 +1, 특히 캐시 가능성과 관련하여 +1합니다. –

관련 문제