Skip to main content
HomeBlogGidsenFoutafhandeling van de Tracking API: omgaan met ongeldige trackingnummers, snelheidslimieten en herpogingen

Foutafhandeling van de Tracking API: omgaan met ongeldige trackingnummers, snelheidslimieten en herpogingen

17TRACK

Behandel fouten in de tracking-API door ongeldige invoer, tijdelijke storingen, snelheidslimieten en resultaten van de verzendstatus van elkaar te scheiden. Wijs ongeldige trackingnummers af of corrigeer ze in plaats van ze ongewijzigd opnieuw te proberen, stem het aanvraagvolume af wanneer er een snelheidslimiet geldt en probeer tijdelijke storingen opnieuw met begrensde exponentiële back-off en jitter. Stel voordat je een registratie- of ander schrijfverzoek herhaalt vast of de eerste poging is geslaagd.

Foutafhandeling van de tracking-API: hoe om te gaan met ongeldige trackingnummers

Voor ontwikkelaars die trackinggegevens koppelen aan een orderbeheersysteem, magazijnplatform of klantgerichte trackingpagina, is het doel niet simpelweg minder mislukte aanvragen. Het gaat om betrouwbare zichtbaarheid van zendingen zonder dubbele registraties, retry-stormen, misleidende bezorgberichten of onnodige supporttickets.

Classificeer de fout voordat je een reactie kiest

Een trackingintegratie heeft verschillende afzonderlijke uitkomsten die moeten worden beoordeeld: of het netwerkverzoek is voltooid, of de API de bewerking heeft geaccepteerd, of elk aangevraagd trackingitem is geslaagd en of verzendevents beschikbaar zijn. Door deze vier aspecten als één enkele succes-of-mislukt-vlag te behandelen, ontstaan vermijdbare fouten.

Een HTTP-succesrespons betekent niet noodzakelijk dat elk item in een batch is geslaagd. Omgekeerd is een succesvol verwerkte zoekopdracht zonder trackingevents niet noodzakelijk een API-fout. Controleer de response body en pas de gedocumenteerde betekenis van de provider toe op elk resultaat.

VoorwaardeAanbevolen actieOngewijzigd opnieuw proberen?
Verkeerd gevormd nummer of ongeldig aanvraagveldValideer en corrigeer de invoerNee
Ontbrekende of ongeldige inloggegevensControleer inloggegevens, rechten en omgevingNiet totdat dit is gecorrigeerd
Respons wegens snelheidslimietStel het betrokken werk uit en verlaag de gedeelde aanvraagdrukNa de vereiste wachttijd, indien veilig
Tijdelijke servicestoringPas begrensde back-off toe en controleer of de bewerking veilig isMeestal, binnen een retrybudget
Time-out na het indienen van een registratieControleer of de registratie bestaatNiet blindelings
Geaccepteerde zoekopdracht zonder verzendeventsVolg de gedocumenteerde trackinglevenscyclusGebruik geplande vernieuwing, geen snelle retries

HTTP-statuscodes bieden een uitgangspunt, geen volledige providerspecifieke beslisboom. RFC 9110 definieert HTTP-semantiek, terwijl RFC 6585 429 Too Many Requests definieert. Je integratie moet ook gedocumenteerde applicatiefoutcodes en resultaten op itemniveau interpreteren.

Ongeldige trackingnummers: onderscheid slechte invoer van ontbrekende events

“Ongeldig trackingnummer” kan verschillende problemen beschrijven: een verkeerd gevormde identifier, een niet-ondersteunde combinatie van vervoerder en nummer, een ontbrekend verplicht vervoerdersveld of een andere providerspecifieke validatiefout. Ga er niet van uit dat een nummer ongeldig is alleen omdat er geen trackingevents worden geretourneerd.

Valideer zonder de identifier te beschadigen

  • Sla trackingnummers op als tekenreeksen. Numerieke opslag kan voorloopnullen verwijderen of lange identifiers wijzigen.
  • Bewaar de oorspronkelijke invoer. Houd een afzonderlijke genormaliseerde waarde bij, zodat transformaties controleerbaar blijven.
  • Normaliseer voorzichtig. Verwijder waar passend omringende witruimte, maar verwijder interne tekens of wijzig hoofdletters alleen wanneer gedocumenteerde regels dit toestaan.
  • Controleer verplichte velden lokaal. Onderschep lege nummers, ontbrekende vervoerdersidentifiers en ongeldige aanvraagstructuren voordat je ze verzendt.
  • Vermijd een universele regex voor trackingnummers. Een regel die voor één vervoerder is ontworpen, kan geldige identifiers van een andere vervoerder afwijzen.
  • Bevestig wat het veld bevat. Een ordernummer, magazijnreferentie en trackingnummer van de vervoerder zijn niet uitwisselbaar, tenzij het eindpunt dit expliciet ondersteunt.

Als de API de invoer expliciet afwijst, stuur deze dan naar correctie in plaats van naar een automatische retrylus. Geef een bruikbare reden, zoals “vervoerdersidentifier vereist”, in plaats van elk validatieprobleem te reduceren tot “tracking mislukt”.

Behandel “geen events” als een afzonderlijke status

Een zending kan al een trackingidentifier hebben voordat bruikbare verplaatsingsevents beschikbaar komen. De juiste reactie hangt af van het gedocumenteerde statusmodel van de API en de context van de zending. Controleer of de identifier afkomstig is van het verzendsysteem, of de vervoerdersselectie correct is en of de respons wijst op gegevens die nog in behandeling zijn in plaats van op afgewezen invoer.

Gebruik afzonderlijke interne statussen zoals input_rejected, awaiting_events en temporarily_unavailable. Dit zijn voorgestelde applicatiestatussen, geen gestandaardiseerde API-waarden. Ze helpen voorkomen dat een tijdelijke gegevenslacune leidt tot een onjuist klantbericht.

Beheer snelheidslimieten voor de hele integratie, niet per worker

RFC 6585 definieert HTTP 429 als een respons wegens snelheidsbeperking en staat toe dat deze een Retry-After-header bevat. De standaard stelt geen universele limiet of telmethode voor tracking-API’s vast. Limieten kunnen worden gedocumenteerd per account, inloggegeven, eindpunt of andere scope; gebruik de werkelijke regels van de provider.

RFC 9110 specificeert twee vormen voor Retry-After: een niet-negatief aantal seconden of een HTTP-datum. Parseer beide. Als de waarde een datum is, bereken dan zorgvuldig de resterende wachttijd en houd rekening met klokverschillen. Als de waarde ontbreekt of onbruikbaar is, pas je geconfigureerde fallbackbeleid voor back-off toe.

Een worker die zelfstandig slaapt, is niet voldoende wanneer andere workers dezelfde limiet blijven gebruiken. Plaats de snelheidsregeling op de gedeelde grens voor het betreffende inloggegeven of account. Een centrale scheduler, gedeelde tokenbucket of gelijkwaardige gedistribueerde regeling kan dit verkeer coördineren.

  1. Identificeer de betrokken scope. Bepaal op welk eindpunt, inloggegeven of account de limiet van toepassing is.
  2. Respecteer de wach instructie van de server. Plan geen eerdere retry dan een geldige Retry-After-waarde toestaat.
  3. Stel betrokken werk in de wachtrij uit. Vermijd het blokkeren van niet-gerelateerd verkeer wanneer limieten daadwerkelijk onafhankelijk zijn.
  4. Verlaag de gelijktijdigheid of aanvraagfrequentie. Eenmalig wachten zonder het aanvraagpatroon te wijzigen kan hetzelfde probleem opnieuw veroorzaken.
  5. Hervat met tussenpozen. Laat niet de volledige achterstand tegelijk los wanneer de wachttijd voorbij is.

Waar batching wordt ondersteund, kan dit het aantal aanvragen verminderen, maar het moet voldoen aan de gedocumenteerde regels voor batchgrootte en telling. Ga er niet van uit dat één batch één eenheid van de limiet verbruikt. Gebruik waar beschikbaar ook webhooks om onnodig pollen te verminderen, terwijl je het reconciliatieproces behoudt dat je integratie nodig heeft.

Gebruik begrensde retries met back-off en jitter

Retries zijn geschikt wanneer een fout kan verdwijnen zonder de aanvraag te wijzigen en het veilig is om de bewerking te herhalen. Tijdelijke verbindingsfouten en bepaalde serverfouten kunnen in die categorie vallen. Een verkeerd gevormde payload, ongeldige inloggegevens of een permanent rechtenprobleem vereist doorgaans een correctie.

Een praktische fallback is afgekapt exponentieel oplopende back-off met volledige 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)

Hier begint retry_index bij nul voor de eerste retry en draagt een ontbrekende Retry-After geen extra minimale wachttijd bij. Dit zijn implementatiekeuzes, geen vereist HTTP-algoritme. Kies de basisvertraging, limiet, pogingslimiet en totale deadline op basis van je werklast en de richtlijnen van de provider.

Jitter spreidt aanvragen in de tijd in plaats van dat elke worker ze volgens hetzelfde schema herhaalt. De vertragingslimiet begrenst het exponentiële onderdeel; deze mag een langere, geldige door de server gevraagde wachttijd niet overschrijven. Als die wachttijd je jobdeadline overschrijdt, stel de job dan uit of beëindig deze volgens het beleid, in plaats van te vroeg opnieuw te proberen.

Geef elke retryketen een eindpunt

  • Pogingslimiet: begrens het aantal extra aanvragen.
  • Limiet voor verstreken tijd: stop met opnieuw proberen van werk dat het bruikbare verwerkingsvenster heeft overschreden.
  • Expliciet eigenaarschap: bepaal welke laag retries beheert, zodat retries van de HTTP-client en de wachtrij zich niet onverwacht vermenigvuldigen.
  • Duurzame planning: sla vertraagde jobs op in plaats van te vertrouwen op lange slaapperioden in kortlevende processen.
  • Herstelpad: stuur uitgeputte jobs naar een controleerbare wachtrij voor mislukte jobs met een reden en volgende actie.

Overweeg tijdens een aanhoudende storing een circuit breaker die routinematige oproepen tijdelijk pauzeert en gecontroleerde herstelprobes toestaat. Dit is een patroon voor applicatieresilience en geen bewijs dat een specifieke trackingprovider dit vereist.

Los onduidelijke schrijfbewerkingen op voordat je ze opnieuw verzendt

Een time-out betekent dat je applicatie geen volledige respons heeft ontvangen. Het bewijst niet dat de server de aanvraag heeft afgewezen of nooit heeft verwerkt. Dit onderscheid is belangrijk bij het registreren van trackingnummers of het wijzigen van trackingconfiguratie.

RFC 9110 legt idempotente methoden uit en waarschuwt ervoor niet-idempotente aanvragen niet automatisch opnieuw te proberen zonder basis om te weten dat herhaling veilig is of dat de oorspronkelijke bewerking niet is toegepast. Beoordeel de gedocumenteerde semantiek van de bewerking in plaats van aan te nemen dat elk trackingeindpunt zich gedraagt als een alleen-lezen zoekopdracht.

  • Gebruik indien beschikbaar een door de provider gedocumenteerd idempotentiemechanisme en volg de scope- en bewaartermijnen daarvan.
  • Gebruik dezelfde idempotentiesleutel voor retries van dezelfde logische bewerking; ga er niet van uit dat een willekeurige aangepaste header wordt gehonoreerd.
  • Controleer, indien ondersteund, de bestaande registratie voordat je een onduidelijke schrijfbewerking herhaalt.
  • Gebruik een lokale uniciteitsbeperking die aansluit bij de gedocumenteerde verzendidentiteit van de provider.
  • Sla de uitkomst van de bewerking op, zodat een nieuwe levering van een queue niet automatisch een nieuwe schrijfbewerking activeert.

Sla bij batchbewerkingen het resultaat van elk item op. Probeer alleen items opnieuw die als tijdelijk mislukt zijn geclassificeerd en reconcilieer items waarvan de uitkomst onbekend blijft. De volledige batch opnieuw afspelen kan geslaagd werk herhalen en onnodig aanvraaglimiet verbruiken.

Pas het beleid toe op je trackingprovider

Gebruik voor een 17TRACK-integratie de Tracking API-pagina en de officiële API-documentatie als uitgangspunt voor het providerspecifieke contract. Houd je foutclassificatie configureerbaar in plaats van aannames uit een algemene HTTP-handleiding hard te coderen.

Bevestig vóór de implementatie het aanvraagschema van het relevante eindpunt, de response-envelop, de betekenissen van fouten op itemniveau, de scope van de snelheidslimiet, batchbeperkingen en regels voor dubbele indieningen. Controleer bij het gebruik van eventlevering ook de vereisten voor bevestiging, authenticatie en nieuwe levering. Deze handleiding schrijft geen numerieke 17TRACK-snelheidslimiet, retryplanning of idempotentiefunctie voor.

Leg elke bevestigde regel vast in een koppeling van providerrespons naar applicatieactie: invoer corrigeren, configuratie herstellen, wachten, reconciliëren of escaleren. Een niet-herkende fout moet diagnostische context behouden en een begrensd fallbackpad volgen, niet standaard leiden tot onbeperkte retries.

Monitor de kwaliteit van herstel en test foutpaden

Log de bewerking, het eindpunt, de HTTP-status, de applicatiefoutcode, het pogingsnummer, de latentie, de volgende geplande actie en de provider-aanvraagidentifier wanneer deze wordt verstrekt. Vermijd het vastleggen van API-sleutels, onnodige adresgegevens of onbeperkte response bodies. Maskeer of hash trackingidentifiers wanneer volledige waarden niet nodig zijn.

Houd percentages van ongeldige invoer, throttling, wachtrijleeftijd, uitgeputte retries en de laatste geslaagde synchronisatie afzonderlijk bij. Een integratie kan een laag HTTP-foutpercentage hebben en toch verouderde verzendinformatie tonen. Klantgerichte pagina’s moeten de laatst bekende verzendstatus behouden en onderscheid maken tussen een mislukte vernieuwing en een door de vervoerder gemelde bezorgingsuitzondering.

Test vóór de release verkeerd gevormde invoer, geldige identifiers zonder events, beide vormen van Retry-After, ontbrekende headers, gedeeltelijke batchfouten, time-outs na schrijfbewerkingen en nieuwe levering vanuit de wachtrij. Simuleer ook een storing die lang genoeg duurt om het retrybudget op te maken. De test slaagt alleen wanneer het werk voorspelbaar stopt of wordt uitgesteld, geslaagde items niet onnodig opnieuw worden afgespeeld en mislukte items herstelbaar blijven.

Veelgestelde vragen

Moet een ongeldig trackingnummer automatisch opnieuw worden geprobeerd?

Niet wanneer de API de invoer expliciet als ongeldig afwijst. Corrigeer eerst het nummer, de vervoerdersselectie of de verplichte velden. Als de respons in plaats daarvan betekent dat verzendevents nog niet beschikbaar zijn, gebruik dan de gedocumenteerde vernieuwingsworkflow in plaats van dit als een validatiefout te behandelen.

Betekent HTTP 200 dat een batchaanvraag volledig is geslaagd?

Niet noodzakelijk. Controleer het responseschema van de provider op resultaten op bewerkingsniveau en itemniveau. Sla geslaagde items op en isoleer fouten, zodat het opnieuw proberen van één item de rest niet onnodig herhaalt.

Hoeveel retry-pogingen moet een trackingintegratie toestaan?

Er bestaat geen universeel aantal. Stel zowel een pogingslimiet als een tijdsbudget in op basis van de richtlijnen van de provider, de veiligheid van de bewerking en hoe lang het resultaat bruikbaar blijft. Een geplande synchronisatie op de achtergrond kan een ander herstelvenster verdragen dan een interactief klantverzoek.

Moet een time-out een zending onmiddellijk als mislukt markeren?

Nee. Een time-out van een aanvraag is een integratieresultaat, geen verzendevent. Behoud de laatst bekende trackingstatus, plan veilig herstel en voorkom dat een verbindingsprobleem wordt omgezet in een melding van mislukte bezorging.

Wat moet er gebeuren wanneer de retries zijn uitgeput?

Verplaats de job naar een duurzame wachtrij voor mislukte jobs of beoordeling, met behoud van de diagnostische context. Bepaal of herstel gecorrigeerde invoer, herstelde inloggegevens, hulp van de provider of een latere gecontroleerde herhaling vereist. Verwijder de job niet stilzwijgend en start niet opnieuw dezelfde onbeperkte retrycyclus.

Bronnen

Loading