<TIL> 94. Spring RestTemplate?

YUJIN LEE·2023년 4월 10일
0

개발log

목록 보기
88/149

RestTemplate?

Spring에서 지원하는 객체, 간편하게 Rest방식 API를 호출할 수 있는 Spring 내장 클래스
json, xml, String 응답을 모두 받을 수 있다.

Rest API 서비스를 요청 후 응답 받을 수 있도록 설계,
HTTP 프로토콜의 메소드(GET, POST, DELETE, PUT 등)들에 적합한 여러 메소드 제공.

Header, Content-Type 등 설정해 외부 api 호출

  private final RestTemplate restTemplate;
  private final KakaoUriBuilderService kakaoUriBuilderService;

  @Value("${kakao.rest.api.key}") // 환경변수 가져오기
  private String kakaoRestApiKey;

  public KakaoApiResponseDto requestAddressSearch(String address){

    if(ObjectUtils.isEmpty(address)) return null;

    URI uri = kakaoUriBuilderService.builderUriByAddressSearch(address);

    HttpHeaders headers = new HttpHeaders();
    headers.set(HttpHeaders.AUTHORIZATION, "KakaoAK " + kakaoRestApiKey);
    HttpEntity httpEntity = new HttpEntity<>(headers);

    // kakao api 호출
    return restTemplate.exchange(uri, HttpMethod.GET, httpEntity, KakaoApiResponseDto.class).getBody();
  }

}

RestTemplate의 동작원리

  • HttpClient는 HTTP 사용해 통신하는 범용 라이브러리
  • RestTemplate는 HttpClient를 추상화(HttpEntity의 json, xml) 해서 제공

  1. 어플리케이션이 RestTemplate생성, URI, HTTP 메소드 등의 header 담아 요청
  2. RestTemplate는 HttpMessageConverter를 사용해 requestEntity를 요청 메세지로 변환
  3. RestTemplate는 ClientHttpRequestFactory로 부터 ClientHttpRequest를 가져와 요청을 보냄
  4. ClientHttpRequest는 요청메세지를 만들어 HTTP 프로토콜을 통해 서버와 통신
  5. RestTemplate는 ResponseErrorHandler로 오류 확인하고 있다면 처리 로직 태움
  6. ResponseErrorHandler는 오류가 있다면 ClientHttpResponse에서 응답데이터를 가져와 처리
  7. RestTemplate는 HttpMessageConverter를 이용해 응답메세지를 java object(Class resonseType)로 변환
  8. 어플리케이션에 반환
profile
인정받는 개발자가 되고싶습니다.

0개의 댓글