Was ist API-Drosselung?
Bei der API-Drosselung wird die Anzahl der API-Anfragen begrenzt, die ein Benutzer in einem bestimmten Zeitraum stellen kann. Eine Schnittstelle zur Anwendungsprogrammierung (API) fungiert als Gateway zwischen einem Benutzer und einer Softwareanwendung. Wenn ein Benutzer beispielsweise in sozialen Medien auf die Schaltfläche „Posten“ klickt, löst der Klick auf die Schaltfläche einen API-Aufruf aus. Diese API interagiert mit dem Webserver der Social Media-Anwendung und führt die Aktion „Posten“ aus. Dieser Benutzer kann ein Mensch oder eine andere Softwareanwendung sein.
Unternehmen setzen die API-Drosselung mit verschiedenen Zielen ein, z. B. Sicherheit, Skalierbarkeit, Leistung, Monetarisierung, Authentifizierung und Verfügbarkeit.
Ein Beispiel aus der Praxis für API-Drosselung in Unternehmen
Angenommen, eine Person sucht nach einem Flug über eine OTA-Website (Online-Reiseagentur). Die OTA-Website sammelt Informationen vom Benutzer, einschließlich Herkunft, Ziel und Reisetermin. Dann werden APIs verwendet, um die Fluginformationen vom GDS (Global Distribution System) wie Sabre oder Amadeus abzurufen.
Warum benötigen Unternehmen API-Drosselung?
APIs sind eines der größten Vermögenswerte von Unternehmen. APIs helfen den Benutzern einer Website oder mobiler Anwendungen dabei, ihre Aufgaben zu erfüllen. Mit zunehmender Anzahl der Benutzer zeigen die Websites oder die mobile App Anzeichen einer Leistungsverschlechterung. Infolgedessen haben Benutzer mit besseren Verbindungen oder schnelleren Schnittstellen möglicherweise ein besseres Erlebnis als andere. API-Drosselung ist eine elegante Lösung, die Unternehmen dabei unterstützt, eine faire Nutzung ihrer APIs sicherzustellen.
API-Drosselung hilft auch, Denial-of-Service-Angriffe (DoS-Angriffe) abzuwehren, bei denen ein böswilliger Benutzer enorme Mengen an Anfragen sendet, um eine Website oder eine mobile Anwendung zu blockieren. Da die Anzahl der Online-Nutzer zunimmt, müssen Unternehmen API-Drosselungsmechanismen implementieren, um eine faire Nutzung und Datensicherheit zu gewährleisten und böswillige Angriffe zu verhindern.
Wie funktioniert die API-Drosselung?
Es gibt zwar verschiedene Algorithmen für die API-Drosselung, aber hier sind die grundlegenden Schritte in jedem API-Drosselungsalgorithmus:
- Ein Client/Benutzer ruft eine API auf, die mit einem Webservice oder einer Anwendung interagiert.
- Die Logik der API-Drosselung prüft, ob die aktuelle Anfrage die zulässige Anzahl von API-Aufrufen überschreitet.
- Wenn die Anfrage innerhalb des Grenzwerts liegt, funktioniert die API wie gewohnt und schließt die Aufgabe des Benutzers ab.
- Wenn die Anfrage den Grenzwert überschreitet, gibt die API eine Fehlerantwort an den Benutzer zurück.
- Der Benutzer muss auf einen vorher vereinbarten Zeitraum warten oder bezahlen, um weitere API-Aufrufe zu tätigen.

Was sind die wichtigsten API-Drosselungsalgorithmen?
API-Drosselungsalgorithmus Leaky Bucket
Dieser Algorithmus arbeitet mit einer First-In-First-Out-Warteschlange (FIFO), zum Speichern der eingehenden Anfragen. Die Warteschlange hat eine bestimmte Größe. Wenn ein neuer API-Aufruf/eine neue API-Anfrage eingeht, wird er/sie am Ende der Warteschlange hinzugefügt. In regelmäßigen Abständen entfernt dieser Algorithmus eine Anforderung an der Spitze der Warteschlange und verarbeitet sie. Wenn eine neue Anfrage kommt und die Warteschlange bereits voll ist, wird die Anfrage verworfen. Dieser Algorithmus ist eng mit dem Token-Bucket-Algorithmus verwandt.
Vorteile des Leaky-Bucket-Algorithmus
- Einfach zu implementieren
- Er verarbeitet Anfragen mit einer konstanten Geschwindigkeit. Selbst wenn es zu einem Ansturm von Anfragen kommt, ist das System nicht überlastet. In gewisser Weise glättet der Leaky-Bucket-Algorithmus den Ausgangsfluss bei einem unruhigen Eingangsfluss.
Nachteile des Leaky-Bucket-Algorithmus
- Da der Leaky-Bucket-Algorithmus eine FIFO-Warteschlange verwendet, besteht die Gefahr des Verhungerns. Das bedeutet, dass die neueren Anfragen möglicherweise verworfen werden, wenn eine Warteschlange voll ist und die Verarbeitung einer Anfrage länger dauert. Dieses Problem tritt aufgrund der Reihenfolge auf, in der die Anfragen bearbeitet werden.
Fixed-Window-API-Drosselungsalgorithmus
Der Fixed-Window-Algorithmus ermöglicht N API-Aufrufe von einem Benutzer in einem bestimmten Zeitraum. Ein Fixed-Window-Algorithmus ermöglicht beispielsweise zwei Anfragen pro Minute. Der Zeitraum ist in feste Frames unterteilt, die jeweils eine Minute dauern. Zu Beginn einer Minute wird ein Zähler auf Null gesetzt. Mit jeder Benutzeranfrage erhöht sich der Zähler. Wenn der Zähler die Obergrenze erreicht, bevor das Zeitfenster endet, werden neue Anfragen zurückgewiesen. Zu Beginn jeder Minute wird der Zähler auf Null zurückgesetzt.
In einer typischen Implementierung eines Fixed-Window-Algorithmus hat jeder Benutzer einen eindeutigen Schlüssel und einen dem Schlüssel zugeordneten Zähler. Zu Beginn des festen Zeitfensters wird der Zähler zurückgesetzt.
Vorteil des Fixed-Window-Algorithmus
- Im Gegensatz zum Leaky-Bucket-Algorithmus führt ein Fixed-Window-Algorithmus nicht zum Verhungern von neuen Anfragen, da der Zähler zu Beginn des jeweiligen Zeitfensters zurückgesetzt wird.
Nachteil des Fixed-Window-Algorithmus
- Zu Beginn des Zeitfensters könnte es zu einem Ansturm von Benutzeranfragen kommen. Wenn der Grenzwert beispielsweise bei 1000 Anfragen/Stunden liegt, könnten alle 1000 Anfragen in der ersten Minute des Fensters gestellt werden. Das könnte das System überfordern.
Sliding-Window-Algorithmus zur API-Drosselung
Dieser Algorithmus löst die Anfrage-Ansturm-Probleme mit dem Fixed-Window-Algorithmus, indem er das Zeitfenster startet, wenn eine Anfrage gestellt wird. Beispielsweise wird davon ausgegangen, dass das System nur zwei Anfragen pro Minute für den Benutzer zulässt. Im Gegensatz zum Fixed-Window-Algorithmus beginnt das Zeitfenster nur, wenn ein Benutzer tatsächlich die erste Anfrage stellt. Der Zeitstempel der ersten Anfrage wird mit einem Zähler gespeichert, und der Benutzer kann innerhalb dieser Minute eine weitere Anfrage stellen.
Vorteile des Sliding-Window-Algorithmus
Der Sliding-Window-Algorithmus kombiniert die Vorteile des Leaky-Bucket- und des Fixed-Window-Algorithmus. Er beseitigt die Probleme mit den beiden anderen Algorithmen. Im Sliding-Window-Algorthmus verhungern neuere Anfragen nicht. Im Gegensatz zum Fixed-Window-Algorithmus überfordert die Anzahl der Anfragen das System nicht.
Was sind die Vorteile der API-Drosselung?
API-Drosselung ist eine Technik, die für alle Organisationen unerlässlich ist, die ihre Services über APIs bereitstellen.
Performance
Die API-Drosselung verhindert die Verschlechterung der Systemleistung, indem die übermäßige Nutzung einer API begrenzt wird. Wenn eine Anwendung Millionen von Benutzer hat, erhält ein System möglicherweise eine große Anzahl von API-Anfragen pro Sekunde. Die Bearbeitung all dieser API-Anfragen verlangsamt das System und beeinträchtigt dessen Leistung. Durch die API-Drosselung wird sichergestellt, dass jeder Benutzer die in der Dienstleistungsvereinbarung (SLA) garantierte Leistung erhält.
Sicherheit
Ein API-Drosselungssystem fungiert als Gateway zu einer API. Es hilft dabei, Denial-of-Service-Angriffe (DoS-Angriffe) zu verhindern. Bei einem DoS-Angriff gibt ein Angreifer eine große Anzahl von Serviceanfragen aus, sodass der Service für legitime Benutzer nicht verfügbar ist. Durch die Begrenzung der Gesamtzahl der Serviceanfragen hilft die API-Drosselung, DoS-Angriffe zu verhindern.
Reduzierung eines unbeabsichtigten/böswilligen Gebrauchs
Falls eine API aufgrund eines technischen Fehlers vertrauliche Informationen preisgibt, begrenzt die API-Drosselung den unbefugten Zugriff auf Daten durch die beeinträchtigte API.
Messung und Monetarisierung
APIs sind eines der größten Vermögenswerte von Unternehmen. Die Monetarisierung der API-Nutzung trägt einen erheblichen Teil zu ihrem Gewinn bei. API-Drosselung hilft Unternehmen, die Nutzung ihrer APIs zu messen. Zum Beispiel kann ein Webservice 1000 kostenlose API-Aufrufe pro Stunde anbieten, aber wenn Benutzer mehr Anfragen pro Stunde benötigen, müssen sie dafür bezahlen.
Authentifizierung
Durch die API-Drosselung wird nicht unbedingt nur die Anzahl der Aufrufe begrenzt. Abhängig vom Zugriffsrecht eines Benutzers ermöglicht die Logik der API-Drosselung ihm den Zugriff auf die ausgewählten Teile der API. Beispielsweise können einige Benutzer basierend auf der Berechtigung des Anfragestellers nach anderen Benutzern suchen, während andere möglicherweise Benutzerdaten über die API bearbeiten können.

Was sind die Herausforderungen der API-Drosselung?
Die Implementierung der API-Drosselung in einem verteilten System ist eine anspruchsvolle Aufgabe. Wenn die App oder der Service über mehrere Server weltweit verfügt, sollte die Drosselung für das verteilte System angewendet werden. Die aufeinanderfolgenden Anfragen desselben Benutzers konnten an verschiedene Server weitergeleitet werden. Die Logik der API-Drosselung befindet sich auf jedem Knoten und muss in Echtzeit miteinander synchronisiert werden. Dies könnte zu Inkonsistenzen und Wettlaufbedingungen führen.
Im folgenden Beispiel hat der Benutzer bereits vier von den fünf Anfragen pro Sekunde aufgebraucht. Angenommen, der Benutzer gibt zwei weitere Anfragen in derselben Sekunde aus. Sie gehen an zwei verschiedene Server. Der Ratenbegrenzer holt den aktuellen Zähler aus der Datenbank und sieht Anzahl=4; er erlaubt den Aufruf. Gleichzeitig zieht der zweite Ratenbegrenzer auch die Daten aus der Datenbank und sieht die Anzahl=4. Dies geschieht, weil der zweite Ratenbegrenzer die Daten aus einer gemeinsamen Datenbank abruft, bevor der erste Ratenbegrenzer den Zähler aktualisiert. Daher werden beide Anfragen bearbeitet und der Benutzer erhält 6 Anfragen/Sekunde.
Lösungen: API-Drosselungssysteme verwenden mehrere Lösungen für Inkonsistenzen und Wettlaufbedingungen. Eine Möglichkeit, API-Drosselung in verteilten Systemen zu implementieren, ist die Verwendung von Sticky-Sitzungen. Bei dieser Methode werden alle Anfragen eines Benutzers immer von einem bestimmten Server bedient. Diese Lösung ist jedoch nicht ausgewogen oder fehlertolerant.
Die zweite Lösung zur API-Drosselung in verteilten Systemen sind Sperren. Wenn im obigen Beispiel der erste Ratenbegrenzer auf die Datenbank zugreift, sperrt er den Zähler. Solange der Zähler nicht freigeschaltet wird, kann der zweite Ratenbegrenzer nicht auf den Zähler zugreifen. Der erste Ratenbegrenzer gibt den Zähler frei, wenn der Zähler auf fünf aktualisiert wird. Eine weitere beliebte Lösung ist die Lockerung der Ratenbegrenzung. Diese Lösung ermöglicht einen bestimmten Prozentsatz zusätzlicher Anfragen pro Sekunde.