검색

49장. JAX-RS 2.0 클라이언트 API

download PDF

초록

JAX-RS 2.0은 REST 호출 또는 HTTP 클라이언트 호출에 사용할 수 있는 완전한 기능을 갖춘 클라이언트 API를 정의합니다. 여기에는 fluent API(요청 구축 간소화), 메시지 구문 분석을 위한 프레임워크(엔터 제공자라고도 함) 및 클라이언트 측에서 비동기 호출 지원이 포함됩니다.

49.1. JAX-RS 2.0 클라이언트 API 소개

49.1.1. 개요

JAX-RS 2.0은 JAX-RS 클라이언트의 fluent API를 정의하므로 HTTP 요청 단계별로 빌드한 다음 적절한 HTTP 동사(GET, POST, PUT 또는 DELETE)를 사용하여 요청을 호출할 수 있습니다.

참고

jaxrs:client 요소를 사용하여 Blueprint XML 또는 Spring XML에서 JAX-RS 클라이언트를 정의할 수도 있습니다. 이 방법에 대한 자세한 내용은 18.2절. “JAX-RS 클라이언트 엔드 포인트 구성” 을 참조하십시오.

49.1.2. 종속 항목

애플리케이션에서 JAX-RS 2.0 클라이언트 API를 사용하려면 프로젝트의 pom.xml 파일에 다음 Maven 종속성을 추가해야 합니다.

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-rs-client</artifactId>
  <version>3.3.6.fuse-7_11_1-00015-redhat-00002</version>
</dependency>

비동기 호출 기능을 사용하려는 경우( 49.6절. “클라이언트의 비동기 처리”참조) 다음 Maven 종속성도 필요합니다.

<dependency>
  <groupId>org.apache.cxf</groupId>
  <artifactId>cxf-rt-transports-http-hc</artifactId>
  <version>3.3.6.fuse-7_11_1-00015-redhat-00002</version>
</dependency>

49.1.3. 클라이언트 API 패키지

JAX-RS 2.0 클라이언트 인터페이스와 클래스는 다음 Java 패키지에 있습니다.

javax.ws.rs.client

JAX-RS 2.0 Java 클라이언트를 개발하는 경우 일반적으로 코어 패키지에서 클래스에 액세스해야 합니다.

javax.ws.rs.core

49.1.4. 간단한 클라이언트 요청의 예

다음 코드 조각은 간단한 예를 보여줍니다. JAX-RS 2.0 클라이언트 API는 http://example.org/bookstore JAX-RS 서비스에서 호출하고 GET HTTP 메서드로 호출하는 데 사용됩니다.

// Java
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
import javax.ws.rs.core.Response;
...
Client client = ClientBuilder.newClient();
Response res = client.target("http://example.org/bookstore/books/123")
    .request("application/xml").get();

49.1.5. fluent API

JAX-RS 2.0 클라이언트 API는 fluent API (도메인별 언어라고도 함)로 설계되었습니다. fluent API에서는 Java 메서드가 간단한 언어의 명령처럼 보이는 방식으로 Java 메서드 체인이 단일 문으로 호출됩니다. JAX-RS 2.0에서 fluent API는 REST 요청을 빌드하고 호출하는 데 사용됩니다.

49.1.6. REST 호출을 수행하는 단계

JAX-RS 2.0 클라이언트 API를 사용하여 다음과 같이 일련의 단계에서 클라이언트 호출을 빌드하고 호출합니다.

  1. 클라이언트를 부트스트랩합니다.
  2. 대상을 구성합니다.
  3. 호출을 빌드하고 만듭니다.Build and make the invocation.
  4. 응답을 구문 분석합니다.

49.1.7. 클라이언트를 부트스트랩

첫 번째 단계는 javax.ws.rs.client.Client 오브젝트를 생성하여 클라이언트를 부트스트랩하는 것입니다. 이 Client 인스턴스는 비교적 많은 가중치 오브젝트로, JAX-RS 클라이언트를 지원하는 데 필요한 기술 스택을 나타냅니다( 인터셉터 및 추가 CXF 기능 포함). 이상적으로 새 오브젝트를 생성하는 대신 클라이언트 개체를 다시 사용할 수 있어야 합니다.

Client 오브젝트를 생성하려면 다음과 같이 ClientBuilder 클래스에서 static 메서드를 호출합니다.

// Java
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Client;
...
Client client = ClientBuilder.newClient();
...

49.1.8. 대상 구성

대상을 구성하면 REST 호출에 사용할 URI를 효과적으로 정의합니다. 다음 예제에서는 path(String) 메서드를 사용하여 기본 URI, 기본, 경로 세그먼트를 기본 URI에 추가하는 방법을 보여줍니다.

// Java
import javax.ws.rs.client.WebTarget;
...
WebTarget base = client.target("http://example.org/bookstore/");
WebTarget books = base.path("books").path("{id}");
...

49.1.9. 빌드 및 호출

이 단계는 실제로 두 단계로 구성됩니다. 먼저 HTTP 요청(헤더, 수락된 미디어 유형 포함)을 빌드하고, 두 번째는 관련 HTTP 메서드를 호출합니다(필요한 경우 요청 메시지 본문을 제공하는 옵션).

예를 들어 application/xml 미디어 유형을 수락하는 요청을 생성하고 호출하려면 다음을 수행합니다.

// Java
import javax.ws.rs.core.Response;
...
Response resp = books.resolveTemplate("id", "123").request("application/xml").get();

49.1.10. 응답 구문 분석

마지막으로 이전 단계에서 얻은 Respose 구문 분석해야 합니다. 일반적으로 응답은 다른 HTTP 메타데이터 및 HTTP 메시지 본문(있는 경우)과 함께 HTTP 헤더를 캡슐화하는 javax.ws.rs.core.Response 오브젝트 형태로 반환됩니다.

String 형식으로 반환된 HTTP 메시지에 액세스하려면 다음과 같이 String.class 인수를 사용하여 readEntity 메서드를 호출하여 쉽게 수행할 수 있습니다.

// Java
...
String msg = resp.readEntity(String.class);

항상 String.classreadEntity 에 인수로 지정하여 응답의 메시지 본문에 String으로 액세스할 수 있습니다. 메시지 본문의 보다 일반적인 변환 또는 변환을 위해 엔터티 공급자를 제공하여 변환을 수행할 수 있습니다.For more general transformations or conversions of the message body, you can provide an entity provider to perform the conversion. 자세한 내용은 49.4절. “요청 및 응답 구문 분석” 에서 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.