Jax-RS Jersey로 간단한 API를 개발하고 있습니다. 일부 국가의 상점에서 판매하는 품목의 도메인을 고려하고 있다고 가정 해 보겠습니다.Jax-RS/Jersey에서 중첩되지 않은 리소스로 동작해야하는 중첩 리소스 관리
- /webapi/항목
- 둘은 항목의 목록을 반환해야
/webapi/저장/1/항목, 첫 번째 :
내 디자인이 두 호출을 포함 해당 국가에서 판매되는 모든 품목을 반품해야하며 두 번째 품목은 상점 번호 1로 판매되는 품목 만 반품해야합니다.
물론 두 자원 인 ItemResource 항목에 관한 모든 요청 및 상점 관련 모든 요청을 처리하는 StoreResource가 있습니다.
@Path("items")
class ItemResource {
@GET
public List<Item> getAllItems(){
}
. 내가하고 싶은 무엇
@Path("stores")
class StoreResource
@GET
@Path("/{storeId}/items")
public List<Item> getItemsSoldByStore(@PathParam("storeId") long storeId) {
}
는 StoreResource
과 모델 클래스 Item
또는 특정 항목을 관리하기 위해 생성 (DAO를 같은) 데이터베이스 인터페이스 사이에 커플 링을 방지하기 위해, ItemResource 두 번째 요청을 전달하는 것입니다. 하위 리소스 나 StoreResource의 중첩 된 리소스와 같은 ItemResource를 고려할 수 있지만 포인트는 가끔씩 저장소 ID를 전달하지 않고 ItemResource를 호출하여 모든 항목을 가져 오기 때문에 이는 첫 번째 요청 http://foo.com/webapi/items의 경우입니다. ItemResource
에 @Path("items")
주석을 보관하여/item 엔드 포인트에 대한 모든 요청을 처리하도록하고 싶습니다.
이 상황에서 올바른 디자인은 무엇입니까? 어떤 도움을 주셔서 감사합니다.
이 할 수있는 가장 좋은 방법인지 모르겠어요,하지만 당신은 여전히 ('@Path ("/")'예를 들어)을 추가' "/ 항목에"'클래스 주석에 아무것도 넣지 수 및 "/ stores ..."를 함수 주석에 추가하지만이 경우 모든 요청은 동일한 클래스로 리디렉션됩니다. – NAIT
답해 주셔서 감사합니다. 이것은 매우 일반적인 상황이라고 생각합니다. 그래서 디자인과 관련하여 중요한 것을 놓치고 있는지 궁금합니다. 어노테이션 @Path ("items")과 어노테이션 @Path ("/")가있는 중첩 된 리소스로 중첩되지 않은 리소스를 만드는 것은 어떻습니까? – Francotube100
그러나이 경우 "http : //foo.com/webapi/stores/..."는 루트 경로가 "항목"이기 때문에 리소스에 걸리지 않습니다. – NAIT