REST API를 작성하는 중이며 현재 다음과 같은 문제가 발생합니다.
Foo
첫 번째 리소스입니다. CRUD 작업은/foo/
URI 를 통해 적용 할 수 있습니다 .Bar
두 번째 자원입니다. CRUD 작업은/bar/
URI 를 통해 적용 할 수 있습니다 .- 모든
Foo
것은 0 또는 1과 연관됩니다Bar
. 내가Bar
하위 리소스로 취급하지 않는Foo
이유는 동일한Bar
인스턴스가 여러 인스턴스간에 공유 될 수 있기 때문Foo
입니다. 그래서 대신에 독립 URI를 통해 액세스하는 것이 더 낫다고 생각했습니다/foo/[id]/bar
.
내 문제는 상당량의 경우 Foo
인스턴스 를 요청하는 클라이언트 도 관련 Bar
인스턴스에 관심이 있다는 것입니다 . 현재 이것은 하나 대신 두 개의 쿼리를 수행해야 함을 의미합니다. 하나의 쿼리로 두 객체를 모두 얻을 수있는 방법을 소개하고 싶지만 API를 모델링하는 방법을 모르겠습니다. 내가 지금까지 생각해 낸 것 :
- 다음과 비슷한 쿼리 매개 변수를 도입 할 수
/foo/[id]?include_bar=true
있습니다. 이 접근법의 문제점은 응답의 자원 표현 (예 : JSON 구조)이 다르게 보일 필요가 있고 (예를 들어{ foo: ..., bar: ... }
직렬화 된 대신 컨테이너와 같은Foo
)Foo
자원 엔드 포인트를 "이질적"으로 만드는 것 입니다. 나는 그것이 좋은 것이라고 생각하지 않습니다. 쿼리 할 때/foo
클라이언트는 쿼리 매개 변수에 관계없이 항상 동일한 리소스 표현 (구조)을 가져와야합니다. - 또 다른 아이디어는 새로운 읽기 전용 엔드 포인트를 도입하는 것입니다 (예 :)
/fooandbar/[foo-id]
. 이 경우, 리소스{ foo: ..., bar: ... }
의 "공식적인"표현이기 때문에과 같은 표현을 반환하는 것은 문제가되지 않습니다fooandbar
. 그러나 그러한 도우미 끝 점이 실제로 RESTful인지는 모르겠습니다 (이것이 질문의 제목에 "can"이라고 쓴 이유입니다. 물론 기술적으로 가능하지만 좋은 아이디어인지는 알 수 없습니다).
어떻게 생각해? 다른 가능성이 있습니까?
Bar
A와 관련없이 존재할 수 없다 Foo
. 그러나 위에서 쓴 것처럼 여러 Foo
개가 동일한 공유 할 수 Bar
있습니다. 관련 Foo
없는없이 생성 할 수 있어야하므로 부모로 취급해서는 안된다고 Bar
생각 Bar
합니다.