エラーハンドリング
標準エラーコードでエラーを適切に処理します。
エラーレスポンス形式
すべてのAPIエラーはエラーコードと人間が読めるメッセージを含む一貫したJSON形式に従います。
{
"error": {
"code": "error_code_here",
"message": "A human-readable description of the error."
}
}エラーコード
| ステータス | コード | 説明 |
|---|---|---|
401 | missing_api_key | リクエストにX-API-Keyヘッダーが含まれていません。 |
401 | invalid_api_key | 提供されたAPIキーが無効、期限切れ、または取り消されています。 |
402 | quota_exceeded | 月間リクエストクォータを超過しました。プランをアップグレードしてください。 |
422 | invalid_image | imageフィールドが不足、無効なbase64、または5MBを超えています。 |
422 | invalid_request | リクエストボディが有効なJSONではありません。 |
502 | inference_error | ML推論サービスが一時的に利用できません。バックオフで再試行してください。 |
エラーレスポンスの例
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エラーには指数バックオフを実装してください(推論サービスがコールドスタート中の可能性があります)。
- レスポンスヘッダーでクォータ使用量を監視し、予期しない402エラーを避けましょう。
- 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");
}