CuanTuanDokumentasi

Ralat

Satu bentuk untuk setiap kegagalan, dengan kod yang tidak berubah.

Setiap jawapan membawa medan ok. Semaknya dahulu, sebelum membaca data.

Jawapan gagal
{
  "ok": false,
  "code": "SKOP_TIDAK_CUKUP",
  "message": "Kunci ini tiada skop \"order.read\". Tambah skop itu pada kunci di panel admin."
}
Bercabanglah pada code, jangan pada message. Ayat ditulis untuk manusia dan akan berubah apabila seseorang memperbaiki perkataannya; kod tidak. Integrasi yang membandingkan teks akan rosak pada hari kami membetulkan satu huruf — dan rosaknya senyap, kerana cabang else biasanya bermakna "anggap berjaya".

Senarai kod

KodHTTPSebabCara membetulkan
TIADA_KEBENARAN401Kunci tiada, salah bentuk, tidak dikenali, atau sudah dibatalkan.Semak pengepala Authorization. Kalau kunci hilang, buat yang baharu.
SKOP_TIDAK_CUKUP403Kunci sah, tetapi tiada skop untuk endpoint ini.Buat kunci baharu dengan skop yang disenaraikan pada endpoint itu. Skop tidak boleh ditambah pada kunci sedia ada.
PARAMETER_SALAH400Parameter wajib tiada, atau nilainya di luar senarai yang dibenarkan.Mesej menyebut parameter mana. Semak rujukan endpoint.
TIDAK_DIJUMPAI404Rekod tiada — ATAU ia milik kedai lain.Sengaja tidak dibezakan: memberitahu bahawa rekod itu wujud tetapi milik orang lain sudah merupakan kebocoran.
TERLALU_BANYAK429Had kadar dicapai.Tunggu sehingga masa dalam pengepala Retry-After.
BELUM_DIKONFIGURASI503Pelayan belum mempunyai kunci aplikasi, jadi kunci API tidak boleh disahkan.Masalah pada pelayan kami, bukan pada kunci anda. Hubungi pentadbir kedai.
RALAT_PELAYAN500Ralat tidak dijangka.Cuba lagi. Kalau berulang, laporkan beserta masa dan endpointnya.

Mengendalikannya

JavaScript
async function panggil(laluan, kunci) {
  const r = await fetch(laluan, { headers: { Authorization: `Bearer ${kunci}` } });
  const body = await r.json();

  if (body.ok) return body;

  switch (body.code) {
    case "TERLALU_BANYAK": {
      const tunggu = Number(r.headers.get("retry-after") || 60);
      await new Promise((s) => setTimeout(s, tunggu * 1000));
      return panggil(laluan, kunci);
    }
    case "TIADA_KEBENARAN":
    case "SKOP_TIDAK_CUKUP":
      // Mencuba lagi tidak akan menolong. Beritahu manusia.
      throw new Error(`Kunci bermasalah: ${body.message}`);
    default:
      throw new Error(`${body.code}: ${body.message}`);
  }
}

Perhatikan bahagian yang TIDAK dicuba semula. Kunci yang salah tidak menjadi betul dengan menunggu, dan mencuba semula selama-lamanya hanya menyembunyikan masalahnya daripada orang yang boleh membetulkannya.