Nyilvános API

Hibák, hívási korlátok, verziózás

A hibaválaszok alakja, mikor érdemes újrapróbálni, a RateLimit fejlécek, és hogyan vezetünk ki egy útvonalat.

Die Form eines Fehlers

Jeder Fehler ist JSON. Es gibt zwei Formen, und der Unterschied ist, woher der Fehler kommt.

QuelleFormBeispiel
Von Posty, wegen einer GeschäftsregelDas Feld msg enthält den lesbaren Satz.{ "msg": "No file provided" }
Von der Validierung der AnfrageDie Form des Frameworks: statusCode, message, error.{ "statusCode": 400, "message": [...] }

Das Schema ApiError im OpenAPI-Dokument beschreibt all das auch maschinenlesbar. Pro Statuscode steht dabei, ob ein erneuter Versuch sinnvoll ist.

Statuscodes

CodeWas es bedeutetTypische Ursache
400Die Anfrage ist ungültig.Fehlendes Pflichtfeld, falsches Datumsformat, unbekannter Enum-Wert.
401Keine gültigen Zugangsdaten.Fehlender, falscher oder ersetzter Schlüssel; abgelaufenes OAuth-Token.
403Nicht genug Berechtigung.Fehlender Scope, oder der Besitzer des Schlüssels wurde herabgestuft. Die Antwort nennt beides.
404Diese Ressource gibt es nicht.Falsche ID, oder ein Element aus einem anderen Arbeitsbereich.
402Der Tarif erlaubt das nicht.Das Kontingent ist aufgebraucht, oder die Funktion gehört nicht zum Tarif.
429Zu viele Anfragen.Das Aufruflimit ist aufgebraucht. Siehe den Header Retry-After.
5xxBei uns ist etwas schiefgelaufen.Vorübergehend. Ein erneuter Versuch lohnt sich.

Wann du es erneut versuchen sollst

Der Statuscode sagt es dir

400, 401, 403 und 404 gehen nicht weg, bis du etwas änderst: Erneut versuchen ist nur Last. 429 und 5xx sind vorübergehend. Dafür ist exponentiell steigende Wartezeit das richtige Verhalten.

Sofortiges Veröffentlichen ist unumkehrbar

Wenn ein Aufruf von POST /posts mit Timeout endet, kannst du eine verlorene Antwort nicht von einer verlorenen Anfrage unterscheiden. Der naheliegende erneute Versuch veröffentlicht einen Beitrag zweimal auf dem echten Konto von jemandem. Schütz den Aufruf mit einem Idempotenzschlüssel, oder frag zuerst den Kalender ab.

Aufruflimits

Jede Antwort trägt diese Header, mit einem eigenen Kontingent je Pfad, je Schlüssel:

HeaderWas er sagt
RateLimit-LimitWie groß das Kontingent im jeweiligen Zeitfenster ist.
RateLimit-RemainingWie viel davon noch übrig ist.
RateLimit-ResetIn wie vielen Sekunden es zurückgesetzt wird. Sekunden, kein Zeitstempel.
RateLimit-PolicyDie Beschreibung der geltenden Regel.
Retry-AfterNur bei 429: wie lange du warten sollst.
curl -i https://api.posty.hu/public/v1/integrations \
  -H "Authorization: psty_a_kulcsod"

RateLimit-Limit: 60
RateLimit-Remaining: 58
RateLimit-Reset: 41
RateLimit-Policy: 60;w=60

Wart nicht auf den 429. Am Restwert kannst du schon vorher langsamer werden. Ein geplanter Sync, der den Restwert beobachtet, läuft nie ins Limit.

Versionierung und Abkündigung

Die Version steht im Pfad: Jeder öffentliche Aufruf liegt unter /public/v1. Eine inkompatible Änderung würde als neue Version erscheinen (/public/v2), und v1 hält seinen Vertrag ein.

  • Erweiterungen passieren innerhalb von v1: neues optionales Feld, neuer Pfad, neuer Enum-Wert. Deshalb sollte dein Code Felder ignorieren, die er nicht kennt.
  • Bei der Abkündigung bekommt die Antwort den Header Deprecation: true, dazu im Header Sunset das Datum, ab dem sie nicht mehr funktioniert, und einen Header Link mit den Details.
  • Das Sunset-Datum darf nie weniger als 180 Tage nach dem ersten Deprecation-Header liegen.

Derzeit wird nichts abgekündigt. Die maschinenlesbare Beschreibung steht immer im OpenAPI-Dokument. Wenn dein Code daraus generiert wird, bekommt er die Erweiterungen von selbst.

Die vollständige Liste der Endpunkte findest du auf der Seite Endpunkte.

Fehlt etwas auf dieser Seite? Schreib eine E-Mail an [email protected] oder nutze auf der Hilfeseite das Formular.