-
20230118 TIL 서버에서 외부 API에 요청하기TIL 2023. 1. 18. 17:54
카카오 API처럼 외부 API를 사용하는 경우에 서버에서 http 요청을 보내야 하는 경우가 있다.
클라이언트에서 외부 API를 사용하는 것은 내가 만든 서버에 요청하는 것과 큰 차이가 없지만,
서버에서는 API응답만 해보았지 요청을 해본 적이 없어서 어떻게 해야하나 고민이 많았는데,
스프링에서는 RestTemplate이라는 스프링에서 제공하는 HTTP 클라이언트 라이브러리가 있다고 한다!
RestTemplate을 이용하면 URL로 요청을 보내거나 응답을 받을 수 있다.
아래와 같이 카카오페이 결제를 하는 과정에서 RestTemplate을 활용하였고,
postForObject 메서드를 이용해서 POST요청을 보냈고,
받아온 값에서 getter를 통해 필요한 redirect url을 얻을 수 있었다.
RestTemplate restTemplate = new RestTemplate(); HttpHeaders headers = new HttpHeaders(); headers.add("Authorization", "KakaoAK " + adminKey); headers.add("Content-Type", "application/x-www-form-urlencoded;charset=utf-8"); MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); params.add("cid", "TC0ONETIME"); params.add("partner_order_id", orderId); params.add("partner_user_id", String.valueOf(userId)); params.add("item_name", productName); params.add("quantity", String.valueOf(quantity)); params.add("total_amount", String.valueOf(orderPayment)); params.add("tax_free_amount", "0"); // TODO: 배포 후 url 수정 params.add("approval_url", "http://localhost:8080/order/success"); params.add("cancel_url", "http://localhost:8080/order/cancel"); params.add("fail_url", "http://localhost:8080/order/fail"); HttpEntity<MultiValueMap<String, String>> body = new HttpEntity<>(params, headers); try { kakaoPayReady = restTemplate.postForObject(new URI(HOST + "/v1/payment/ready"), body, KakaoPayReady.class); return kakaoPayReady.getNext_redirect_pc_url();
이때 리디렉션 url을 어떻게 반환을 해야하나 고민이 되었는데,
상태 코드를 둘러보다가 303 (See Other)이 적합해보였다.
303은 다른 URL로 리디렉션을 지시할 때 사용한다고 한다.
300번 대 다른 코드들은 보통 해당 리소스 주소가 이동했을 때에 대한 코드인데,
클라이언트가 새로운 URL에 접근하게 해야하는 상황이기 때문에 303이 가장 적합해보였다.
외부 API를 많이 적용해보지 않아서 진행하는 속도가 매우 더뎠는데,
그래도 한 번 하고 나니 리디렉션을 해야할 때는 어떤식으로 작업을 하면 될지 감이 잡혔다.
조급해 하지 말고 하나씩 차근차근 익혀보자!
'TIL' 카테고리의 다른 글
20230120 TIL 사용자 경험 고려하기 (0) 2023.01.20 20230119 TIL axios, msw에서 헤더를 다루는 법 (0) 2023.01.19 20230117 TIL 환경 변수를 사용하는 jest테스트하기 (0) 2023.01.17 20230116 TIL 컨트롤러 테스트에서 406 error가 발생하는 경우 (0) 2023.01.16 20230115 TIL 머리가 잘 돌아가지 않을 때는 몸을 움직이자 (0) 2023.01.15