스프링 RestTemplate(2) 예제

lilseongwon·2022년 8월 22일
2

기술

목록 보기
2/2
post-thumbnail

이번에는 전편에 이어서 작동원리대로 네이버 책 API와 통신을 구현해보겠다.

RestTemplate 메소드💡

  • getForObject에서 get은 HTTP메소드의 GET을 뜻한다.

네이버 오픈 API🎨

오픈 API는 누구나 사용할 수 있도록 공개된 API를 뜻한다.
우리는 네이버 책 API를 이용하여 도서검색을 구현할 것이다.

1. 어플리케이션 등록


우선 API를 사용하기 위해서 Client ID와 Client Secret값이 필요하므로
오픈 API이용 신청을 해야 한다.
https://developers.naver.com/apps/#/register

2. API 요청 URL

JSON 형식의 맨 밑의 URL을 사용한다. 참고로 json형식으로 상세검색을 하고 싶다면 https://openapi.naver.com/v1/search/book_adv.json 을 사용하면 된다.

3.요청 변수


우리는 기본검색 URL을 사용할 것이므로, 요청 변수 "query"를 사용할 것이다. (다른 요청변수는 상세검색 URL에서 사용 가능하다.)

4. 출력 결과

응답받을 변수들의 목록이다. 이것들을 DTO에 담을 것이다.

코드💻

1.Controller

@RequiredArgsConstructor
@RestController
public class Controller {

    private final Service service;

    @GetMapping("/search/{keyword}")
    public Dto search(@PathVariable String keyword){
        return service.requestBook(keyword);
    }
}

서비스로 요청을 넘길 컨트롤러다. PathVariable로 검색어를 파라미터로 넣어준다.

2.Dto

@Data
public class Dto {

    private Integer display;
    private Item[] items;

    @Data
    static class Item{
        private String title;
        private String image;
        private String author;
    }
}

응답에 사용할 Dto이다.
Display는 검색결과 수이고, 도서 정보를 담은 각각의 Item을
items 배열에 저장한다.

3.Service

@RequiredArgsConstructor
@Service
public class Service {
    private final RestTemplate restTemplate = new RestTemplate();
    private final String CLIENT_ID = "클라이언트ID";
    private final String CLIENT_SECRET = "클라이언트 Secret";

    public Dto requestBook(String keyword) {
        final HttpHeaders headers = new HttpHeaders();
        URI uri = UriComponentsBuilder
                .fromUriString("https://openapi.naver.com/v1/search/book.json")
                .queryParam("query", keyword)
                .encode()
                .build()
                .toUri();
        headers.set("X-Naver-Client-Id", CLIENT_ID);
        headers.set("X-Naver-Client-Secret", CLIENT_SECRET);

        final HttpEntity<String> entity = new HttpEntity<>(headers);
        return restTemplate.exchange(uri, HttpMethod.GET, entity, Dto.class).getBody();
    }
}

여기부터가 중요하다. RestTemplate을 생성하고, 클라이언트 Id와
클라이언트 Secret을 헤더에 담는다. 그리고 UriComponentsBuilder를 이용하여 Uri(네이버 api)와 queryParam(검색어)를 담아서 restTemplate의 exchange메소드를 사용하면 Dto로 응답을 받게 된다.

요청 결과🔊

포스트맨에 Get메소드로 url에 검색어를 담아 요청하면

Dto 형식대로 아주 잘 응답된다!


글에서 잘못된 점이나 궁금한 점은 댓글로 남겨주세요🧐

profile
스프린트가 아닌 사이클링

0개의 댓글