46.5. 하위 리소스 작업


46.5.1. 개요

두 개 이상의 리소스에서 서비스를 처리해야 할 가능성이 있습니다. 예를 들어 주문 처리 서비스에서 모범 사례에서는 각 고객이 고유한 리소스로 처리되도록 제안합니다. 각 순서는 고유한 리소스로 처리됩니다.

Cryostat-RS API를 사용하여 고객 리소스 및 주문 리소스를 하위 리소스로 구현합니다. 하위 리소스는 루트 리소스 클래스를 통해 액세스하는 리소스입니다. 리소스 클래스의 메서드에 @Path 주석을 추가하여 정의합니다. 하위 리소스는 다음 두 가지 방법 중 하나로 구현할 수 있습니다.

46.5.2. 하위 리소스 지정

하위 리소스는 메서드를 @Path 주석으로 데코딩하여 지정합니다. 하위 리소스의 URI는 다음과 같이 구성됩니다.

  1. 하위 리소스의 @Path 주석 값을 하위 리소스의 상위 리소스의 @Path 주석 값에 추가합니다.

    상위 리소스의 @Path 주석은 하위 리소스가 포함된 클래스의 오브젝트를 반환하는 리소스 클래스의 메서드에 있을 수 있습니다.

  2. 루트 리소스에 도달할 때까지 이전 단계를 반복합니다.
  3. 어셈블된 URI가 서비스가 배포된 기본 URI에 추가됩니다.

예를 들어 예 46.6. “주문 하위 리소스” 에 표시된 하위 리소스의 URI는 baseURI/customerservice/order/12 일 수 있습니다.

예 46.6. 주문 하위 리소스

...
@Path("/customerservice/")
public class CustomerService
{
  ...
  @Path("/orders/{orderId}/")
  @GET
  public Order getOrder(@PathParam("orderId") String orderId)
  {
    ...
  }
}

46.5.3. 하위 리소스 메서드

하위 리소스 메서드는 @Path 주석과 HTTP 동사 주석 중 하나로 구분됩니다. 하위 리소스 메서드는 지정된 HTTP 동사를 사용하여 리소스에 대한 요청을 직접 처리합니다.

예 46.7. “하위 리소스 메서드” 세 가지 하위 리소스가 포함된 리소스 클래스를 표시합니다.

  • getOrder() 는 URI가 /customerservice/orders/{orderId}/ 와 일치하는 리소스에 대한 HTTP GET 요청을 처리합니다.
  • updateOrder() 는 URI가 /customerservice/orders/{orderId}/ 와 일치하는 리소스에 대한 HTTP PUT 요청을 처리합니다.
  • newOrder()/customerservice/orders/ 에 있는 리소스에 대한 HTTP POST 요청을 처리합니다.

예 46.7. 하위 리소스 메서드

...
@Path("/customerservice/")
public class CustomerService
{
  ...
  @Path("/orders/{orderId}/")
  @GET
  public Order getOrder(@PathParam("orderId") String orderId)
  {
    ...
  }

  @Path("/orders/{orderId}/")
  @PUT
  public Order updateOrder(@PathParam("orderId") String orderId,
                           Order order)
  {
    ...
  }

  @Path("/orders/")
  @POST
  public Order newOrder(Order order)
  {
    ...
  }
}
참고

동일한 URI 템플릿이 있는 하위 리소스 메서드는 하위 리소스에서 반환하는 리소스 클래스와 동일합니다.

46.5.4. 하위 리소스

하위 리소스는 HTTP 동사 주석 중 하나로 장식되지 않으며 직접 처리하지 않는 하위 리소스에서 요청합니다. 대신 하위 리소스는 요청을 처리할 수 있는 리소스 클래스의 인스턴스를 반환합니다.

HTTP 동사 주석이 없는 것 외에도 하위 리소스는 엔터티 매개변수도 포함할 수 없습니다. 하위 리소스에서 사용하는 모든 매개변수는 47장. 리소스 클래스 및 메서드에 정보 전달 에 설명된 주석 중 하나를 사용해야 합니다.

예 46.8. “특정 클래스를 반환하는 하위 리소스” 에 표시된 대로 하위 리소스를 사용하면 모든 메서드를 하나의 슈퍼 클래스에 배치하지 않고 재사용 가능한 클래스로 리소스를 캡슐화할 수 있습니다. processOrder() 메서드는 하위 리소스입니다. URI 템플릿 /orders/{orderId}/ 와 일치하는 URI에서 요청이 생성되면 Order 클래스의 인스턴스를 반환합니다. Order 클래스에는 HTTP 동사 주석으로 데코레이팅되는 메서드가 있습니다. PUT 요청은 updateOrder() 메서드에서 처리합니다.

예 46.8. 특정 클래스를 반환하는 하위 리소스

...
@Path("/customerservice/")
public class CustomerService
{
  ...
  @Path("/orders/{orderId}/")
  public Order processOrder(@PathParam("orderId") String orderId)
  {
    ...
  }

  ...
}

public class Order
{
  ...
  @GET
  public Order getOrder(@PathParam("orderId") String orderId)
  {
    ...
  }

  @PUT
  public Order updateOrder(@PathParam("orderId") String orderId,
                           Order order)
  {
    ...
  }

}

하위 리소스는 런타임 시 처리되므로 다형성을 지원할 수 있습니다. 하위 리소스의 반환 값은 일반 개체, 추상 클래스 또는 클래스 계층 구조의 최상위일 수 있습니다. 예를 들어, 귀하의 서비스가 JWT 주문 및 신용카드 주문을 처리하는 데 필요한 경우 예 46.8. “특정 클래스를 반환하는 하위 리소스” 에서 processOrder() 메서드의 서명은 변경되지 않은 상태로 유지될 수 있습니다. Order 클래스를 확장한 두 개의 클래스 ppOrderccOder 를 구현해야 합니다. processOrder() 의 구현은 필요한 논리에 따라 원하는 하위 리소스 구현을 인스턴스화합니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.