[스프링부트 #8] Rest Template

김지현·2023년 11월 30일
0

Rest Template

Rest Template이란 HTTP 통신을 위한 도구로 RESTful API 웹 서비스와의 상호작용을 쉽게 하여 외부 도메인에서 데이터를 가져오거나 전송할 때 사용된다. Spring 3.0부터 지원되었으며 REST API 호출 이후 응답을 기다리는 동기 방식이다. 서버에서 다른 서버로 요청을 보낼 때 간편하게 요청을 보낼 수 있도록 해준다. 즉 우리 서버는 클라이언트 입장이 되어 다른 서버(EX. 네이버 오픈 API)에 요청을 진행하는 것이다.

Get/Post 요청

- Client 입장 서버

  1. RestTemplate을 주입받는다.
private final RestTemplate restTemplate;

public RestTemplateService(RestTemplateBuilder builder) {
    this.restTemplate = builder.build();
}
  1. 요청 받은 검색어를 Query String 방식으로 Sever 입장의 서버로 RestTemplate를 사용하여 요청한다.
public ItemDto getCallObject(String query) {
    // 요청 URL
    URI uri = UriComponentsBuilder
            .fromUriString("http://localhost:7070")
            .path("/api/server/get-call-obj")
            .queryParam("query", query)
            .encode()
            .build()
            .toUri();

    ResponseEntity<ItemDto> responseEntity = restTemplate.getForEntity(uri, ItemDto.class);

    return responseEntity.getBody();
}

- Server 입장 서버

List 등을 조회하여 요청받은 검색어에 맞는 객체를 반환한다.

exchange

요청을 보낼 때 Header에 특정 정보를 같이 전달하고 싶다면 RestTemplate의 exchange를 사용한다.

public List<ItemDto> exchangeCall(String token) {
    URI uri = UriComponentsBuilder.
    (...)

    User user = new User();

    RequestEntity<User> requestEntity = RequestEntity
            .post(uri)
            .header("X-Authorization", token)
            .body(user);

    ResponseEntity<String> responseEntity = restTemplate.exchange(requestEntity, String.class);

    return fromJSONtoItems(responseEntity.getBody());
}

exchange 메서드의 첫 번째 파라미터에 RequestEntity 객체를 생성하여 전달해주면 uri, header, body의 정보를 한 번에 전달 가능하다.

0개의 댓글