오류 처리

표준 오류 코드로 오류를 적절히 처리하세요.

오류 응답 형식

모든 API 오류는 오류 코드와 읽기 쉬운 메시지를 포함하는 일관된 JSON 형식을 따릅니다.

{
  "error": {
    "code": "error_code_here",
    "message": "A human-readable description of the error."
  }
}

오류 코드

상태코드설명
401missing_api_key요청에 X-API-Key 헤더가 없습니다.
401invalid_api_key제공된 API 키가 유효하지 않거나 만료되었거나 취소되었습니다.
402quota_exceeded월간 요청 쿼터를 초과했습니다. 플랜을 업그레이드하세요.
422invalid_imageimage 필드가 없거나 유효하지 않은 base64이거나 5MB를 초과합니다.
422invalid_request요청 본문이 유효한 JSON이 아닙니다.
502inference_errorML 추론 서비스를 일시적으로 사용할 수 없습니다. 백오프로 재시도하세요.

오류 응답 예시

API 키 누락 (401)

{
  "error": {
    "code": "missing_api_key",
    "message": "No API key provided. Include your key in the X-API-Key header."
  }
}

잘못된 이미지 (422)

{
  "error": {
    "code": "invalid_image",
    "message": "Image exceeds the maximum size of 5 MB."
  }
}

추론 오류 (502)

{
  "error": {
    "code": "inference_error",
    "message": "ML inference service is temporarily unavailable. Please retry."
  }
}

모범 사례

  • 응답 본문을 파싱하기 전에 항상 HTTP 상태 코드를 확인하세요.
  • 502 오류에 대해 지수 백오프를 구현하세요.
  • 응답 헤더를 통해 쿼터 사용량을 모니터링하세요.
  • 401이나 422 오류는 재시도하지 마세요.
  • 프로그래밍 방식의 오류 처리에는 메시지가 아닌 error.code 필드를 사용하세요.

재시도 예시

일시적 오류에 대한 지수 백오프 JavaScript 예시:

async function analyzePalm(imageBase64, apiKey, retries = 3) {
  for (let attempt = 0; attempt < retries; attempt++) {
    const res = await fetch(
      "https://api.trace-line.site/v1/palm/analyze",
      {
        method: "POST",
        headers: {
          "X-API-Key": apiKey,
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ image: imageBase64 }),
      }
    );

    if (res.ok) return res.json();

    const error = await res.json();

    // Only retry on transient errors
    if (res.status !== 502) throw error;

    // Exponential backoff: 1s, 2s, 4s
    await new Promise((r) =>
      setTimeout(r, 1000 * Math.pow(2, attempt))
    );
  }

  throw new Error("Max retries exceeded");
}