RESTful API의 일반적인 패턴은 포함 된 링크가있는 단일 객체를 반환하는 것이므로 관련 객체를 검색하는 데 사용할 수 있습니다. 그러나 때로는 편의를 위해 한 번에 객체 그래프의 전체 덩어리를 되 돌리고 싶습니다.RESTful API에 포함/포함/연결
예를 들어, 당신이 고객, 주문 및 반환와 저장 응용 프로그램을 가정 해 봅시다. 고객 ID 12345에 대해 개인 정보, 모든 주문 및 모든 반품을 함께 표시하려고합니다 (의 경우 항상을 반환하고 고객의 개인 정보가 포함 된 주문서를 반환해야합니다).
GET /
- 고객
,691,363를 쿼리 하나를 포함, 링크 템플릿의 목록을 반환 이렇게 뭔가처럼 (210)
- 이 고객의 주문을받을
- 반환 고객의 개인 정보
- 반환 링크 (
/
에서 링크 템플릿을 기반으로) 및 반환
GET /orders?customerId=12345
- (응답
/customers/12345
에서)는 주문을 얻는다 고객 용 12345
- (응답
GET /returns?customerId=12345
- 고객 12345
GET /customers/12345
에 대한 수익을 얻을하지만은 customers
URI가 한 쿼리에서 모든 다시이 문제를 풀 수 있도록 일단은 좋은 것 (응답 /customers/12345
에서) . 여러 가지 요청을하는 대신 링크의 일부 또는 전부를 다른 곳으로 옮길 수있는 편리한 쿼리가있는 가장 좋은 방법이 있습니까? 나는 다음과 같은 것을 생각하고있다 :
GET /customers/12345?include=orders,returns
그러나 만약 사람들이 이것을하고 있다면 나는 뭔가를 만들어 내고 싶지 않다.
(FWIW, 내가 가게를 구축하고 있지 않다, 그래서이 모델 또는 방법이 실제 제품, 또는 무엇이든 드릴 다운 겁니다에 적합한 개체 여부에 대해 애매한하지 말자.)
추가 업데이트: 그것은 HAL speak 이러한 '가 포함 된 리소스'라고처럼 보이지만 표시된 예에 포함 할 리소스를 선택할 수있는 방법이 될 것 같지 않습니다.내가 쿼리 매개 변수로 embed
를 사용하여, 내가 위에서 설명한 것처럼 뭔가를 제안 one blog post 발견
GET /ticket/12?embed=customer.name,assigned_user
이 표준 또는 반 표준 관행, 또는 한 블로거가 만든 뭔가인가?
제공하신 $ expand 매개 변수 링크가 깨졌습니다. –
깨진 링크는 [이 페이지] (http://www.odata.org/blog/enhancing-odata-support-for-querying-derived-types-revisited/)의 $ 확장 섹션을 참조하십시오. – Leith
감사합니다, Leith! 결정된. –