Skip to main content
HemBloggFelhantering i spårnings-API: Så hanterar du ogiltiga spårningsnummer, anropsbegränsningar och återförsök

Felhantering i spårnings-API: Så hanterar du ogiltiga spårningsnummer, anropsbegränsningar och återförsök

17TRACK

Hantera fel i spårnings-API:et genom att skilja mellan ogiltig indata, tillfälliga fel, hastighetsbegränsningar och resultat för försändelsestatus. Avvisa eller korrigera ogiltiga spårningsnummer i stället för att försöka igen utan ändring, samordna förfrågningsvolymen vid begränsningar och försök igen vid tillfälliga fel med begränsad exponentiell backoff och jitter. Innan du upprepar en registrering eller annan skrivförfrågan måste du fastställa om det första försöket lyckades.

Hantering av fel i spårnings-API:et: så hanterar du ogiltiga spårningsnummer

För utvecklare som ansluter spårningsdata till ett orderhanteringssystem, en lagerplattform eller en kundinriktad spårningssida är målet inte bara färre misslyckade förfrågningar. Målet är tillförlitlig insyn i försändelser utan dubbla registreringar, upprepade återförsök, vilseledande leveransmeddelanden eller onödiga supportärenden.

Klassificera felet innan du väljer åtgärd

En spårningsintegration har flera separata resultat att utvärdera: om nätverksförfrågan slutfördes, om API:et accepterade åtgärden, om varje begärt spårningsobjekt lyckades och om försändelsehändelser är tillgängliga. Att behandla alla fyra som en enda lyckades-eller-misslyckades-flagga skapar fel som går att undvika.

Ett lyckat HTTP-svar betyder inte nödvändigtvis att alla objekt i en batch lyckades. Omvänt är en lyckat behandlad sökning utan spårningshändelser inte nödvändigtvis ett API-fel. Granska svarstexten och tillämpa leverantörens dokumenterade betydelse för varje resultat.

TillståndRekommenderad åtgärdFörsöka igen utan ändring?
Felformaterat nummer eller ogiltigt fält i förfråganValidera och korrigera indataNej
Saknade eller ogiltiga autentiseringsuppgifterKontrollera autentiseringsuppgifter, behörigheter och miljöInte förrän de har korrigerats
Svar om hastighetsbegränsningFördröj berört arbete och minska den gemensamma förfrågningsbelastningenEfter den obligatoriska väntetiden, om det är säkert
Tillfälligt tjänstefelTillämpa begränsad backoff och kontrollera om åtgärden är säkerVanligtvis, inom en återförsöksbudget
Timeout efter att en registrering skickatsKontrollera om registreringen finnsInte blint
Godkänd sökning utan försändelsehändelserFölj den dokumenterade spårningslivscykelnAnvänd schemalagd uppdatering, inte snabba återförsök

HTTP-statuskoder är en utgångspunkt, inte ett fullständigt leverantörsspecifikt beslutsträd. RFC 9110 definierar HTTP-semantik, medan RFC 6585 definierar 429 Too Many Requests. Din integration bör också tolka dokumenterade applikationsfelkoder och resultat på objektnivå.

Ogiltiga spårningsnummer: skilj felaktig indata från saknade händelser

”Ogiltigt spårningsnummer” kan beskriva olika problem: en felaktigt formaterad identifierare, en kombination av transportör och nummer som inte stöds, ett obligatoriskt transportörsfält som saknas eller ett annat leverantörsspecifikt valideringsfel. Utgå inte från att ett nummer är ogiltigt enbart för att inga spårningshändelser returneras.

Validera utan att skada identifieraren

  • Lagra spårningsnummer som strängar. Numerisk lagring kan ta bort inledande nollor eller ändra långa identifierare.
  • Bevara den ursprungliga indatan. Behåll ett separat normaliserat värde så att omvandlingar kan granskas.
  • Normalisera försiktigt. Ta vid behov bort omgivande blanksteg, men ta endast bort interna tecken eller ändra skiftläge när dokumenterade regler tillåter det.
  • Kontrollera obligatoriska fält lokalt. Fånga tomma nummer, saknade transportörsidentifierare och ogiltiga förfrågningsstrukturer innan de skickas.
  • Undvik ett universellt reguljärt uttryck för spårningsnummer. En regel som utformats för en transportör kan avvisa giltiga identifierare från en annan.
  • Bekräfta vad fältet innehåller. Ett ordernummer, en lagerreferens och ett spårningsnummer från transportören är inte utbytbara om slutpunkten inte uttryckligen stöder dem.

Om API:et uttryckligen avvisar indatan ska den skickas till korrigering i stället för en automatisk återförsöksloop. Ange en användbar orsak, till exempel ”transportörsidentifierare krävs”, i stället för att reducera alla valideringsproblem till ”spårningen misslyckades”.

Behandla ”inga händelser” som ett separat tillstånd

En försändelse kan ha en spårningsidentifierare innan användbara rörelsehändelser blir tillgängliga. Den korrekta åtgärden beror på API:ets dokumenterade statusmodell och försändelsens sammanhang. Kontrollera om identifieraren kom från fraktsystemet, om transportörsvalet är korrekt och om svaret visar väntande data snarare än avvisad indata.

Använd separata interna tillstånd som input_rejected, awaiting_events och temporarily_unavailable. Dessa är föreslagna applikationstillstånd, inte standardiserade API-värden. De hjälper till att förhindra att ett tillfälligt datagap leder till ett felaktigt kundmeddelande.

Hantera hastighetsbegränsningar över hela integrationen, inte per arbetare

RFC 6585 definierar HTTP 429 som ett svar vid hastighetsbegränsning och tillåter att det innehåller en Retry-After-header. Standarden fastställer ingen universell tillåten mängd eller räknemetod för spårnings-API:er. Begränsningar kan dokumenteras per konto, autentiseringsuppgift, slutpunkt eller annat omfång; använd leverantörens faktiska regler.

RFC 9110 anger två former för Retry-After: ett icke-negativt antal sekunder eller ett HTTP-datum. Tolka båda. Om värdet är ett datum ska du beräkna den återstående väntetiden noggrant och ta hänsyn till skillnader i klockor. Om det saknas eller inte kan användas ska du tillämpa din konfigurerade reservpolicy för backoff.

Det räcker inte att en arbetare sover självständigt när andra arbetare fortsätter att använda samma tillåtna mängd. Placera hastighetskontrollen vid den gemensamma gränsen för den berörda autentiseringsuppgiften eller det berörda kontot. En central schemaläggare, en gemensam token bucket eller motsvarande distribuerad kontroll kan samordna trafiken.

  1. Identifiera det berörda omfånget. Fastställ vilken slutpunkt, autentiseringsuppgift eller vilket konto begränsningen gäller.
  2. Respektera serverns väntetidsinstruktion. Schemalägg inte ett tidigare återförsök än vad ett giltigt Retry-After-värde tillåter.
  3. Fördröj berört köat arbete. Undvik att blockera orelaterad trafik när begränsningarna faktiskt är oberoende.
  4. Minska samtidighet eller förfrågningsfrekvens. Att vänta en gång utan att ändra förfrågningsmönstret kan återskapa samma problem.
  5. Återuppta med mellanrum. Frisläpp inte hela eftersläpningen samtidigt när väntetiden är slut.

När det stöds kan batchning minska antalet förfrågningar, men den måste följa dokumenterade regler för batchstorlek och beräkning. Utgå inte från att en batch förbrukar en enhet av den tillåtna mängden. Använd även webhooks när de finns tillgängliga för att minska onödig polling, samtidigt som du behåller den avstämningsprocess som integrationen kräver.

Använd begränsade återförsök med backoff och jitter

Återförsök är lämpliga när ett fel kan försvinna utan att förfrågan ändras och när det är säkert att upprepa åtgärden. Tillfälliga anslutningsfel och utvalda serverfel kan passa in i den kategorin. En felaktigt formaterad nyttolast, ogiltig autentiseringsuppgift eller ett permanent behörighetsproblem kräver vanligtvis en korrigering i stället.

En praktisk reservlösning är begränsad exponentiell backoff med full jitter:

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)

Här börjar retry_index på noll för det första återförsöket, och ett saknat Retry-After bidrar inte med någon ytterligare minsta väntetid. Detta är implementeringsval, inte en obligatorisk HTTP-algoritm. Välj basfördröjning, tak, försöksgräns och total tidsfrist utifrån din arbetsbelastning och leverantörens vägledning.

Jitter sprider förfrågningar över tid i stället för att låta alla arbetare upprepa dem enligt samma schema. Fördröjningstaket begränsar den exponentiella komponenten; det ska inte åsidosätta en längre, giltig väntetid som servern begärt. Om den väntetiden överskrider jobbets tidsfrist ska jobbet skjutas upp eller avslutas enligt policyn i stället för att försöka igen för tidigt.

Ge varje återförsökskedja en slutpunkt

  • Försöksgräns: begränsa antalet ytterligare förfrågningar.
  • Gräns för förfluten tid: sluta försöka med arbete som har överskridit sitt användbara behandlingsfönster.
  • Tydligt ägarskap: välj vilket lager som styr återförsök så att HTTP-klientens återförsök och köåterförsök inte oväntat multipliceras.
  • Beständig schemaläggning: lagra fördröjda jobb i stället för att förlita dig på långa väntetider i kortlivade processer.
  • Återställningsväg: skicka jobb där återförsöken är slut till en granskningsbar kö för misslyckade jobb med en orsak och nästa åtgärd.

Vid ett långvarigt avbrott kan du överväga en kretsbrytare som tillfälligt pausar rutinanrop och tillåter kontrollerade återställningssonder. Detta är ett mönster för applikationsresiliens och innebär inte att någon viss spårningsleverantör kräver det.

Lös tvetydiga skrivningar innan du skickar dem igen

En timeout innebär att applikationen inte fick ett fullständigt svar. Den bevisar inte att servern avvisade eller aldrig behandlade förfrågan. Denna skillnad är viktig när du registrerar spårningsnummer eller ändrar spårningskonfiguration.

RFC 9110 förklarar idempotenta metoder och varnar för att automatiskt försöka igen med icke-idempotenta förfrågningar utan grund för att veta att upprepning är säker eller att den ursprungliga åtgärden inte tillämpades. Utvärdera den dokumenterade åtgärdssemantiken i stället för att anta att varje spårningsslutpunkt fungerar som en skrivskyddad sökning.

  • Använd en leverantörsdokumenterad idempotensmekanism när den finns, och följ dess regler för omfång och lagringstid.
  • Behåll samma idempotensnyckel vid återförsök av samma logiska åtgärd; utgå inte från att en godtycklig anpassad header kommer att respekteras.
  • Kontrollera den befintliga registreringen innan du upprepar en tvetydig skrivning, om detta stöds.
  • Använd en lokal unikhetsbegränsning som överensstämmer med leverantörens dokumenterade försändelseidentitet.
  • Lagra åtgärdens resultat så att en ny leverans från kön inte automatiskt utlöser ännu en skrivning.

För batchåtgärder ska resultatet för varje objekt sparas. Försök endast igen med objekt som klassificerats som tillfälligt misslyckade och stäm av objekt vars resultat fortfarande är okända. Om hela batchen spelas upp igen kan lyckade åtgärder upprepas och den tillåtna förfrågningsmängden förbrukas i onödan.

Tillämpa policyn på din spårningsleverantör

För en 17TRACK-integration ska du använda Tracking API-sidan och den officiella API-dokumentationen som utgångspunkter för det leverantörsspecifika avtalet. Håll felklassificeraren konfigurerbar i stället för att hårdkoda antaganden från en allmän HTTP-guide.

Bekräfta före implementeringen den relevanta slutpunktens förfrågningsschema, svarskuvert, betydelser för fel på objektnivå, omfång för hastighetsbegränsning, batchbegränsningar och regler för dubbla inskickningar. Om du använder händelseleverans ska du även kontrollera krav på bekräftelse, autentisering och återleverans. Den här guiden föreskriver inte någon numerisk 17TRACK-hastighetsbegränsning, något återförsöksschema eller någon idempotensfunktion.

Registrera varje bekräftad regel i en mappning från leverantörssvar till applikationsåtgärd: korrigera indata, reparera konfigurationen, vänta, stäm av eller eskalera. Ett okänt fel ska bevara diagnostisk kontext och följa en begränsad reservväg, inte automatiskt leda till obegränsade återförsök.

Övervaka återställningskvalitet och testa felvägar

Logga åtgärd, slutpunkt, HTTP-status, applikationsfelkod, försöksnummer, svarstid, nästa schemalagda åtgärd och leverantörens förfrågningsidentifierare när den tillhandahålls. Undvik att registrera API-nycklar, onödig adressinformation eller obegränsade svarstexter. Maskera eller hasha spårningsidentifierare när fullständiga värden inte behövs.

Följ ogiltiga indata, hastighetsbegränsningar, köålder, uttömda återförsök och den senaste lyckade synkroniseringen separat. En integration kan ha låg HTTP-felfrekvens och ändå visa inaktuell försändelseinformation. Kundinriktade sidor bör behålla den senast kända försändelsestatusen och skilja ett uppdateringsfel från ett leveransundantag som rapporterats av transportören.

Testa före lansering felaktig indata, giltiga identifierare utan händelser, båda formerna av Retry-After, saknade headers, partiella batchfel, timeouts efter skrivningar och ny leverans från kön. Simulera även ett avbrott som är tillräckligt långt för att tömma återförsöksbudgeten. Testet är godkänt först när arbetet stoppas eller skjuts upp på ett förutsägbart sätt, lyckade objekt inte spelas upp igen i onödan och misslyckade objekt fortfarande kan återställas.

Vanliga frågor

Bör ett ogiltigt spårningsnummer försöka skickas igen automatiskt?

Inte när API:et uttryckligen avvisar indatan som ogiltig. Korrigera först numret, transportörsvalet eller de obligatoriska fälten. Om svaret i stället innebär att försändelsehändelser ännu inte är tillgängliga ska du använda det dokumenterade uppdateringsflödet i stället för att behandla det som ett valideringsfel.

Betyder HTTP 200 att en batchförfrågan lyckades helt?

Inte nödvändigtvis. Kontrollera leverantörens svarsschema för resultat på åtgärds- och objektnivå. Spara lyckade resultat och isolera fel så att ett återförsök med ett objekt inte i onödan upprepar resten.

Hur många återförsök bör en spårningsintegration tillåta?

Det finns inget universellt antal. Ange både en försöksgräns och en budget för förfluten tid baserat på leverantörens vägledning, åtgärdens säkerhet och hur länge resultatet förblir användbart. En schemalagd synkronisering i bakgrunden kan tåla ett annat återställningsfönster än en interaktiv kundförfrågan.

Bör en timeout omedelbart markera en försändelse som misslyckad?

Nej. En timeout för en förfrågan är ett integrationsresultat, inte en försändelsehändelse. Bevara det senast kända spårningstillståndet, schemalägg säker återställning och undvik att omvandla ett anslutningsproblem till en avisering om misslyckad leverans.

Vad ska hända när återförsöken är slut?

Flytta jobbet till en beständig kö för misslyckade jobb eller granskning tillsammans med dess diagnostiska kontext. Identifiera om återställning kräver korrigerad indata, återställda autentiseringsuppgifter, hjälp från leverantören eller en senare kontrollerad uppspelning. Kassera det inte tyst och starta inte om samma obegränsade återförsökscykel.

Källor

Loading