추천 향수 제공 뿐만 아니라 포털사이트의 여러 게시글을 통해 향수에 대한 정보를 더 얻기 쉽게 하기 위해서 구현을 하였습니다.
네이버 검색 API는 비로그인 방식이기 때문에 Header만 설정해주면 돼서 구현이 쉽습니다.
친절하게 설명이 나와있으니 보고 따라서 애플리케이션을 등록하면 됩니다. 저는 현재 서버를 닫은 상태라 웹 서비스 url을 localhost로 설정하였습니다.
요청 URL에 따라 JSON으로 응답받을 지 XML으로 응답 받을지 선택할 수 있습니다. 저는 JSON을 선택하였습니다.
친절하게 예시가 나와있습니다!!
@Service
public class SearchService {
@Value("${naver.clientId}")
private String clientId;
@Value("${naver.apiKey}")
private String secretKey;
public HttpEntity<HttpHeaders> generateRequestEntity() {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add(Search.CLIENT_ID.getValue(), clientId);
httpHeaders.add(Search.API_KEY.getValue(), secretKey);
return new HttpEntity<>(httpHeaders);
}
public String generateQueryMessage(String perfumeName) {
final String query = new String(perfumeName.getBytes(StandardCharsets.UTF_8));
return Search.API_URL.getValue() + query + Search.DISPLAY.getValue() + Search.SORT.getValue();
}
}
clientId와 secretKey는 공개되면 안되니 반드시 감춰주시면 됩니다..! Header만 설정하면 돼서 HttpEntity에 Header를 담아주었습니다.
향수 이름으로 검색할 것이기 때문에 쿼리 메세지 생성에 perfumeName을 담아주었습니다.
@RestController
@RequestMapping("/perfume")
public class SearchController {
private final SearchService searchService;
public SearchController(SearchService searchService) {
this.searchService = searchService;
}
@GetMapping("/search")
public ResponseEntity<String> searchPerfumeInformation(@RequestParam("perfumeName") String perfumeName) {
return new RestTemplate()
.exchange(searchService.generateQueryMessage(perfumeName), HttpMethod.GET,
searchService.generateRequestEntity(), String.class);
}
}
카카오 로그인때 했던 방식과 똑같이 RestTemplate을 활용하여 요청을 보냈습니다.
굳굳!