BoxLatviaIzstrādātājiem
Pieprasīt piekļuvi
Pamācības

Ierobežojumi un laba prakse

Ko API ierobežo un kā izveidot integrāciju, kas paliek šajās robežās.

#Ierobežojumi

IerobežojumsVērtība
Pieprasījuma izmērs27 MB
Attēli5 faili vienā pieprasījumā, katrs līdz 5 MB; JPEG, PNG, WebP vai GIF; ne vairāk kā 20 vienai telpai vai lokācijai
Saraksta lapas lielums1 līdz 200 (noklusējums 50)
Piekļuves tokena derīgums15 minūtes
Neveiksmīgas autentifikācijas10 piecās minūtēs no vienas IP adreses, pēc tam 429
Idempotency-Key1 līdz 200 rakstzīmes; atceras 24 stundas
Teksta laukiLokācijas nosaukums 100, apraksts un adrese 250; telpas nosaukums un apraksts 255; external_id 100 rakstzīmes
Laiks vienam pieprasījumamDažas sekundes. Pieprasījums, kas ilgst pārāk ilgi, tiek atbildēts ar 503.
Pieprasījumu biežums
Šajā izmēģinājuma versijā nav stingra pieprasījumu biežuma ierobežojuma, un ierobežojumi var tikt ieviesti vēlāk. Lūdzu, esiet saprātīgi: dažus pieprasījumus sekundē pietiek, un grupēšana ar PUT …/by-external-id/… ir labāka nekā visu nolasīt pirms katras ierakstīšanas.

#Kataloga sinhronizēšana

  1. Katrai lokācijai un telpai glabājiet savu identifikatoru kā external_id.
  2. Kad jūsu sistēmā kaut kas mainās, izsauciet PUT /v1/locations/by-external-id/{id} vai PUT /v1/boxes/by-external-id/{id} ar mainītajiem laukiem.
  3. Pieejamībai sūtiet pilnu pašreizējo skaitli (available_units), nekad nevis izmaiņu: klienti var rezervēt, kamēr darbojas jūsu datu plūsma.
  4. Iesniedziet jaunas telpas izskatīšanai, kad to saraksts missing ir tukšs.
  5. Atsauces sarakstus nolasiet ne biežāk kā reizi dienā.

#Atkārtošana

Atkārtojiet pēc gaidīšanas laika beigām, 5xx un 429, ar pieaugošām pauzēm un to pašu Idempotency-Key:

JavaScript
async function send(url, options, tries = 5) {
  const key = crypto.randomUUID();                       // viena atslēga katrai darbībai
  for (let attempt = 0; attempt < tries; attempt++) {
    try {
      const res = await fetch(url, {
        ...options,
        headers: { ...options.headers, "Idempotency-Key": key },
      });
      if (res.status < 500 && res.status !== 429) return res; // gatavs (vai īsta kļūda, kas jālabo)
      const wait = Number(res.headers.get("Retry-After")) * 1000 || 2 ** attempt * 1000;
      await new Promise((r) => setTimeout(r, wait));
    } catch {
      await new Promise((r) => setTimeout(r, 2 ** attempt * 1000)); // tīkla kļūda
    }
  }
  throw new Error("Atmetam pēc " + tries + " mēģinājumiem");
}

#Laba prakse