49장. Cryostat-RS 2.0 클라이언트 API
초록
Cryostat-RS 2.0은 REST 호출 또는 HTTP 클라이언트 호출을 수행하는 데 사용할 수 있는 완전한 기능을 갖춘 클라이언트 API를 정의합니다. 여기에는 유창한 API(요청 빌드를 단순화하기 위한), 메시지 구문 분석 프레임워크(유사 공급자라고 하는 플러그인 유형) 및 클라이언트 측의 비동기 호출 지원이 포함됩니다.
49.1. Introduction to the Cryostat-RS 2.0 Client API
49.1.1. 개요
Cryostat-RS 2.0은 HTTP 요청을 단계별로 빌드한 다음 적절한 HTTP 동사(GET, POST, PUT 또는 DELETE)를 사용하여 요청을 호출할 수 있는 fluent API를 정의합니다.
블루프린트 XML 또는 Spring XML( jaxrs:client
요소 사용)에서 Cryostat-RS 클라이언트를 정의할 수도 있습니다. 이 방법에 대한 자세한 내용은 18.2절. “Cryostat-RS 클라이언트 끝점 구성” 을 참조하십시오.
49.1.2. 종속 항목
애플리케이션에서 Cryostat-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_13_0-00015-redhat-00001</version> </dependency>
비동기 호출 기능을 사용하려면 49.6절. “클라이언트에서 비동기 처리”참조) 다음 Maven 종속성도 필요합니다.
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-hc</artifactId> <version>3.3.6.fuse-7_13_0-00015-redhat-00001</version> </dependency>
49.1.3. 클라이언트 API 패키지
Cryostat-RS 2.0 클라이언트 인터페이스 및 클래스는 다음 Java 패키지에 있습니다.
javax.ws.rs.client
Cryostat-RS 2.0 Java 클라이언트를 개발할 때 일반적으로 코어 패키지에서 클래스에 액세스해야 합니다.
javax.ws.rs.core
49.1.4. 간단한 클라이언트 요청의 예
다음 코드 조각은 Cryostat-RS 2.0 클라이언트 API를 사용하여 GET HTTP 메서드로 호출하는 http://example.org/bookstore
Cryostat-RS 서비스를 호출하는 데 사용되는 간단한 예제를 보여줍니다.
// 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
Cryostat-RS 2.0 클라이언트 API는 유창한 API (때로 도메인별 언어라고도 함)로 설계되었습니다. fluent API에서는 Java 메서드가 간단한 언어의 명령처럼 보이는 방식으로 단일 문으로 Java 메서드 체인이 호출됩니다. Cryostat-RS 2.0에서 fluent API는 REST 요청을 빌드하고 호출하는 데 사용됩니다.
49.1.6. REST 호출을 수행하는 단계
Cryostat-RS 2.0 클라이언트 API를 사용하면 다음과 같이 클라이언트 호출이 빌드되고 일련의 단계로 호출됩니다.
- 클라이언트를 부트스트랩합니다.
- 대상을 구성합니다.
- 빌드 및 호출을 수행합니다.
- 응답을 구문 분석합니다.
49.1.7. 클라이언트 부트스트랩
첫 번째 단계는 javax.ws.rs.client.Client
오브젝트를 생성하여 클라이언트를 부트스트랩하는 것입니다. 이 Client
인스턴스는 비교적 중량한 오브젝트로, Cryostat-RS 클라이언트(비셉터 및 추가 CXF 기능 포함)를 지원하는 데 필요한 기술 스택을 나타냅니다. 이상적으로는 새 개체를 생성하는 대신 가능한 경우 클라이언트 개체를 다시 사용해야 합니다.
새 Client
개체를 생성하려면 다음과 같이 ClientBuilder
클래스에서 정적 메서드를 호출합니다.
// 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. 빌드 및 호출 만들기Build and make the invocation
이는 실제로 두 단계로 구성되어 있습니다. 먼저 HTTP 요청( 헤더 포함, 허용 미디어 유형 등 포함)을 빌드합니다. 두 번째는 관련 HTTP 메서드를 호출합니다(필요한 경우 요청 메시지 본문을 선택적으로 제공).
예를 들어 application/xml
미디어 유형을 수락하는 요청을 생성하고 호출하려면 다음을 수행합니다.
// Java import javax.ws.rs.core.Response; ... Response resp = books.resolveTemplate("id", "123").request("application/xml").get();
49.1.10. 응답 구문 분석
마지막으로 이전 단계에서 얻은 resp
ose,spose를 구문 분석해야 합니다. 일반적으로 응답은 다른 HTTP 메타데이터 및 HTTP 메시지 본문(있는 경우)과 함께 HTTP 헤더를 캡슐화하는 javax.ws.rs.core.Response
오브젝트 형식으로 반환됩니다.
반환된 HTTP 메시지에 문자열
형식으로 액세스하려는 경우 다음과 같이 readEntity
메서드를 호출하여 쉽게 수행할 수 있습니다 .
// Java ... String msg = resp.readEntity(String.class);
readEntity
에 대한 인수로
를 지정하여 응답의 메시지 본문에 항상 액세스할 수 있습니다. 메시지 본문의 일반적인 변환 또는 변환의 경우 엔터티 공급자 를 제공하여 변환을 수행할 수 있습니다. 자세한 내용은 49.4절. “요청 및 응답 구문 분석” 에서 참조하십시오.
String
.class