티스토리 뷰
본 글은 "Spring in Action : REST 서비스 사용하기" 를 읽고 정리한 글입니다.
스프링 애플리케이션의 REST API 를 사용 방법
- RestTemplate : 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트
- Traverson : 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST 클라이언트
(같은 이름의 자바스크립트 라이브러리로부터 비롯됨, HATEOAS가 적용된 리소스에 대해 링크를 통해 쉽게 접근하기 위해서 만들어진 것)
- WebClient : 반응형 비동기 REST 클라이언트
본 글에서는 RestTemplate, Traverson 에 대해 얘기한다.
RestTemplate
- RestTemplate 은 저수준 HTTP 라이브러리를 이용해 클라이언트 및 요청을 생성하고 처리하는 등의 복잡한 과정을 해결해주다.
- 표준 HTTP 메서드의 TRACE 를 제외한 모든 메서드에 대해, 하나 이상의 메서드를 제공한다.
GET
- getForEntity : ResponseBody 와 연결되는 객체를 포함하는 ResponseEntity 반환
- getForObject : ResponseBody 와 연결되는 객체 반환
POST
- postForEntity : ResponseBody와 연결되는 객체를 포함하는 ResponseEntity 반환
- postForObject : ResponseBody 와 연결되는 객체 반환
- postForLocation : 새로 생성한 리소스의 URL 반환
PUT
- put : 리소스 데이터를 지정된 URL에 PUT, 리턴타입 void
PATCH
- patch : ResponseBody 와 연결되는 객체 반환
※ RestTemplate 을 기본생성자로 생성한 하면, 에러 나면서 실행이 안된다.
이때는, 아래와 같이
new RestTemplate(new HttpComponentsClientHttpRequestFactory());
를 추가하여 생성하고, patch 메소드를 사용하면 동작한다. 그리고 해당 Factory는 apache에서 제공하는 라이브러리를 추가해야 하므로, 아래 라이브러리도 maven repo 에서 추가하자.
DELETE
- delete : 지정된 URL 의 리소스에 HTTP DELETE 요청을 수행
OPTION
- optionsForAllow : HTTP OPTIONS 요청 전송하며, 지정된 URL의 Allow 헤더를 반환
그 외
- exchange : 지정된 HTTP 메서드를 URL 에 대해 실행하며, ResponseBody와 연결되는 객체를 포함하는 ResponseEntity를 반환
- execute : 지정된 HTTP 메서드를 URL에 대해 실행하며, ResponseBody와 연결되는 객체를 반환
- headForHeaders : HTTP HEAD 요청 전송하여, 지정된 리소스 URL 의 HTTP 헤더를 반환
Traverson
GET
- 얻고자 하는 리소스에 대한 관계 이름을 포함하는 follow 메서드를 호출하여 사용한다.
Traverson 의 경우, 리소스를 쓰거나 삭제하는 메서드를 제공하지 않는다. RestTemplate은 API 이동이 쉽지 않지만, 리소스에 대한 생성,수정,삭제가 가능하다.
따라서, Traverson으로 API 이동하고, RestTemplate으로 리소스 조작을 수행한다.
전체 코드
↓
https://gitlab.com/mskim0ct/tutorial/-/tree/main/hateoas/src/test/java/com/example/hateoas/client
'Spring' 카테고리의 다른 글
[ MockMvc ] MockMvc를 이용하여 Controller 테스트 시, 한글 깨짐 해결 방법 (0) | 2022.04.15 |
---|---|
[ Jackson ] Jackson 사용 시, 발생한 타입 문제 (0) | 2022.04.15 |
[ Spring in Action ] HATEOAS 란? (0) | 2022.03.15 |
[ 개념 ] DI ( Dependency Injection ) - 1 (0) | 2022.02.14 |
[ validation ] BindException? MethodArgumentNotValidException? (+ @RequestBody) (0) | 2022.01.04 |