Java&Web

[WEB] RestTemplate을 이용하여 API 호출하기

프로그래민 2021. 1. 23. 23:43
반응형

RestTemplate이란?

RestTemplate은 Spring 3.0 부터 지원하는 템플릿으로 Spring에서 HTTP 통신을 RESTful 형식에 맞게 손쉬운 사용을 제공해주는 템플릿이다. Rest API 서비스를 요청후 응답 받을 수 있도록 설계되었으며 HTTP 프로토콜의 메소드(ex. GET, POST, DELETE, PUT)들에 적합한 여러 메소드들을 제공한다. Java에서 사용되는 다른 템플릿(ex. JdbcTemplate)들 처럼 단순 메소드 호출 만으로 복잡한 작업을 쉽게 처리할 수 있는 것이 특징이다.

 

RestTemplate의 특징

  • Spring 3.0 부터 지원하는 Spring의 HTTP 통신 템플릿
  • HTTP 요청 후 JSON, XML, String 과 같은 응답을 받을 수 있는 템플릿
  • Blocking I/O 기반의 동기방식을 사용하는 템플릿
  • RESTful 형식에 맞추어진 템플릿
  • Header, Content-Tpye등을 설정하여 외부 API 호출
  • Server to Server 통신에 사용

 

RestTemplate의 동작원리

  1. 애플리케이션이 RestTemplate을 생성하고 URI, HTTP 메소드 등을 헤더에 담아 요청
  2. RestTemplate은 HttpMessageConverter를 사용하여 RequestEntity를 요청메세지로 변환
  3. RestTemplate은 ClitentHttpRequestFactory로 부터 ClientHttpRequest를 가져온후 요청을 보냄
  4. ClientHttpRequest는 요청메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신
  5. RestTemplate은 ReponseErrorHandler로 오류를 확인
  6. ResponseErrorHandler는 오류가 있다면 ClientHttpResponse에서 응답 데이터를 가져와서 처리
  7. RestTemplate은 HttpMessageConverter를 이용해서 응답메세지를 Java Object(Response Type)로 변환
  8. 애플리케이션에 반환

 

RestTemplate의 메소드

메소드 HTTP 설명
getForObject GET HTTP GET 요청 후 결과는 객체로 반환
getForEntity GET HTTP GET 요청 후 결과는 ResponseEntity로 반환
postForLocation POST HTTP POST 요청 후 결과는 헤더에 저장된 URL을 반환
postForObject POST HTTP POST 요청 후 결과는 객체로 반환
postForEntity POST HTTP POST 요청 후 결과는 ResponseEntity로 반환
delete DELETE HTTP DELETE 요청
headForHeaders HEADER HTTP HEAD 요청 후 헤더정보를 반환
put PUT HTTP PUT 요청
patchForObject PATCH HTTP PATCH 요청 후 결과는 객체로 반환
optionsForAllow OPTIONS 지원하는 HTTP 메소드를 조회
exchange Any 원하는 HTTP 메소드 요청 후 결과는 ResponseEntity로 반환
execute Any Request/Response의 콜백을 수정

 

RestTemplate 실습

springboot-starter-web 추가

Springboot에서 테스트 API 환경을 구성하고, RestTemplate의 exchange로 JSON 데이터를 보내는 실습을 해보았다.

Springboot의 Web dependency 추가

RestTemplate과 JSON을 processiong 해주는  Jackson 라이브러리를 동시에 모두 포함하고 있는 springboot-starter-web dependency를 추가 해주었다. 만일 Springboot 환경이 아니면 spring-web dependency와 jackson-databind dependency를 추가해주면 된다.

 

Test API 구현

Test API

RestTemplate으로 요청을 보낼 API를 위와 같이 구현해주었다.

 

RestTemplate의 exchange 구현

RestTemplate의 exchange

RestTemplate의 exchange 메소드를 테스트해보기 위해 위와 같은 메소드를 구현하였다. 일단 JSON을 POST요청의 Body에 넣어줄 예정이어서 헤더에 JSON에 대한 정보를 넣어줘었다. 그 후 보낼 데이터를 ObjectMapper를 사용하여 JSON으로 바인딩 해주었는데 위에선 Map을 사용하는 방법과 DTO를 사용하는 방법 두가지를 이용해서 구현해보았다. HttpEntity에 헤더와 Body에 들어갈 JSON 데이터를 넣어주었다. RestTemplate의 exchange를 보면 아까 구현해놓은 API와 HttpEntity, HTTP 메소드, 그리고 Response의 타입을 파라미터로 사용하였다.

 

응답 결과 확인

응답 결과

위의 함수를 실행시킨 결과로 요청을 보낸 후 응답을 위와 같이 확인할 수 있었다.

 

출처
a1010100z.tistory.com/125
sjh836.tistory.com/141
advenoh.tistory.com/46
반응형