•
이 장에서 배우는 내용
◦
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로 이동할 수 있다.