2줄의 코드로 API 중단 시간을 처리하는 방법

지난 몇 년 동안 타사 API 호출이 매우 간단해졌습니다. 예를 들어 유명한 스타워즈 영화에 나오는 행성 목록을 앱에 표시하는 데 필요한 모든 것은 다음과 같습니다.

const axios = require("axios")

axios
  .get("https://swapi.co/api/planets")
  .then(console.log)


현재 가능한 거의 모든 작업을 수행할 수 있는 수천 개의 API가 있습니다. 그러나 API는 예측할 수 없습니다. 그들은 대부분의 시간 동안 작동하지만 it happens , one day or another , that for an unanticipated reason 요청이 실패합니다.

프로덕션에서 이러한 오류를 디버깅하는 것은 매우 까다롭습니다. 좋은 로깅 습관이 있거나 타사 서비스(예: Bugsnag 또는 Sentry)에 의존해야 합니다. 이것은 훌륭하지만 여기에서 API 트래픽에 실제로 초점을 맞추지는 않습니다.

앱에 API 복원력을 부여할 수 있다면 어떨까요? Stripe, Twilio 또는 기타 서비스에서 어떤 일이 발생하더라도 귀하의 앱(및 귀하의 비즈니스)은 우위를 점할 것입니다.

Bearer에서 이것이 우리가 작업하고 있는 것입니다. 에이전트의 첫 번째 버전은 네트워크나 앱 성능에 영향을 주지 않고 외부 API 호출을 모니터링합니다. 2줄의 코드(Node.js에서)로 수행합니다.

살펴봅시다:

// That's all it takes to monitor external API calls
const Bearer = require('@bearer/node-agent')
Bearer.init({ secretKey: '...' })


이 두 LOC를 앱에 추가하면 애플리케이션이 수행하는 아웃바운드 API 요청에 대한 전체 개요를 얻을 수 있습니다.

이렇게 하면 앱에서 생성된 모든 요청을 실시간으로 디버그하는 데 도움이 됩니다.


타사 API 사용에 대한 개요가 포함된 내 대시보드의 스크린샷

그러나 Bearer Agent는 더 많은 일을 합니다. 또한 적극적인 방식으로 앱을 보호합니다.

the Star Wars API에 대한 요청이 자주 실패한다고 가정해 보겠습니다. 이로 인해 앱에 버그가 발생하지만 해당 API의 일부 네트워크 문제일 뿐이라는 것을 알고 있습니다. 이 문제를 해결하기 위한 첫 번째 단계는 앱에 재시도 논리를 추가하는 것입니다.

Axios을 사용하여 수행할 수 있는 방법은 다음과 같습니다.

const axios = require('axios')

function getPlanets(count_requests) {
  // Max number of retries
  const max_retry = 2

  // Counter on how many requests has been performed yet
  // (will be 0, 1 or 2)
  count_requests = Number(count_requests) || 0

  // If the counter of requests is above the limit
  // of retries, throw an error.
  if (count_requests > max_retry) {
    throw Error(`Unable to make the request (total retry: ${count_requests})`)
  }

  // Make the request and return it
  return axios.get('https://swapi.co/api/planets').catch(() => {
    // If an error happens, retry the request.
    return getPlanets(count_requests + 1)
  })
}

// Make the request
getPlanets().then(console.log)


조금 더 복잡해 보이기 시작합니다...

Bearer Agent에는 요청을 자동으로 재시도하는 기본 제공 메커니즘이 있습니다. 따라서 앱에서 Bearer를 사용하도록 설정했을 때 재시도가 어떻게 표시되는지 살펴보겠습니다.

const Bearer = require('bearer')
Bearer.init({ secretKey: '...' })

const axios = require('axios')
axios.get('https://swapi.co/api/planets').then(console.log)


더 좋아보이죠? 재시도 로직이 베어러 에이전트에서 바로 처리되기 때문입니다. 그러나 재시도는 에이전트가 제공하는 기능의 한 예일 뿐입니다. 우리 팀은 또한 폴백, 캐싱, 회로 차단기 등을 추가하고 있습니다.

궁금하시다면 저희 웹사이트에서 API resilience & monitoring에 대해 자세히 알아보세요.

추신: 추천 이미지는 Annie SprattUnsplash에 제공되었습니다.

좋은 웹페이지 즐겨찾기