Penanganan Kesalahan
API Annie Insights menggunakan kode status HTTP standar dan mengembalikan respons kesalahan JSON terstruktur.
Format Respon Kesalahan​
{
"error": "Error Type",
"message": "Human-readable description",
"statusCode": 400
}
Kode Status HTTP​
| Kode | Status | Keterangan | Penyebab Umum |
|---|---|---|---|
| 400 | Permintaan Buruk | Isi permintaan tidak valid atau parameter yang diperlukan tidak ada | PatientID, TimeStamp, atau ImageName tidak ada |
| 401 | Tidak sah | Kunci API tidak valid atau hilang | Nilai header x-api-key salah |
| 422 | Entitas yang Tidak Dapat Diproses | Gambar tidak dapat diproses | Gambar rusak, format tidak didukung, atau konten non-gigi |
| 429 | Terlalu Banyak Permintaan | Batas tarif terlampaui | Terlalu banyak permintaan di jendela saat ini |
| 500 | Kesalahan Server Internal | Kegagalan server yang tidak terduga | Hubungi dukungan jika terus-menerus |
Kesalahan Penanganan​
401 — Tidak sah​
{
"error": "Unauthorized",
"message": "Invalid or missing API key",
"statusCode": 401
}
Perbaikan: Pastikan header x-api-key Anda ada dan berisi kunci yang valid.
429 — Tarif Terbatas​
{
"error": "Too Many Requests",
"message": "Rate limit exceeded. Retry after 60 seconds.",
"statusCode": 429
}
Perbaikan: Terapkan backoff eksponensial. Periksa header Retry-After untuk mengetahui durasi tunggu.
422 — Entitas yang Tidak Dapat Diproses​
{
"error": "Unprocessable Entity",
"message": "The provided image could not be analyzed",
"statusCode": 422
}
Perbaikan: Pastikan gambar adalah gambar gigi JPEG/PNG yang valid dengan resolusi yang memadai.
Strategi Coba Lagi​
Untuk kesalahan sementara (429, 500), terapkan backoff eksponensial:
import time
import requests
def call_api_with_retry(url, headers, body, max_retries=3):
for attempt in range(max_retries):
response = requests.post(url, json=body, headers=headers)
if response.status_code == 200:
return response.json()
if response.status_code in [429, 500]:
wait = 2 ** attempt # 1s, 2s, 4s
time.sleep(wait)
continue
response.raise_for_status()
raise Exception("Max retries exceeded")