it-swarm.com.de

Vorgeschlagenes HTTP REST Statuscode für 'Anforderungslimit erreicht')

Ich stelle eine Spezifikation für einen REST - Dienst zusammen, von dem ein Teil die Möglichkeit beinhaltet, Benutzer dienstweit und für Gruppen von oder für einzelne Ressourcen zu drosseln. Ebenso Zeitüberschreitungen Diese sind pro Ressource/Gruppe/Dienst konfigurierbar.

Ich schaue mir nur die HTTP 1.1-Spezifikation an und versuche zu entscheiden, wie ich einem Client mitteilen werde, dass eine Anfrage nicht erfüllt wird, weil sie ihr Limit erreicht haben.

Anfangs dachte ich, dass der Client-Code 403 - Forbidden Derjenige war, aber dies aus der Spezifikation:

Die Autorisierung hilft nicht und die Anfrage sollte nicht wiederholt werden

störte mich.

Es scheint tatsächlich, dass 503 - Service Unavailable Besser zu verwenden ist - da es die Kommunikation einer Wiederholungszeit durch Verwendung des Retry-After - Headers ermöglicht.

Es ist möglich, dass ich in Zukunft versuchen würde, mehr Anfragen über E-Commerce zu kaufen (in diesem Fall wäre es schön, wenn der Client-Code 402 - Payment Required Finalisiert worden wäre!) - aber ich denke, dass dies ebenso gequetscht werden könnte in eine 503 Antwort auch.

Was denkst du sollte ich verwenden? Oder gibt es eine andere, an die ich nicht gedacht habe?

45
Andras Zoltan

429 Zu viele Anfragen

Der Benutzer hat in einem bestimmten Zeitraum zu viele Anfragen gesendet. Bestimmt für die Verwendung mit Ratenbegrenzungsschemata. Dieser Code wurde in RFC 6585 Zusätzliche HTTP-Statuscodes akzeptiert.

http://i.stack.imgur.com/Y84Lj.jpg

   The 429 status code indicates that the user has sent too many
   requests in a given amount of time ("rate limiting").

   The response representations SHOULD include details explaining the
   condition, and MAY include a Retry-After header indicating how long
   to wait before making a new request...

   Note that this specification does not define how the Origin server
   identifies the user, nor how it counts requests.  For example, an
   Origin server that is limiting request rates can do so based upon
   counts of requests on a per-resource basis, across the entire server,
   or even among a set of servers.  Likewise, it might identify the user
   by its authentication credentials, or a stateful cookie.

   Responses with the 429 status code MUST NOT be stored by a cache...
79
Sean McMillan

Bis zu einem gewissen Grad können Sie mit den Codes tun, was Sie möchten, aber ich würde zustimmen, dass Sie 503 Verwenden können oder wenn Sie 402 Wollen, ohne dass sich jemand darüber beschweren kann Sie brechen Dinge.

Bearbeiten: Ein Purist könnte sagen, dass Sie mit 503 beginnen und dann wechseln sollten, sobald es möglich ist, Zahlungen zu leisten.


Eine hervorragende Ergänzung dazu in den Kommentaren:

Ein 4xx zeigt einen Fehler des Clients an, der behoben werden kann, indem er eine bestimmte Aktion ausführt, während ein 5xx ein Problem auf dem Server anzeigt, das der Client nicht beheben kann. In Ihrem Fall ist ein 4xx also besser geeignet, da (i) sich der Server genau so verhält, wie er sollte, und (ii) der Client den Fehler "beheben" kann, indem er entweder langsamer wird oder mehr Credits kauft. Die genaue Auflösung kann im Hauptteil der 429-Antwort angegeben werden. - Mike Chamberlain vor 7 Stunden

7
Marcin