Skip to main content
ПочетакБлогRukovanje greškama u Tracking API-ju: Kako upravljati nevažećim brojevima za praćenje, ograničenjima brzine i ponovnim pokušajima

Rukovanje greškama u Tracking API-ju: Kako upravljati nevažećim brojevima za praćenje, ograničenjima brzine i ponovnim pokušajima

17TRACK

Greškama Tracking API-ja upravljajte razdvajanjem nevažećeg unosa, privremenih kvarova, ograničenja brzine i rezultata statusa pošiljke. Odbijte ili ispravite nevažeće brojeve za praćenje umesto da ih ponovo šaljete neizmenjene, uskladite obim zahteva kada se dostigne ograničenje brzine i ponovite privremeno neuspele zahteve uz ograničeno eksponencijalno čekanje i nasumično kašnjenje. Pre ponavljanja registracije ili drugog zahteva za upis, utvrdite da li je prvi pokušaj uspeo.

Upravljanje greškama Tracking API-ja Kako upravljati nevažećim brojevima za praćenje

Za programere koji povezuju podatke o praćenju sa sistemom za upravljanje porudžbinama, platformom skladišta ili stranicom za praćenje namenjenom korisnicima, cilj nije samo smanjenje broja neuspešnih zahteva. Cilj je pouzdana vidljivost pošiljki bez duplih registracija, oluja ponovljenih zahteva, obmanjujućih poruka o isporuci ili nepotrebnih zahteva korisničkoj podršci.

Klasifikujte grešku pre izbora odgovora

Integracija praćenja ima nekoliko odvojenih ishoda koje treba proceniti: da li je mrežni zahtev završen, da li je API prihvatio operaciju, da li je svaka zatražena stavka uspešna i da li su događaji pošiljke dostupni. Tretiranje sva četiri ishoda kao jedne oznake uspeha ili neuspeha stvara greške koje se mogu izbeći.

Uspešan HTTP odgovor ne znači nužno da je svaka stavka u grupnom zahtevu uspešna. Suprotno tome, uspešno obrađen upit bez događaja praćenja nije nužno greška API-ja. Pregledajte telo odgovora i primenite dokumentovano značenje provajdera za svaki rezultat.

UslovPreporučena radnjaPonoviti neizmenjeno?
Neispravan broj ili nevažeće polje zahtevaProverite i ispravite unosNe
Nedostajući ili nevažeći akreditiviProverite akreditive, dozvole i okruženjeTek nakon ispravke
Odgovor o ograničenju brzineOdložite pogođeni posao i smanjite zajedničko opterećenje zahtevimaNakon obaveznog čekanja, ako je bezbedno
Privremeni kvar uslugePrimеnite ograničeno čekanje i proverite bezbednost operacijeObično, u okviru budžeta za ponovne pokušaje
Istek vremena nakon slanja registracijeUskladite da li registracija postojiNe naslepo
Prihvaćen upit bez događaja pošiljkePratite dokumentovani životni ciklus praćenjaKoristite planirano osvežavanje, ne brze ponovne pokušaje

HTTP statusni kodovi predstavljaju početnu tačku, a ne potpunu odluku specifičnu za provajdera. RFC 9110 definiše HTTP semantiku, dok RFC 6585 definiše 429 Too Many Requests. Vaša integracija takođe treba da tumači dokumentovane kodove grešaka aplikacije i rezultate na nivou stavke.

Nevažeći brojevi za praćenje: razlikujte neispravan unos od nedostajućih događaja

„Nevažeći broj za praćenje“ može opisivati različite probleme: neispravan identifikator, nepodržanu kombinaciju prevoznika i broja, nedostajuće obavezno polje prevoznika ili drugi neispravan unos specifičan za provajdera. Nemojte pretpostaviti da je broj nevažeći samo zato što nema događaja praćenja.

Proverite bez oštećivanja identifikatora

  • Čuvajte brojeve za praćenje kao tekstualne vrednosti. Numeričko čuvanje može ukloniti početne nule ili promeniti duge identifikatore.
  • Sačuvajte originalni unos. Čuvajte zasebnu normalizovanu vrednost kako bi transformacije ostale proverljive.
  • Normalizujte oprezno. Uklonite razmake sa početka i kraja kada je to odgovarajuće, ali uklanjajte unutrašnje znakove ili menjajte veličinu slova samo kada to dokumentovana pravila dozvoljavaju.
  • Lokalno proverite obavezna polja. Uhvatite prazne brojeve, nedostajuće identifikatore prevoznika i nevažeće oblike zahteva pre slanja.
  • Izbegavajte univerzalni regex za broj za praćenje. Pravilo osmišljeno za jednog prevoznika može odbiti važeće identifikatore drugog.
  • Potvrdite šta polje sadrži. Broj porudžbine, referenca skladišta i broj za praćenje prevoznika nisu međusobno zamenljivi osim ako ih krajnja tačka izričito podržava.

Ako API izričito odbije unos, usmerite ga na ispravku umesto u automatsku petlju ponovnih pokušaja. Uključite koristan razlog, kao što je „identifikator prevoznika je obavezan“, umesto da svaki problem validacije svedete na „praćenje nije uspelo“.

Tretirajte „nema događaja“ kao zasebno stanje

Pošiljka može imati identifikator za praćenje pre nego što korisni događaji kretanja postanu dostupni. Odgovarajuća reakcija zavisi od dokumentovanog modela statusa API-ja i konteksta pošiljke. Proverite da li je identifikator došao iz sistema za slanje, da li je izbor prevoznika ispravan i da li odgovor ukazuje na podatke na čekanju, a ne na odbijen unos.

Koristite različita interna stanja kao što su input_rejected, awaiting_events i temporarily_unavailable. To su predložena stanja aplikacije, a ne standardizovane vrednosti API-ja. Ona pomažu da privremeni nedostatak podataka ne postane netačna poruka korisniku.

Upravljajte ograničenjima brzine na nivou integracije, a ne po radniku

RFC 6585 definiše HTTP 429 kao odgovor zbog ograničenja brzine i dozvoljava da sadrži zaglavlje Retry-After. Standard ne utvrđuje univerzalno ograničenje ili način obračuna za API za praćenje. Ograničenja mogu biti dokumentovana po nalogu, akreditivu, krajnjoj tački ili drugom obuhvatu; koristite stvarna pravila provajdera.

RFC 9110 navodi dva oblika za Retry-After: nenegativan broj sekundi ili HTTP datum. Obradite oba oblika. Ako je vrednost datum, pažljivo izračunajte preostalo čekanje i uzmite u obzir razlike u satovima. Ako nedostaje ili nije upotrebljiva, primenite konfigurisanu rezervnu politiku čekanja.

Nije dovoljno da jedan radnik samostalno spava dok drugi radnici nastavljaju da koriste isto ograničenje. Kontrolu brzine postavite na zajedničku granicu za odgovarajući akreditiv ili nalog. Centralni planer, zajednički token bucket ili ekvivalentna distribuirana kontrola mogu uskladiti taj saobraćaj.

  1. Identifikujte pogođeni obuhvat. Utvrdite na koju krajnju tačku, akreditiv ili nalog se ograničenje odnosi.
  2. Poštujte uputstvo servera o čekanju. Ne zakazujte raniji ponovni pokušaj od onoga što važeća vrednost Retry-After dozvoljava.
  3. Odložite pogođeni posao u redu. Izbegavajte blokiranje nepovezanog saobraćaja kada su ograničenja zaista nezavisna.
  4. Smanjite konkurentnost ili učestalost zahteva. Jednokratno čekanje bez promene obrasca zahteva može ponovo izazvati isti problem.
  5. Nastavite sa razmacima. Kada čekanje istekne, nemojte istovremeno osloboditi čitav zaostatak.

Gde je podržano, grupno slanje može smanjiti broj zahteva, ali mora poštovati dokumentovana pravila o veličini grupa i obračunu. Nemojte pretpostaviti da jedna grupa troši jednu jedinicu ograničenja. Isto tako, koristite webhooks gde su dostupni kako biste smanjili nepotrebno periodično ispitivanje, uz zadržavanje procesa usklađivanja koji vaša integracija zahteva.

Koristite ograničene ponovne pokušaje uz čekanje i nasumično kašnjenje

Ponovni pokušaji su odgovarajući kada greška može nestati bez promene zahteva i kada je ponavljanje operacije bezbedno. Privremeni kvarovi veze i odabrane greške servera mogu spadati u tu kategoriju. Neispravan sadržaj, nevažeći akreditiv ili trajni problem sa dozvolama uglavnom zahtevaju ispravku.

Praktična rezervna opcija je ograničeno eksponencijalno čekanje sa potpunim nasumičnim kašnjenjem:

backoff_window = min(max_delay, base_delay * 2^retry_index)
jitter_delay = random(0, backoff_window)
next_delay = max(valid_retry_after_delay, jitter_delay)

Ovde retry_index počinje od nule za prvi ponovni pokušaj, a odsustvo Retry-After ne dodaje minimalno čekanje. Ovo su izbori implementacije, a ne obavezni HTTP algoritam. Izaberite osnovno čekanje, gornju granicu, ograničenje pokušaja i ukupni rok prema svom opterećenju i smernicama provajdera.

Nasumično kašnjenje raspoređuje zahteve kroz vreme umesto da ih svaki radnik ponavlja po istom rasporedu. Gornja granica kašnjenja ograničava eksponencijalnu komponentu; ne treba da nadjača duže, važeće čekanje koje zahteva server. Ako to čekanje premašuje rok vašeg posla, odložite ili prekinite posao u skladu sa politikom, umesto da pokušate prerano.

Svaki lanac ponovnih pokušaja mora imati krajnju tačku

  • Ograničenje pokušaja: ograničite broj dodatnih zahteva.
  • Ograničenje proteklog vremena: prestanite sa ponavljanjem posla koji je premašio svoj koristan vremenski okvir obrade.
  • Jasno vlasništvo: izaberite sloj koji kontroliše ponovne pokušaje kako se pokušaji HTTP klijenta i reda ne bi neočekivano umnožili.
  • Trajno zakazivanje: čuvajte odložene poslove umesto da se oslanjate na duga spavanja unutar kratkotrajnih procesa.
  • Put oporavka: pošaljite iscrpljene poslove u pregledni red neuspešnih poslova sa razlogom i sledećom radnjom.

Tokom dugotrajnog prekida rada razmotrite prekidač kola koji privremeno pauzira rutinske pozive i dozvoljava kontrolisane probe oporavka. Ovo je obrazac otpornosti aplikacije, a ne dokaz da ga neki konkretni provajder praćenja zahteva.

Razrešite nejasne upise pre ponovnog slanja

Istek vremena znači da vaša aplikacija nije primila potpun odgovor. To ne dokazuje da je server odbio zahtev ili da ga nikada nije obradio. Ova razlika je važna pri registraciji brojeva za praćenje ili promeni konfiguracije praćenja.

RFC 9110 objašnjava idempotentne metode i upozorava protiv automatskog ponavljanja ne-idempotentnih zahteva bez osnova za zaključak da je ponavljanje bezbedno ili da prvobitna operacija nije primenjena. Procenite dokumentovanu semantiku operacije umesto da pretpostavite da se svaka krajnja tačka za praćenje ponaša kao upit samo za čitanje.

  • Koristite mehanizam idempotentnosti koji dokumentuje provajder, kada je dostupan, poštujući njegova pravila obuhvata i zadržavanja.
  • Zadržite isti ključ idempotentnosti za ponovne pokušaje iste logičke operacije; nemojte pretpostaviti da će proizvoljno prilagođeno zaglavlje biti prihvaćeno.
  • Ako je podržano, proverite postojeću registraciju pre ponavljanja nejasnog upisa.
  • Koristite lokalno ograničenje jedinstvenosti usklađeno sa dokumentovanim identitetom pošiljke provajdera.
  • Sačuvajte ishod operacije kako ponovna isporuka iz reda ne bi automatski pokrenula još jedan upis.

Kod grupnih operacija sačuvajte rezultat svake stavke. Ponovite samo stavke klasifikovane kao privremeno neuspešne, a uskladite stavke čiji ishodi ostaju nepoznati. Ponovno pokretanje čitave grupe može ponoviti uspešan posao i nepotrebno potrošiti ograničenje zahteva.

Primenite politiku na svog provajdera praćenja

Za integraciju sa 17TRACK-om koristite stranicu Tracking API-ja i zvaničnu API dokumentaciju kao polazne tačke za ugovor specifičan za provajdera. Klasifikator grešaka treba da bude podesiv, umesto da se pretpostavke iz opšteg HTTP vodiča ugrađuju bez izmene.

Pre implementacije potvrdite šemu zahteva odgovarajuće krajnje tačke, omot odgovora, značenja grešaka na nivou stavke, obuhvat ograničenja brzine, ograničenja grupa i pravila za duple prijave. Ako koristite dostavljanje događaja, proverite i zahteve za potvrdu prijema, autentifikaciju i ponovnu dostavu. Ovaj vodič ne propisuje numeričko ograničenje brzine 17TRACK-a, raspored ponovnih pokušaja niti funkciju idempotentnosti.

Zabeležite svako potvrđeno pravilo u mapiranju od odgovora provajdera do radnje aplikacije: ispravite unos, popravite konfiguraciju, sačekajte, uskladite ili eskalirajte. Neprepoznata greška treba da sačuva dijagnostički kontekst i da prati ograničeni rezervni put, a ne da podrazumevano pokrene neograničene ponovne pokušaje.

Pratite kvalitet oporavka i testirajte putanje grešaka

Beležite operaciju, krajnju tačku, HTTP status, kod greške aplikacije, broj pokušaja, latenciju, sledeću zakazanu radnju i identifikator zahteva provajdera kada je dostavljen. Izbegavajte beleženje API ključeva, nepotrebnih podataka o adresi ili neograničenih tela odgovora. Maskirajte ili heširajte identifikatore za praćenje kada pune vrednosti nisu potrebne.

Odvojeno pratite stope nevažećih unosa, ograničavanje brzine, starost reda, iscrpljene ponovne pokušaje i poslednju uspešnu sinhronizaciju. Integracija može imati nisku stopu HTTP grešaka, a da i dalje prikazuje zastarele informacije o pošiljci. Stranice namenjene korisnicima treba da zadrže poslednji poznati status pošiljke i da razlikuju neuspeh osvežavanja od izuzetka u isporuci koji je prijavio prevoznik.

Pre objavljivanja testirajte neispravan unos, važeće identifikatore bez događaja, oba oblika Retry-After, nedostajuća zaglavlja, delimične neuspehe grupa, isteke vremena nakon upisa i ponovnu isporuku iz reda. Takođe simulirajte prekid rada dovoljno dug da iscrpi budžet za ponovne pokušaje. Test je uspešan samo kada se posao predvidljivo zaustavi ili odloži, kada se uspešne stavke ne ponavljaju nepotrebno i kada neuspešne stavke ostanu dostupne za oporavak.

ČPP

Da li nevažeći broj za praćenje treba automatski ponavljati?

Ne kada API izričito odbije unos kao nevažeći. Najpre ispravite broj, izbor prevoznika ili obavezna polja. Ako odgovor umesto toga znači da događaji pošiljke još nisu dostupni, koristite dokumentovani tok osvežavanja, a ne tretirajte to kao grešku validacije.

Da li HTTP 200 znači da je grupni zahtev u potpunosti uspeo?

Ne nužno. Proverite šemu odgovora provajdera za rezultate na nivou operacije i stavke. Sačuvajte uspehe i izdvojite greške kako ponavljanje jedne stavke ne bi nepotrebno ponovilo ostale.

Koliko ponovnih pokušaja treba dozvoliti integraciji praćenja?

Ne postoji univerzalan broj. Postavite i ograničenje pokušaja i vremenski budžet na osnovu smernica provajdera, bezbednosti operacije i toga koliko dugo rezultat ostaje koristan. Zakazana sinhronizacija u pozadini može podneti drugačiji vremenski okvir oporavka od interaktivnog zahteva korisnika.

Da li istek vremena treba odmah označiti pošiljku kao neuspešnu?

Ne. Istek vremena zahteva je ishod integracije, a ne događaj pošiljke. Sačuvajte poslednje poznato stanje praćenja, zakažite bezbedan oporavak i izbegavajte pretvaranje problema sa povezivanjem u obaveštenje o neuspešnoj isporuci.

Šta treba da se dogodi kada se ponovni pokušaji iscrpe?

Premestite posao u trajni red neuspešnih poslova ili red za pregled zajedno sa dijagnostičkim kontekstom. Utvrdite da li oporavak zahteva ispravljen unos, obnovljene akreditive, pomoć provajdera ili kasnije kontrolisano ponovno pokretanje. Nemojte ga tiho odbaciti niti ponovo pokretati isti neograničeni ciklus pokušaja.

Izvori

Loading