49.3. 클라이언트 호출 빌드


49.3.1. 개요

대상 URI를 빌드한 후 WebTarget 빌더 클래스를 사용하여 HTTP 헤더, 쿠키 등 요청의 다른 측면(예: Invocation.Builder 클래스를 사용하여 구성)을 구성합니다. 호출을 빌드하는 마지막 단계는 적절한 HTTP 동사(GET, POST, PUT 또는 DELETE)를 호출하고 필요한 경우 메시지 본문을 제공하는 것입니다.

49.3.2. invocation.Builder 클래스

javax.ws.rs.client.Invocation.Builder 빌더 클래스는 HTTP 메시지의 내용을 빌드하고 HTTP 메서드를 호출할 수 있는 fluent API의 부분을 제공합니다.

49.3.3. 호출 빌더 생성

Invocation.Builder 인스턴스를 생성하려면 javax.ws.rs.client.WebTarget 인스턴스에서 요청 메서드 중 하나를 호출합니다. 예를 들면 다음과 같습니다.

// Java
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.client.Invocation.Builder;
...
WebTarget books = client.target("http://example.org/bookstore/books/123");
Invocation.Builder invbuilder = books.request();

49.3.4. HTTP 헤더 정의

다음과 같이 헤더 메서드를 사용하여 요청 메시지에 HTTP 헤더 를 추가할 수 있습니다.

Invocation.Builder invheader = invbuilder.header("From", "fionn@example.org");

49.3.5. 쿠키 정의

다음과 같이 쿠키 방법을 사용하여 요청 메시지에 쿠키를 추가할 수 있습니다.

Invocation.Builder invcookie = invbuilder.cookie("myrestclient", "123xyz");

49.3.6. 속성 정의

다음과 같이 속성 메서드를 사용하여 이 요청 컨텍스트에서 속성을 설정할 수 있습니다.

Invocation.Builder invproperty = invbuilder.property("Name", "Value");

49.3.7. 허용되는 미디어 유형, 언어 또는 인코딩 정의

허용되는 미디어 유형, 언어 또는 인코딩을 다음과 같이 정의할 수 있습니다.

Invocation.Builder invmedia = invbuilder.accept("application/xml")
                                        .acceptLanguage("en-US")
                                        .acceptEncoding("gzip");

49.3.8. HTTP 메서드 호출

REST 호출을 빌드하는 프로세스는 HTTP 호출을 수행하는 HTTP 메서드를 호출하여 종료됩니다. 다음 메서드( javax.ws.rs.client.SyncInvoker 기본 클래스에서 상속됨)를 호출할 수 있습니다.

get
post
delete
put
head
trace
options

호출하려는 특정 HTTP 동사가 이 목록에 없는 경우 일반 메서드 메서드를 사용하여 HTTP 메서드 를 호출할 수 있습니다.

49.3.9. 입력한 응답

모든 HTTP 호출 메서드는 형식화되지 않은 변형과 형식화 변형(추가 인수를 사용함)이 제공됩니다. 기본 get() 메서드(패키지 없음)를 사용하여 요청을 호출하면 javax.ws.rs.core.Response 개체가 호출에서 반환됩니다. 예를 들면 다음과 같습니다.

Response res = client.target("http://example.org/bookstore/books/123")
                     .request("application/xml").get();

그러나 get(Class<T>) 메서드를 사용하여 특정 유형으로 응답하도록 요청할 수도 있습니다. 예를 들어 요청을 호출하고 응답을 BookInfo 개체로 반환하도록 요청하려면 다음을 수행합니다.

BookInfo res = client.target("http://example.org/bookstore/books/123")
                     .request("application/xml").get(BookInfo.class);

그러나 이 기능이 작동하려면 응답 형식인 application/xml 을 요청된 유형에 매핑할 수 있는 Client 인스턴스에 적절한 엔터티 공급자 를 등록해야 합니다. 엔터티 공급자에 대한 자세한 내용은 49.4절. “요청 및 응답 구문 분석” 을 참조하십시오.

49.3.10. post 또는 put에 발신 메시지 지정

요청에 메시지 본문을 포함하는 HTTP 메서드(예: POST 또는 PUT)의 경우 메시지 본문을 메서드의 첫 번째 인수로 지정해야 합니다. 메시지 본문은 javax.ws.rs.client.Entity 개체로 지정해야 합니다. 여기서 엔터티 는 메시지 내용 및 관련 미디어 유형을 캡슐화합니다. 예를 들어 메시지 콘텐츠가 문자열 유형으로 제공되는 POST 메서드를 호출하려면 다음을 수행합니다.

import javax.ws.rs.client.Entity;
...
Response res = client.target("http://example.org/bookstore/registerbook")
                     .request("application/xml")
                     .put(Entity.entity("Red Hat Install Guide", "text/plain"));

필요한 경우 Entity.entity() 생성자 메서드는 등록된 엔터티 공급자를 사용하여 제공된 메시지 인스턴스를 지정된 미디어 유형에 자동으로 매핑합니다. 메시지 본문을 간단한 문자열 유형으로 지정할 수 있습니다.

49.3.11. 지연된 호출

HTTP 요청을 즉시 호출하는 대신(예: get() 메서드를 호출하여), 나중에 호출할 수 있는 javax.ws.rs.client.Invocation 오브젝트를 생성할 수 있는 옵션이 있습니다. Invocation 오브젝트는 HTTP 메서드를 포함하여 보류 중인 호출의 모든 세부 정보를 캡슐화합니다.

다음 방법을 사용하여 Invocation 오브젝트를 빌드할 수 있습니다.

buildGet
buildPost
buildDelete
buildPut
build

예를 들어 GET Invocation 오브젝트를 생성하고 나중에 호출하려면 다음과 같은 코드를 사용할 수 있습니다.

import javax.ws.rs.client.Invocation;
import javax.ws.rs.core.Response;
...
Invocation getBookInfo = client.target("http://example.org/bookstore/books/123")
                     .request("application/xml").buildGet();
...
// Later on, in some other part of the application:
Response = getBookInfo.invoke();

49.3.12. 비동기 호출

Cryostat-RS 2.0 클라이언트 API는 클라이언트 측에서 비동기 호출을 지원합니다. 비동기 호출을 만들려면 request() 뒤에 나오는 메서드 체인에서 async() 메서드를 호출합니다. 예를 들면 다음과 같습니다.

Future<Response> res = client.target("http://example.org/bookstore/books/123")
                     .request("application/xml")
                     .async()
                     .get();

비동기 호출을 수행할 때 반환된 값은 java.util.concurrent.Future 오브젝트입니다. 비동기 호출에 대한 자세한 내용은 49.6절. “클라이언트에서 비동기 처리” 을 참조하십시오.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.