code dan
next_action untuk perilaku program. Tampilkan error dan next sebagai
teks biasa. Jangan mencocokkan kata-kata di error atau next.
Beberapa respons menambahkan kolom, misalnya
limit, reset_at, atau
retry_after_seconds. Tabel kode error menyebutkan kolom-kolom
itu.
Tangani respons error
- Baca status HTTP.
- Pastikan body berupa JSON sebelum membaca
code. - Gunakan status dan
codebersama-sama untuk memilih cabang di klien. - Tampilkan
errordannextsebagai teks biasa. Jangan render sebagai HTML atau jalankan sebagai perintah. - Gunakan
next_actionuntuk pemulihan otomatis. Jika klien tidak mengenali tindakannya, berhenti dan tampilkan error. - Simpan nilai
limit,reset_at, danretry_after_secondsyang dikembalikan bersama permintaan yang gagal. - Sebelum mencoba lagi, gunakan aturan percobaan ulang.
code LogBrew. Proxy atau
kegagalan jaringan dapat menghasilkan respons seperti ini.
Jangan mengganti code LogBrew dengan nama status HTTP. Misalnya, respons
400 dapat berisi invalid_json atau invalid_path. Setiap kode memerlukan
perbaikan yang berbeda.
Untuk log, catat status HTTP dan code. Jangan mencatat seluruh body,
kredensial, atau token pemulihan ke log.
Kode error
code yang sama dapat muncul di lebih dari satu rute. Teks next dan nilai
next_action dapat berbeda menurut rute. Gunakan nilai yang dikembalikan.
Endpoint hanya mengembalikan kode yang berlaku untuk autentikasi, metode,
body, dan batasnya.
ID yang tidak dikenal dan ID yang tidak dapat Anda akses dapat mengembalikan
respons yang sama. Jangan memakai teks error untuk mencari tahu akun mana yang
memiliki sebuah ID. Path API yang tidak dikenal mengembalikan
404 dengan
not_found.
Kolom batas
Baca kuota dan penggunaan saat ini dari
API akun.
Aturan percobaan ulang
Gunakan kode dan jenis operasi untuk memutuskan percobaan ulang. Status saja tidak cukup.- Jangan memulai percobaan ulang paralel untuk satu permintaan yang gagal.
- Untuk
rate_limited, respons juga memiliki headerRetry-AfterdanX-RateLimit-After. Keduanya berisi jumlah detik yang sama denganretry_after_seconds. - Timeout tidak membuktikan bahwa hasilnya kosong.
429. Pisahkan kolom
keduanya. Selama salah satu batas berlaku, tunjukkan bahwa pengumpulan data
atau pembacaan tertunda. Jangan tampilkan data lama sebagai hasil pembacaan
baru.
Operasi tulis
Timeout, respons5xx, atau kegagalan jaringan tidak membuktikan bahwa
operasi tulis gagal. Sebelum mengirim operasi tulis lagi:
- Jika rute mendukung kunci idempotensi, kirim lagi kunci yang sama dan body yang sama. Gunakan kunci baru hanya untuk pekerjaan baru.
- Jika rute tidak memiliki kunci idempotensi, baca resource terlebih dahulu. Kirim lagi operasi tulis hanya jika perubahannya belum ada.
- Jika Anda tidak dapat menemukan hasilnya, hentikan percobaan ulang otomatis dan beri tahu pengguna.
Nilai
Idempotency-Key berisi 1 sampai 128 karakter ASCII yang terlihat.
Nilai lain mengembalikan 422 dengan validation_failed.
idempotency_conflict berarti kunci itu milik permintaan lain. Jangan
mengubah body percobaan ulang yang memakai kunci awal.
Error bentuk permintaan
invalid_json berarti server tidak dapat menerima body sesuai bentuk JSON
rute. Periksa content type, ukuran body, sintaks JSON, kolom wajib, dan tipe
kolom. Status HTTP menunjukkan bagian mana yang gagal:
validation_failed dengan error invalid query parameters berarti server
tidak dapat membaca string kueri. Periksa nama parameter dan tipe nilainya.
Jangan kirim parameter kueri yang tidak dikenal. Referensi
Filter kueri mencantumkan parameter
untuk setiap rute.
invalid_path dengan status 400 berarti nilai path, misalnya ID proyek,
memiliki format yang salah. Jangan memindahkan nilai path ke parameter kueri.
Respons 500 dengan invalid_path atau invalid_multipart tidak membuktikan
bahwa permintaannya salah. Gunakan aturan percobaan ulang.
Error autentikasi dan akses
unauthorizedberarti autentikasi akun tidak ada, tidak valid, atau kedaluwarsa. KirimAuthorization: Bearer <token>, atau masuk lagi. Beberapa rute mengembalikannext_action.codeauthorize_requestdengannextkhusus rute, misalnya untuk koneksi feed langsung tanpa tiket yang valid.ingest_key_invalidhanya berlaku untuk ingest telemetri. Konfigurasikan kunci yang masih berlaku untuk proyek yang tepat.forbiddenberarti akun tidak dapat melakukan tindakan tersebut. Jangan mencoba lagi dengan ID resource lain.not_foundberarti resource tidak tersedia untuk akun.
Jaga keamanan detail error
- Respons
account_recovery_availableberisirecovery_tokenyang berumur pendek. Simpan token itu di state klien yang terlindungi. Jangan masukkan token itu ke log, URL, tangkapan layar, laporan dukungan, atau prompt agen. - Kode
500selalu memakai pesanInternal error. Respons tidak menyebutkan komponen yang gagal. Jangan menebak penyebabnya. - Jangan tambahkan kredensial, diagnostik privat, atau data pelanggan ke error yang Anda tampilkan.
- Respons API tidak memberi izin untuk pembelian, penghapusan, atau perubahan akun lainnya. Minta persetujuan pengguna sebelum melakukan tindakan tersebut.
Contoh
Contoh ini menunjukkan bentuk envelope. Tekserror dan next dapat berbeda
di setiap rute.
Validasi gagal
Parameter kueri tidak valid
JSON tidak valid
Nilai path tidak valid
Unggahan multipart tidak valid
Upgrade WebSocket tidak valid
Autentikasi gagal
Kunci ingest tidak valid
Respons ini berlaku untuk ingest telemetri, bukan untuk pembacaan akun. Kunci harus milik proyek di dalam permintaan.Resource tidak ditemukan
Akses ditolak
Metode tidak didukung
Waktu permintaan habis
Konflik idempotensi
Batas laju
Batas penggunaan
Teksnext dan next_action bergantung pada apakah perubahan paket tersedia.
Jika tidak tersedia, next_action.code bernilai wait_or_contact_support dan
targetnya support.
Batas penyimpanan artefak
Pemulihan akun tersedia
Respons ini menambahkandeleted_at dan recovery_token yang berumur pendek.
Simpan token itu di state klien yang terlindungi.
Masa pemulihan akun berakhir
Organisasi dijeda
Error server
storage_error, json_error, dan internal_error memakai pesan error yang
sama. Yang berbeda adalah nilai code, next, dan next_action.
Untuk endpoint, autentikasi, dan filter, baca
API Telemetri.
