ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 20230118 TIL 서버에서 외부 API에 요청하기
    TIL 2023. 1. 18. 17:54

    http://t1.daumcdn.net/kakaopay/brand_site/img/og/kakaopay_og_20201217.png

    카카오 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를 많이 적용해보지 않아서 진행하는 속도가 매우 더뎠는데,

    그래도 한 번 하고 나니 리디렉션을 해야할 때는 어떤식으로 작업을 하면 될지 감이 잡혔다.

    조급해 하지 말고 하나씩 차근차근 익혀보자!

     

    댓글

Designed by Tistory.