////
Search
Duplicate
🌉

Chapter 7. REST 서비스 사용하기

이 장에서 배우는 내용
RestTemplate을 사용해서 REST API 사용하기
Traverson을 사용해서 하이퍼미디어 API 이동하기
관객이 없는 영화는 클라이언트가 없는 API와 같다. API는 데이터를 받거나 제공한다. 그러나 호출되지 않는다면 그것은 API라고할 수 있을까?
스프링 어플리케이션에서 API를 제공하면서 다른 어플리케이션의 API를 요청하는 것은 흔한 일이다. 이 장에서는 REST API 클라이언트를 작성하고 사용하는 방법을 알아본다.
스프링 어플리케이션은 다음과 같은 방법을 사용해서 REST API를 사용할 수 있다.
RestTemplate: 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트
Traverson: 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 RSET 클라이언트로 같은 이름의 자바스크립트 라이브러리로부터 비롯
WebClient: 스프링 5에서 소개된 반응형 비동기 REST 클라이언트

1. RestTemplate으로 REST 엔드포인트 사용하기

클라이언트 입장에서 REST 리소스와 상호작용하려면 처리해야하는 작업이 많아 코드가 장황하고 이해하기 어려워 진다.
즉, 저수준의 HTTP 라이브러리로 작업하면서 요청 객체를 생성하고, 실행하고, 응답을 분석하여 필요한 값만 추출해내야 하며 그 와중에 발생 가능성이 있는 예외도 처리해야 한다.
이처럼 장황한 코드를 피하기 위해 스프링은 RestTemplate을 제공한다.
JDBC를 사용할 때 번거로운 작업을 JDBCTemplate 처리하듯, RestTemplate은 REST 리소스를 사용하는 데 번잡한 일을 처리해준다.
RestTemplate에 정의되어있는 고유한 메소드들은 다음과 같다. 나머지는 해당 메소드들을 오버라이딩한 메소드들이다.
메소드
기능 설명
delete(…)
지정된 URL의 리소스에 HTTP DELETE 요청을 수행한다.
exchange(…)
지정된 HTTP 메소드를 URL에 대해 실행하며 Response Body와 연결되는 객체를 포함하는 ResponseEntity를 반환한다.
execute(…)
지정된 HTTP 메소드를 URL에 대해 실행하며 Response Body와 연결되는 객체를 반환한다.
getForEntity(…)
HTTP GET 요청을 전송하며, Response Body와 연결되는 객체를 포함하는 ResponseEntity를 반환한다.
getForObject(…)
HTTP GET 요청을 전송하며, Response Body와 연결되는 객체를 반환한다.
headForHeaders(…)
HTTP HEAD 요청을 전송하며, 지정된 리소스 URL의 HTTP 헤더를 반환한다.
optionsForAllow(…)
HTTP OPTIONS 요청을 전송하며, 지정된 URL의 Allow 헤더를 반환한다.
patchForObject(…)
HTTP PATCH 요청을 전송하며, Response Body와 연결되는 객체를 반환한다.
postForEntity(…)
URL에 데이터를 POST하며, Response Body와 연결되는 객체를 포함하는 ResponseEntity를 반환한다.
postForLocation(…)
URL에 데이터를 POST하며, 새로 생성된 리소스의 URL을 반환한다.
postForObject(…)
URL에 데이터를 POST하며, Response Body와 연결되는 객체를 반환한다.
put(…)
리소스 데이터를 지정된 URL에 PUT한다.

2. Traverson으로 REST API 사용하기

Traverson은 스프링 데이터 HATEOAS에 같이 제공되며 스프링 어플리케이션에서 하이퍼미디어 API를 사용할 수 있는 솔루션이다.
Traverson을 사용할 땐 우선 해당 API의 기본 URI를 갖는 객체를 생성해야 한다.
Traverson traverson = new Traverson(URI.create("http://localhost:8080/api"), MetdiaTypes.HAL_JSON);
Java
복사
API에 리소스를 쓰거나 삭제하는 메소드를 제공하지는 않으며 조회 기능만 제공한다.

요약

클라이언트는 RestTemplate을 사용해서 REST API에 대한 HTTP 요청을 할 수 있다.
Traverson을 사용하면 클라이언트가 응답에 포함된 하이퍼링크를 사용하여 원하는 API로 이동할 수 있다.