생산성을 높이는 郵便配達人기능 활용. 1편


1편, API인증 자동화로 API호출을 좀 더 편하게 만들기.
2편, 콜렉션 수정내용 ジット처럼 관리하기.
3편, API호출 및 응답 예제를 작성해서 模擬서버 구축하기.
4편, 다양한 요청 포맷을 インポート/エクスポート.

API인증 자동화로 API호출을 좀 더 편하게 만들기.


API호출 테스트를 하려면 일반적으로 인증 토큰 혹은, 인증에 필요한 값을 서버로 부터 받아 API호출시 값을 전달하여 인증 하게 됩니다. 이러한 일반적인 API호출 환경을 지원하기 위해, 郵便配達人에서는 認可기능을 제공 하고 있습니다.
첫번째로 認可기능을 활용한 API인증 셋팅 방법을 소개 하고, 약간은 아쉬운 듯한 認可기능을 대체 할수 있도록 설정하는 방법까지 소개 하겠습니다.
포스트맨은 コレクション이라는 API의 최상위 묶음 단위가 있고, 하위 계층으로 フォルダ묶음이 있고, 하위에 リクエスト가 포함되는 구조로 여러 リクエスト를 묶어서 관리 할 수 있습니다.

각 묶음단위 별로 認可을 설정 할 수 있는데, 인증 방식이 보통 API전체적으로 적용되기에 コレクション단위로 셋팅 하는 예를 보여드리겠습니다. 가장 간단한 APIキー타입 인증의 셋팅 예시입니다.
API제공자로부터 특정 HTTP헤더 값에 제공한 キー값을 넣어서 요청할 것을 가이드 받았다면, API key 種類으로 認可을 셋팅 하면 됩니다.
  • コレクション의 認可탭으로 이동합니다
  • 種類에서 API key 를 선택합니다.
  • 특정 헤더 값의 이름을 key 항목에 입력 합니다. 제공받은 キー값은 value 항목에 입력합니다.
  • Add to 항목은 Header 로 선택합니다.

  • 이렇게 셋팅 하면 コレクション내의 모든 API요청시 셋팅한 헤더가 추가되어 요청됩니다.
    하지만! API key 타입의 셋팅으로는 어려운 상황이 발생하기도 합니다. 인증 값이 수시로 변경 되고 유효기간을 지니는 경우( JWT )같은)는 認可기능으로 셋팅하기가 힘든 경우인데요. 이 경우, 토큰을 발급 받기위해 하는 작업을 매번 반복 해야하는 불편함이 있습니다.
    이 불편함을 해소 할 수 있는 자동화 설정 방법을 소개합니다. 事前リクエストスクリプト기능을 활용한 토큰발급 자동화 방법입니다. 事前リクエストスクリプト
    기능은 간단하게 설명하자면, 요청을 보내기전에 ジャバスクリプト코드를 실행 시켜주는 기능 입니다. 事前リクエストスクリプト또한 認可기능처럼 모든 묶음 단위에 설정이 가능 합니다. 마찬가지로 コレクション에 셋팅하는 예시를 보여 드리겠습니다.
  • コレクション의 Pre-request script 탭으로 이동합니다.
  • 실행시킨 코드를 작성 하면, 셋팅 완료 됩니다.

  • 스크린샷에서 입력된 아래 ジャバスクリプト코드도 아래에 공유드립니다. 아임포트 APIAPI 문서 )의 토큰을 얻어오는 스크립트입니다. 스크립트에서 하는 동작은 간단합니다. 토큰을 얻어오는 API를 HTTP요청하여 응답을 받고, 응답된 토큰 값을 실제 요청될 요청 객체에 헤더값으로 셋팅하는것이 전부입니다.
    pm.sendRequest({
        url: 'https://api.iamport.kr/users/getToken',
        method: 'POST',
        header: {
        'Accept': 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded'
        },
        body: {
            mode: 'urlencoded',
            urlencoded: [
            {
                key: "imp_key", 
                value: "xxxxxxxxx", 
                disabled: false
            },
            {
                key: "imp_secret", 
                value: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", 
                disabled: false
            },
        ]
        }
    }, function (err, res) {
        res_data = res.json()
        console.log(res_data)
        pm.request.headers.add({
            key: "X-ImpTokenHeader",
            value: res_data.response.access_token
        });
    });
    
    여기서 자세하게 알아야 할 부분은 pm 1 이라는 객체인데, 포스트맨에서 事前リクエストスクリプト가 동작 하기전에 미리 준비해놓는 객체입니다. pm 이라는 객체 내에 여러 메서드들과 멤버가 존재하는데 여기서는 sendRequest() 메서드와 request 객체를 사용했습니다.
    우선, sendRequest() 를 사용해서 users/getToken API를 호출합니다. 이때, 아임포트에서 제공받은 imp_key 값과 imp_secret 값을 ボディ담아 요청 합니다.
    API호출 응답이 오면, 응답 コールバック이 호출 되고, pm.request.headers.add() 를 호출하여, 실제로 보내질 요청의 헤더에 X-ImpTokenHeader 헤더를 추가하고 스크립트는 종료됩니다. 스크립트가 실행된 이후에, 호출하려고 했던 API가 호출 되며, 아래와 같이 인증을 통과한 정상적인 결과값을 확인 할 수 있게 됩니다.

    스크립트에 console.log(res_data) 를 넣어두면 위 스크린샷 처럼 コンソール창에서 메세지를 확인 할 수 있습니다. トークン값이 잘 응답 되었고, 요청헤더에도 잘 추가된 것을 확인 하실 수 있습니다.
    위 예시코드에서는 토큰 만료까지 토큰을 재사용 하지 않고, 무조건 요청전에 토큰을 가져오게 됩니다. users/getToken API결과 값 중의 expired_at 값을 활용하여, 만료전까지 토큰을 재사용하는 코드로 개선을 할 수도 있을 것으로 보입니다. pm 객체 에 대한 document 를 확인하고 사용하자.畝