Echolot
튜토리얼

요청 연결하기

한 번 로그인하여 토큰을 저장하고, 동적 값과 Idempotency-Key를 사용하여 토큰이 필요한 모든 요청에서 보냅니다.

대부분의 API는 로그인하여 받은 토큰을 요구합니다. 이 튜토리얼에서는 로그인 응답에서 데모 숍의 토큰을 변수에 저장하고, 폴더의 인증으로 폴더 전체에서 토큰을 보내고, 한 응답의 값을 다음 요청으로 읽어 오고, Idempotency-Key로 주문을 안전하게 넣습니다.

  • 소요 시간: 15분.
  • 필요한 것: 첫 번째 작업 공간에서 만든 작업 공간. Demo 환경을 선택한 상태이고 Auth › Sign in 요청이 있어야 합니다. Alpenglow에는 이 모두가 이미 만들어져 있으니 열어서 비교해 볼 수 있습니다.
  • 배우는 내용: 응답 캡처, 상속된 인증, 동적 값, 응답 값.

1. 로그인 응답에서 토큰 저장하기

  1. Auth › Sign in을 열고 보냅니다(⌘R).
  2. 응답의 본문 탭에서 보기를 JSON 트리로 바꿉니다.
  3. access_token 행에 포인터를 올립니다. 값 뒤에 작은 버튼이 나타납니다. 도움말이 변수에 저장…인 버튼을 선택합니다.
  4. 변수에 저장 팝오버에서 다음과 같이 합니다.
    • 이름을 token으로 바꿉니다.
    • 범위에서 “Demo” 환경을 선택합니다. 서버마다 자체 토큰이 있기 때문입니다.
    • 비밀 값 · 키체인에 보관, 파일에는 저장 안 함이 선택되어 있는지 확인합니다. token 같은 이름이면 Echolot이 직접 선택해 둡니다.
    • 보낼 때마다 업데이트 · 이 요청과 함께 저장은 선택된 채로 둡니다.
  5. 저장을 선택합니다.

요청의 변수 탭을 엽니다. 응답에서 아래에 행이 하나 있습니다. token, JSON에서, 경로 $.access_token, Demo에 저장, 비밀 값. 이제부터 Sign in을 성공적으로 보낼 때마다 새 토큰이 {{token}}에 기록됩니다. 응답이 400 이상이거나 값이 없으면 변수는 그대로 둡니다. 자세한 내용은 응답 캡처에 있습니다.

JSON 트리의 access_token 값 위에 열린 변수에 저장 팝오버. 범위와 비밀 체크 상자가 선택되어 있음

2. 폴더 전체에서 토큰 보내기

모든 요청에 Bearer 인증을 설정하는 대신 폴더에 한 번만 설정합니다.

  1. 폴더 Orders를 만듭니다(⇧⌘N).
  2. Orders를 오른쪽 클릭하고 폴더 설정…을 선택합니다.
  3. 인증 탭에서 유형을 Bearer 토큰으로, 토큰을 {{token}}으로 설정합니다. 완료를 선택합니다.
  4. Orders를 오른쪽 클릭하고 새로운 요청을 선택한 뒤 이름을 List orders로 합니다. URL을 {{baseURL}}/orders로 설정합니다.
  5. 인증 탭을 엽니다. 유형은 상속이며, 사용 행에 폴더의 Bearer 토큰을 사용한다고 표시됩니다.
  6. 보냅니다.

Heidi의 주문 세 개가 나옵니다. ord_7Hk2Lw(배송 중), ord_8Jm4Qx(결제 완료), ord_5Fd9Ra(배송 완료)입니다. Orders의 새 요청은 모두 같은 방식으로 토큰을 보냅니다. 요청은 상속으로 시작하며, 가장 가까운 폴더의 인증을, 그다음 작업 공간의 인증을 사용합니다. 다른 유형은 인증을 참고하십시오.

나중에 401 Unauthorized가 오면 토큰이 만료된 것입니다. 토큰은 1시간 동안 유효합니다. Sign in을 다시 보내면 토큰이 업데이트됩니다.

3. 다른 응답에서 값 읽기

다음 요청은 List orders의 응답에서 첫 번째 주문의 ID를 읽으므로 직접 복사할 필요가 없습니다.

  1. Orders에 요청 Get order를 만듭니다.
  2. URL 필드에 {{baseURL}}/orders/를 입력하고 이어서 {{$response를 입력합니다. 목록에 응답 그룹의 동적 값이 나타납니다. JSONPath로 필터링한 응답을 선택합니다.
  3. 열리는 양식에서 요청을 List orders 요청(orders/list-orders)으로, JSONPath를 $.items[0].id로 설정합니다. 먼저 보내기는 아직 응답이 없을 때로 둡니다. 완료를 선택합니다.

이제 URL에는 {{$responseJSONPath('orders/list-orders', '$.items[0].id')}}를 나타내는 토큰이 들어 있습니다. 포인터를 올리면 현재 값 ord_7Hk2Lw를 볼 수 있습니다. Get order를 보내면 품목과 배송 정보가 포함된 해당 주문이 나옵니다. List orders를 한 번도 보낸 적이 없었다면 Echolot이 먼저 보냈을 것입니다.

4. 동적 값으로 주문하기

동적 값은 보낼 때마다 새로 만들어집니다. 새 주문에 두 가지를 사용해 봅니다.

  1. Orders에 메서드가 POST이고 URL이 {{baseURL}}/orders인 요청 Create order를 만듭니다.

  2. 본문 탭에서 JSON을 선택하고 본문을 입력합니다. {{ 목록으로 ISO 8601 타임스탬프를 삽입합니다.

    {
      "lines": [
        { "sku": "TNT-MH-2P", "quantity": 1 },
        { "sku": "PCK-TIT-30", "quantity": 2 }
      ],
      "note": "Placed from Echolot at {{$isoTimestamp}}"
    }
  3. 헤더 탭에서 Idempotency-Key 헤더를 추가합니다. 값에는 {{를 입력하고 UUID({{$uuid}})를 선택합니다.

  4. 보냅니다.

/v1/orders/ord_… 같은 Location 헤더가 포함된 201 Created가 오며, 숍은 사용자의 Idempotency-Key를 돌려보냅니다. note에는 보낸 시각이 들어 있습니다. 데모는 아무것도 저장하지 않으므로 새 주문은 나중에 가져올 수 없습니다. 모든 동적 값은 레퍼런스에 있습니다.

201 Created로 응답한 Create order. 응답 헤더로 Location과 Idempotency-Key가 있음

5. Idempotency-Key의 역할 확인하기

Idempotency-Key는 같은 키로 보낸 요청이 같은 주문임을 서버에 알려 주므로, 다시 보내도 주문이 두 번 들어가지 않습니다.

  1. Create order를 다시 보냅니다. Location의 ID가 바뀝니다. {{$uuid}}가 새 키를 만들었기 때문입니다.
  2. 헤더 탭에서 {{$uuid}}를 tutorial-order-1 같은 고정 값으로 바꿉니다.
  3. 두 번 보냅니다. 두 응답 모두 같은 주문 ID를 담고 있습니다.

실제 API는 이 키를 사용해 첫 번째에 도달한 요청이 반복되는 것을 막습니다. Echolot도 이를 사용합니다. 유지 중이던 연결이 응답 없이 닫히면, 두 번 보내도 해가 없을 때만 새 연결로 요청을 다시 보냅니다. GET, PUT, DELETE와 그 밖의 안전하거나 멱등한 메서드, 그리고 Idempotency-Key 헤더가 있는 모든 요청이 여기에 해당합니다. 키가 없는 POST는 다시 보내지 않고 실패하므로, 모르는 사이에 주문이 두 번 들어가는 일은 없습니다. 끝나면 {{$uuid}}로 되돌려 놓으십시오.

숍이 확인하는 것이 두 가지 더 있습니다.

  • 수량을 0으로 바꿔 보내면 422 Unprocessable Content가 각 품목의 문제를 나열합니다.
  • Alpenglow의 Orders with OAuth 2는 클라이언트 자격 증명으로 토큰을 받습니다. 이 토큰은 주문을 읽을 수는 있지만 넣을 수는 없습니다. 이 토큰으로 POST /v1/orders를 보내면 403 Forbidden으로 응답합니다.

다음 단계

이 페이지에서