APIFuseAPIFuse
  • Providers
  • 변경 내역
  • Playground
  • 대시보드
  • APIFuse 문서
    • 시작하기
    • 인증과 connection
    • 플레이그라운드
    • OpenAPI와 스키마 아티팩트
    • MCP 엔드포인트
    • 개발자 MCP 가이드
    • 스키마 번들과 변환 경고
    • Next.js App Router 연동
    • FastAPI 연동
    • 에러 처리
    • 자주 묻는 질문
    • 추가 리소스
APIFuseAPIFuse

에러 처리

APIFuse 에러 응답을 읽고 재시도할 실패와 업스트림 서비스가 거절한 요청을 구분하는 방법.

에러 처리

모든 APIFuse 에러 응답은 세 가지를 알려줍니다: 무슨 일이 있었는지(code, message), 누가 요청을 멈췄는지(source), 동일한 재시도가 성공할 수 있는지(retryable). HTTP 상태 코드를 패턴 매칭하는 대신 이 필드들을 사용하세요.

에러 응답 형태

{
  "error": {
    "code": "UPSTREAM_REJECTED",
    "message": "The requested time slot overlaps an existing reservation.",
    "retryable": false,
    "source": "upstream_rule",
    "fix": "Pick a slot that does not overlap the account's existing reservations.",
    "requestId": "req_1a2b3c"
  }
}
필드의미
code안정적인 기계 판독용 코드. 오퍼레이션별 코드는 각 오퍼레이션 레퍼런스 페이지에 나열됩니다.
message사람이 읽는 요약.
retryablefalse면 동일한 재시도는 성공할 수 없습니다 — 요청을 바꾸세요. true면 나중에 재시도하면 성공할 수 있습니다.
source누가 요청을 멈췄는지 (아래 참조).
fix요청을 성공시키려면 무엇을 바꿔야 하는지 (알 수 있는 경우).
requestId지원팀에 문의할 때 함께 전달하세요.

일부 에러 응답은 source와 retryable을 생략할 수 있습니다. 없을 때는 아래 상태 클래스를 기준으로 처리하세요.

플랫폼 수준 에러(잘못된 Connection ID, 상대 서비스 연결 타임아웃, 취소된 요청)는 같은 필드를 최상위에 담는 평평한 body를 사용합니다: {"error", "code", "message", "action", "retryable", "source", "request_id"}. 공식 SDK는 두 형태를 모두 읽습니다.

누가 요청을 멈췄는가

source의미대응
client요청 자체를 바꿔야 합니다 (잘못된 입력, 없거나 만료된 Connection).요청을 고치거나 다시 연결한 뒤 호출하세요.
upstream_rule상대 서비스가 요청을 이해했고 자체 규칙에 따라 거절했습니다 — 품절, 겹치는 예약, 계정 상태 제한 등.사유를 사용자에게 보여주거나 요청을 바꾸세요. 동일하게 재시도하면 같은 답이 돌아옵니다.
upstream_failure상대 서비스가 오작동했거나 응답하지 않았습니다.백오프를 두고 재시도하세요.
apifuseAPIFuse가 요청을 완료하지 못했습니다.백오프를 두고 재시도하고, 지속되면 requestId와 함께 지원팀에 문의하세요.

상태 클래스

상태분류일반적인 source
400, 401, 404요청을 바꿔야 함client
409, 410, 422상대 서비스가 자체 규칙으로 거절upstream_rule
429레이트 리밋 — Retry-After를 지키세요upstream_rule
502, 504업스트림 오작동 또는 타임아웃upstream_failure
500, 503APIFuse 측 결함apifuse

409는 장애가 아닙니다: 상대 서비스는 정상이며 확정적인 답을 준 것입니다. 재시도할 에러가 아니라 애플리케이션 데이터로 다루세요 (예: "이미 예약된 시간대입니다"를 표시).

안전한 재시도

  • retryable: false 응답은 절대 자동 재시도하지 마세요.
  • 429는 Retry-After 간격 후에, 502/503/504는 지수 백오프로 재시도하세요.
  • 공식 TypeScript/Python SDK는 이 규칙을 자동으로 따르며, 던져진 에러에서 error.retryable과 error.source를 읽을 수 있습니다.
import { ApiFuseClient, ApiFuseError } from "@apifuse/sdk";

const client = new ApiFuseClient({ apiKey: process.env.APIFUSE_API_KEY! });

async function reserve(input: Record<string, unknown>) {
  try {
    return await client.call.invoke("catchtable", "reserve", input);
  } catch (error) {
    if (
      error instanceof ApiFuseError &&
      error.source === "upstream_rule" &&
      error.retryable === false
    ) {
      // 확정적 거절 — 재시도하지 말고 사용자에게 사유를 보여주세요.
      // (429 레이트 리밋도 source가 "upstream_rule"이지만 retryable이라
      // 위 가드가 재시도 경로에 남겨둡니다.)
      return { refused: true, reason: error.message, suggestion: error.fix };
    }
    throw error;
  }
}

On this page

에러 처리에러 응답 형태누가 요청을 멈췄는가상태 클래스안전한 재시도
APIFuseAPIFuse
  • Providers
  • 변경 내역
  • Playground
  • 대시보드
  • APIFuse 문서
    • 시작하기
    • 인증과 connection
    • 플레이그라운드
    • OpenAPI와 스키마 아티팩트
    • MCP 엔드포인트
    • 개발자 MCP 가이드
    • 스키마 번들과 변환 경고
    • Next.js App Router 연동
    • FastAPI 연동
    • 에러 처리
    • 자주 묻는 질문
    • 추가 리소스
Providers
  • API Reference
    • 아마존 재팬
    • 배달의민족 프로바이더
    • Buyee
    • 캐치테이블 식당 검색 및 예약
    • 차란 커머스
    • Daangn 공개 매물
    • 다이소 상품 및 매장 데이터
    • Danawa price comparison
    • Demaecan
    • Ekitan
    • 여기어때 국내 숙소
    • Google Flights
    • 한강 수위
    • 핫페퍼 구루메
    • 현대카드
    • Jalan
    • 일본 국회 회의록
    • 일본 재난 알림
    • 일본 EDINET 공시
    • 일본 e-Gov 법령
    • 일본 e-Stat
    • 일본 GSI 지오코딩
    • 일본 e-Gov 오픈데이터
    • Japan Post ZIP
    • 일본 공휴일
    • JMA Weather
    • 카카오맵 장소 검색과 길찾기
    • 카카오 T 택시 호출
    • 한국 주소 검색
    • AirKorea Real-time Air Pollution
    • 한국 아파트 전월세 실거래가
    • 한국 아파트 매매 실거래가
    • 나라장터 입찰공고
    • 건축물대장 (Korea Building Register)
    • Korea Business Verify
    • 대한민국 고캠핑
    • 한국 DART 기업 재무정보
    • DART 기업 정보
    • 한눈에 보는 문화정보
    • 한국 재난 알림
    • Korea Emergency Hospital
    • 한국 ETF
    • 한국 전기차 충전소
    • 한국 주유소 유가
    • Korea Holiday
    • Korea Hospital Info
    • Korea Land Price
    • 식약처 의약품 안전정보
    • 식약처 식품 안전정보
    • 쓰레기 배출 정보
    • Korea National Law Search and Lookup
    • NEIS 급식 메뉴
    • Carrier List and Delivery Tracking
    • Korea Pharmacy
    • 한국 인구 통계
    • 한국 주식시장지수
    • 한국 주식시세
    • 한국 열차 시간표
    • 한국 기상청 예보 데이터
    • Korea Weather Forecast
    • 대한민국 복지서비스
    • 창업진흥원 K-Startup
    • LH 청약 공고
    • Market Kurly product data
    • Mercari
    • 모두의주차장
    • 네이버 블로그 검색
    • 네이버 항공권 검색
    • 네이버 지도
    • 네이버 뉴스 검색
    • NOL 숙소
    • 오늘의집 스토어 및 콘텐츠
    • 라쿠텐 이치바
    • 라쿠텐 트래블
    • SEC EDGAR Filings
    • 서울 따릉이
    • 서울 실시간 혼잡도
    • 서울 지하철 실시간 도착
    • Shinhan Bank
    • 신한카드
    • Skiplagged
    • SUUMO
    • Swing Taxi
    • Tabelog
    • TableCheck
    • Weverse Provider
    • 야후! 쇼핑 (일본)
    • Yogiyo
    • 조조타운
APIFuseAPIFuse

에러 처리

APIFuse 에러 응답을 읽고 재시도할 실패와 업스트림 서비스가 거절한 요청을 구분하는 방법.

에러 처리

모든 APIFuse 에러 응답은 세 가지를 알려줍니다: 무슨 일이 있었는지(code, message), 누가 요청을 멈췄는지(source), 동일한 재시도가 성공할 수 있는지(retryable). HTTP 상태 코드를 패턴 매칭하는 대신 이 필드들을 사용하세요.

에러 응답 형태

{
  "error": {
    "code": "UPSTREAM_REJECTED",
    "message": "The requested time slot overlaps an existing reservation.",
    "retryable": false,
    "source": "upstream_rule",
    "fix": "Pick a slot that does not overlap the account's existing reservations.",
    "requestId": "req_1a2b3c"
  }
}
필드의미
code안정적인 기계 판독용 코드. 오퍼레이션별 코드는 각 오퍼레이션 레퍼런스 페이지에 나열됩니다.
message사람이 읽는 요약.
retryablefalse면 동일한 재시도는 성공할 수 없습니다 — 요청을 바꾸세요. true면 나중에 재시도하면 성공할 수 있습니다.
source누가 요청을 멈췄는지 (아래 참조).
fix요청을 성공시키려면 무엇을 바꿔야 하는지 (알 수 있는 경우).
requestId지원팀에 문의할 때 함께 전달하세요.

일부 에러 응답은 source와 retryable을 생략할 수 있습니다. 없을 때는 아래 상태 클래스를 기준으로 처리하세요.

플랫폼 수준 에러(잘못된 Connection ID, 상대 서비스 연결 타임아웃, 취소된 요청)는 같은 필드를 최상위에 담는 평평한 body를 사용합니다: {"error", "code", "message", "action", "retryable", "source", "request_id"}. 공식 SDK는 두 형태를 모두 읽습니다.

누가 요청을 멈췄는가

source의미대응
client요청 자체를 바꿔야 합니다 (잘못된 입력, 없거나 만료된 Connection).요청을 고치거나 다시 연결한 뒤 호출하세요.
upstream_rule상대 서비스가 요청을 이해했고 자체 규칙에 따라 거절했습니다 — 품절, 겹치는 예약, 계정 상태 제한 등.사유를 사용자에게 보여주거나 요청을 바꾸세요. 동일하게 재시도하면 같은 답이 돌아옵니다.
upstream_failure상대 서비스가 오작동했거나 응답하지 않았습니다.백오프를 두고 재시도하세요.
apifuseAPIFuse가 요청을 완료하지 못했습니다.백오프를 두고 재시도하고, 지속되면 requestId와 함께 지원팀에 문의하세요.

상태 클래스

상태분류일반적인 source
400, 401, 404요청을 바꿔야 함client
409, 410, 422상대 서비스가 자체 규칙으로 거절upstream_rule
429레이트 리밋 — Retry-After를 지키세요upstream_rule
502, 504업스트림 오작동 또는 타임아웃upstream_failure
500, 503APIFuse 측 결함apifuse

409는 장애가 아닙니다: 상대 서비스는 정상이며 확정적인 답을 준 것입니다. 재시도할 에러가 아니라 애플리케이션 데이터로 다루세요 (예: "이미 예약된 시간대입니다"를 표시).

안전한 재시도

  • retryable: false 응답은 절대 자동 재시도하지 마세요.
  • 429는 Retry-After 간격 후에, 502/503/504는 지수 백오프로 재시도하세요.
  • 공식 TypeScript/Python SDK는 이 규칙을 자동으로 따르며, 던져진 에러에서 error.retryable과 error.source를 읽을 수 있습니다.
import { ApiFuseClient, ApiFuseError } from "@apifuse/sdk";

const client = new ApiFuseClient({ apiKey: process.env.APIFUSE_API_KEY! });

async function reserve(input: Record<string, unknown>) {
  try {
    return await client.call.invoke("catchtable", "reserve", input);
  } catch (error) {
    if (
      error instanceof ApiFuseError &&
      error.source === "upstream_rule" &&
      error.retryable === false
    ) {
      // 확정적 거절 — 재시도하지 말고 사용자에게 사유를 보여주세요.
      // (429 레이트 리밋도 source가 "upstream_rule"이지만 retryable이라
      // 위 가드가 재시도 경로에 남겨둡니다.)
      return { refused: true, reason: error.message, suggestion: error.fix };
    }
    throw error;
  }
}

On this page

에러 처리에러 응답 형태누가 요청을 멈췄는가상태 클래스안전한 재시도