{"id":63191,"date":"2023-06-27T08:00:51","date_gmt":"2023-06-27T07:00:51","guid":{"rendered":"https:\/\/kinsta.com\/de\/?p=63191&#038;post_type=knowledgebase&#038;preview_id=63191"},"modified":"2025-10-01T20:15:25","modified_gmt":"2025-10-01T19:15:25","slug":"api-raten-limit","status":"publish","type":"post","link":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/","title":{"rendered":"API-Ratenbegrenzung: Der ultimative Leitfaden"},"content":{"rendered":"<p>APIs sind eine gro\u00dfartige M\u00f6glichkeit f\u00fcr Softwareanwendungen, miteinander zu kommunizieren. Sie erm\u00f6glichen es Softwareanwendungen, miteinander zu interagieren und Ressourcen oder Privilegien zu teilen.<\/p>\n<p>Heute bieten viele B2B-Unternehmen ihre Dienste \u00fcber APIs an, die von Anwendungen in jeder Programmiersprache und jedem Framework genutzt werden k\u00f6nnen. Das macht sie jedoch anf\u00e4llig f\u00fcr DoS- und DDoS-Angriffe und kann auch zu einer ungleichen Verteilung der Bandbreite zwischen den Nutzern f\u00fchren. Um diese Probleme zu l\u00f6sen, wird eine Technik eingesetzt, die als API-Rate-Limiting bekannt ist. Die Idee ist einfach: Du begrenzst die Anzahl der Anfragen, die Nutzer\/innen an deine API stellen k\u00f6nnen.<\/p>\n<p>In diesem Leitfaden erf\u00e4hrst du, was eine API-Ratenbegrenzung ist, welche verschiedenen M\u00f6glichkeiten es gibt und welche Best Practices und Beispiele du bei der Einrichtung von API-Ratenbegrenzungen beachten solltest.<br \/>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Was ist API-Ratenbegrenzung?<\/h2>\n<p>Einfach ausgedr\u00fcckt, bedeutet API-Ratenbegrenzung, dass ein Schwellenwert oder eine Grenze f\u00fcr die Anzahl der Zugriffe auf eine <a href=\"https:\/\/kinsta.com\/de\/blog\/api-endpunkt\/\">API<\/a> durch die Nutzer\/innen festgelegt wird. Die Grenzen k\u00f6nnen auf verschiedene Arten festgelegt werden.<\/p>\n<h3>1. Nutzerbasierte Limits<\/h3>\n<p>Eine M\u00f6glichkeit, eine Ratenbegrenzung festzulegen, besteht darin, die Anzahl der Zugriffe eines bestimmten Nutzers auf die <a href=\"https:\/\/kinsta.com\/de\/blog\/microservices-vs-api\/\">API<\/a> innerhalb eines bestimmten Zeitraums zu reduzieren. Dies kann erreicht werden, indem die Anzahl der Anfragen mit demselben API-Schl\u00fcssel oder derselben IP-Adresse gez\u00e4hlt wird und bei Erreichen eines Schwellenwerts weitere Anfragen gedrosselt oder verweigert werden.<\/p>\n<h3>2. Standortbezogene Beschr\u00e4nkungen<\/h3>\n<p>In vielen F\u00e4llen m\u00f6chten Entwickler die verf\u00fcgbare Bandbreite f\u00fcr ihre API gleichm\u00e4\u00dfig auf bestimmte geografische Standorte verteilen.<\/p>\n<p>Der neue Vorab-Dienst <a href=\"https:\/\/kinsta.com\/de\/blog\/chatgpt-klon\/\">ChatGPT<\/a> ist ein gutes Beispiel f\u00fcr eine <a href=\"https:\/\/twitter.com\/codewithvoid\/status\/1619372391179714560?s=20&#038;t=C0RHEAxKC2xVEnpcLEQ9_Q\" target=\"_blank\" rel=\"noopener noreferrer\">ortsabh\u00e4ngige Ratenbegrenzung<\/a>, denn mit der Einf\u00fchrung der kostenpflichtigen Version wurden die Anfragen in der kostenlosen Version des Dienstes auf Basis der Nutzerstandorte begrenzt. Das war sinnvoll, da die kostenlose Vorabversion von Nutzern auf der ganzen Welt verwendet werden sollte, um eine gute Stichprobe von Nutzungsdaten f\u00fcr den Dienst zu erhalten.<\/p>\n<h3>3. Serverbasierte Begrenzungen<\/h3>\n<p>Die serverbasierte Ratenbegrenzung ist eine interne Ratenbegrenzung, die auf dem Server implementiert wird, um eine gerechte Verteilung der Serverressourcen wie CPU, Speicher, Festplattenplatz usw. zu gew\u00e4hrleisten. Dazu wird auf jedem Server einer Bereitstellung ein Limit eingerichtet.<\/p>\n<p>Wenn ein Server sein Limit erreicht, werden weitere eingehende Anfragen an einen anderen Server mit freien Kapazit\u00e4ten weitergeleitet. Wenn alle Server ihre Kapazit\u00e4t erreicht haben, erh\u00e4lt der Nutzer die Antwort <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Status\/429\" target=\"_blank\" rel=\"noopener noreferrer\">429 Too Many Requests<\/a>. Es ist wichtig zu wissen, dass serverbasierte Ratenbegrenzungen f\u00fcr alle Kunden gelten, unabh\u00e4ngig von ihrem geografischen Standort, der Uhrzeit des Zugriffs oder anderen Faktoren.<\/p>\n\n<h2>Arten von API-Ratenbegrenzungen<\/h2>\n<p>Abgesehen von der Art der Implementierung der Ratenbeschr\u00e4nkungen kannst du die Ratenbeschr\u00e4nkungen auch anhand ihrer Auswirkungen auf den Endnutzer klassifizieren. Einige g\u00e4ngige Arten sind:<\/p>\n<ul>\n<li><b>Harte Limits:<\/b> Hierbei handelt es sich um strenge Limits, bei deren \u00dcberschreitung dem Nutzer der Zugriff auf die Ressource vollst\u00e4ndig verwehrt wird, bis das Limit wieder aufgehoben wird.<\/li>\n<li><b>Weiche Grenzen:<\/b> Das sind flexible Limits, die es dem Nutzer\/der Nutzerin erlauben, noch ein paar Mal auf die Ressource zuzugreifen (oder die Anfragen zu drosseln), bevor der Zugang gesperrt wird.<\/li>\n<li><b>Dynamische Limits:<\/b> Diese Limits h\u00e4ngen von verschiedenen Faktoren ab, wie z. B. der Serverauslastung, dem Netzwerkverkehr, dem Standort des Nutzers, der Aktivit\u00e4t des Nutzers, der Verteilung des Datenverkehrs usw., und werden in Echtzeit ge\u00e4ndert, damit die Ressource effizient funktioniert.<\/li>\n<li><b>Drosseln:<\/b> Diese Limits unterbinden nicht den Zugriff auf die Ressource, sondern verlangsamen oder stellen weitere eingehende Anfragen in die Warteschlange, bis das Limit aufgehoben wird.<\/li>\n<li><b>Abrechenbare Limits:<\/b> Diese Limits schr\u00e4nken den Zugang nicht ein oder drosseln die Geschwindigkeit, sondern stellen dem Nutzer\/der Nutzerin weitere Anfragen in Rechnung, wenn die festgelegte freie Schwelle \u00fcberschritten wird.<\/li>\n<\/ul>\n<h2>Warum ist eine Ratenbegrenzung notwendig?<\/h2>\n<p>Es gibt viele Gr\u00fcnde, warum du eine Ratenbegrenzung in deinen <a href=\"https:\/\/kinsta.com\/de\/blog\/web-anwendungs-architektur\/\">Web-APIs<\/a> einf\u00fchren solltest. Einige der wichtigsten Gr\u00fcnde sind:<\/p>\n<h3>1. Schutz des Ressourcenzugangs<\/h3>\n<p>Der erste Grund, warum du eine API-Ratenbegrenzung in deiner Anwendung einf\u00fchren solltest, ist der Schutz deiner Ressourcen vor der Ausbeutung durch Nutzer\/innen mit b\u00f6swilligen Absichten. Angreifer k\u00f6nnen Techniken wie <a href=\"https:\/\/www.cloudflare.com\/learning\/ddos\/what-is-a-ddos-attack\/\" target=\"_blank\" rel=\"noopener noreferrer\">DDoS-Angriffe<\/a> nutzen, um den Zugang zu deinen Ressourcen zu blockieren und zu verhindern, dass deine Anwendung f\u00fcr andere Nutzer normal funktioniert. Mit einem Ratenlimit stellst du sicher, dass du es Angreifern nicht leicht machst, deine APIs zu beeintr\u00e4chtigen.<\/p>\n<h3>2. Aufteilung des Kontingents unter den Nutzern<\/h3>\n<p>Neben dem Schutz deiner Ressourcen erm\u00f6glicht dir die Ratenbegrenzung auch, deine API-Ressourcen unter den Nutzern aufzuteilen. Das bedeutet, dass du abgestufte Preismodelle erstellen und auf die dynamischen Bed\u00fcrfnisse deiner Kunden eingehen kannst, ohne dass sich diese auf andere Kunden auswirken.<\/p>\n<h3>3. Steigerung der Kosteneffizienz<\/h3>\n<p>Ratenbegrenzung ist auch gleichbedeutend mit Kostenbegrenzung. Das bedeutet, dass du deine Ressourcen vern\u00fcnftig auf deine Nutzer\/innen verteilen kannst. Mit einer partitionierten Struktur ist es einfacher, die Kosten f\u00fcr den Unterhalt des Systems abzusch\u00e4tzen. Auftretende Spitzen k\u00f6nnen intelligent gehandhabt werden, indem du die richtige Menge an Ressourcen bereitstellst oder stilllegst.<\/p>\n<h3>4. Fluss zwischen Workern verwalten<\/h3>\n<p>Viele APIs basieren auf einer verteilten Architektur, die mehrere Worker\/Threads\/Instanzen zur Bearbeitung eingehender Anfragen einsetzt. In einer solchen Struktur kannst du mithilfe von Ratenbeschr\u00e4nkungen die Arbeitslast kontrollieren, die an jeden Worker-Knoten \u00fcbergeben wird. So kannst du sicherstellen, dass die Worker Nodes eine gerechte und nachhaltige Arbeitslast erhalten. Du kannst bei Bedarf einfach Worker hinzuf\u00fcgen oder entfernen, ohne das gesamte API-Gateway umzustrukturieren.<\/p>\n<h2>Burst-Grenzen verstehen<\/h2>\n<p>Eine weitere g\u00e4ngige Methode zur Kontrolle der API-Nutzung ist die Festlegung eines Burst-Limits (auch bekannt als Drosselung) anstelle eines Ratenlimits. Burst Limits sind Ratenbegrenzungen, die f\u00fcr ein sehr kleines Zeitintervall, z. B. ein paar Sekunden, eingef\u00fchrt werden. Anstatt ein Limit von 1,3 Millionen Anfragen pro Monat festzulegen, k\u00f6nntest du zum Beispiel ein Limit von 5 Anfragen pro Sekunde festlegen. Das entspricht zwar dem gleichen monatlichen Datenverkehr, stellt aber sicher, dass deine Kunden deine Server nicht \u00fcberlasten, indem sie Tausende von Anfragen auf einmal senden.<\/p>\n<p>Bei Burst-Limits werden die Anfragen oft bis zum n\u00e4chsten Intervall verz\u00f6gert, anstatt sie abzulehnen. Es wird auch oft empfohlen, sowohl Raten- als auch Burst-Limits zu verwenden, um den Datenverkehr und die Nutzung optimal zu kontrollieren.<\/p>\n<h2>3 Methoden zur Implementierung von Ratenbegrenzungen<\/h2>\n<p>F\u00fcr die Implementierung gibt es einige Methoden, mit denen du eine API-Ratenbegrenzung in deiner Anwendung einrichten kannst. Dazu geh\u00f6ren:<\/p>\n<h3>1. Anfragewarteschlangen<\/h3>\n<p>Eine der einfachsten Methoden zur Beschr\u00e4nkung des API-Zugriffs sind Warteschlangen f\u00fcr Anfragen. Anfragewarteschlangen sind ein Mechanismus, bei dem eingehende Anfragen in Form einer Warteschlange gespeichert und nacheinander bis zu einer bestimmten Grenze abgearbeitet werden.<\/p>\n<p>Ein g\u00e4ngiger Anwendungsfall f\u00fcr Warteschlangen ist die Trennung der eingehenden Anfragen von kostenlosen und bezahlten Nutzern. Hier erf\u00e4hrst du, wie du das in einer <a href=\"https:\/\/kinsta.com\/de\/blog\/was-ist-express-js\/\">Express-App<\/a> mit dem Paket <code>express-queue<\/code> machen kannst:<\/p>\n<pre><code class=\"language-js\">const express = require('express')\nconst expressQueue = require('express-queue');\n\nconst app = express()\n\nconst freeRequestsQueue = expressQueue({\n    activeLimit: 1, \/\/ Maximum requests to process at once\n    queuedLimit: -1 \/\/ Maximum requests allowed in queue (-1 means unlimited)\n});\n\nconst paidRequestsQueue = expressQueue({\n    activeLimit: 5, \/\/ Maximum requests to process at once\n    queuedLimit: -1 \/\/ Maximum requests allowed in queue (-1 means unlimited)\n});\n\n\/\/ Middleware that selects the appropriate queue handler based on the presence of an API token in the request\nfunction queueHandlerMiddleware(req, res, next) {\n    \/\/ Check if the request contains an API token\n    const apiToken = req.headers['api-token'];\n\n    if (apiToken && isValidToken(apiToken)) {\n        console.log(\"Paid request received\")\n        paidRequestsQueue(req, res, next);\n    } else {\n        console.log(\"Free request received\")\n        freeRequestsQueue(req, res, next);\n     }\n}\n\n\/\/ Add the custom middleware function to the route\napp.get('\/route', queueHandlerMiddleware, (req, res) =&gt; {\n    res.status(200).json({ message: \"Processed!\" })\n});\n\n\/\/ Check here is the API token is valid or not\nconst isValidToken = () =&gt; {\n    return true;\n}\n\napp.listen(3000);<\/code><\/pre>\n<h3>2. Drosselung<\/h3>\n<p>Die Drosselung ist eine weitere Technik, um den Zugriff auf APIs zu kontrollieren. Anstatt den Zugang nach Erreichen eines Schwellenwerts zu sperren, konzentriert sich die Drosselung darauf, die Spitzen im API-Verkehr auszugleichen, indem kleine Schwellenwerte f\u00fcr kleine Zeitspannen festgelegt werden. Anstatt ein Ratenlimit von z. B. 3 Millionen Aufrufen pro Monat festzulegen, werden bei der Drosselung Grenzen von 10 Aufrufen pro Sekunde gesetzt. Sobald ein Kunde mehr als 10 Aufrufe in einer Sekunde sendet, werden die n\u00e4chsten Anfragen in derselben Sekunde automatisch gedrosselt, aber der Kunde erh\u00e4lt in der n\u00e4chsten Sekunde sofort wieder Zugang zur API.<\/p>\n<p>Du kannst die Drosselung in Express mit dem Paket <code>express-throttle<\/code> implementieren. Hier ist ein Beispiel f\u00fcr eine Express-Anwendung, die zeigt, wie du die Drosselung in deiner Anwendung einrichten kannst:<\/p>\n<pre><code class=\"language-js\">const express = require('express')\nconst throttle = require('express-throttle')\n\nconst app = express()\n\nconst throttleOptions = {\n    \"rate\": \"10\/s\",\n    \"burst\": 5,\n    \"on_allowed\": function (req, res, next, bucket) {\n        res.set(\"X-Rate-Limit-Limit\", 10);\n        res.set(\"X-Rate-Limit-Remaining\", bucket.tokens);\n        next()\n    },\n    \"on_throttled\": function (req, res, next, bucket) {\n        \/\/ Notify client\n        res.set(\"X-Rate-Limit-Limit\", 10);\n        res.set(\"X-Rate-Limit-Remaining\", 0);\n        res.status(503).send(\"System overloaded, try again after a few seconds.\");\n    }\n}\n\n\/\/ Add the custom middleware function to the route\napp.get('\/route', throttle(throttleOptions), (req, res) =&gt; {\n    res.status(200).json({ message: \"Processed!\" })\n});\n\napp.listen(3000);<\/code><\/pre>\n<p>Du kannst die Anwendung mit einem Lasttest-Tool wie <a href=\"https:\/\/www.npmjs.com\/package\/autocannon\" target=\"_blank\" rel=\"noopener noreferrer\">AutoCannon<\/a> testen. Du kannst AutoCannon installieren, indem du den folgenden Befehl in deinem Terminal ausf\u00fchrst:<\/p>\n<pre><code>npm install autocannon -g<\/code><\/pre>\n<p>Du kannst die App mit folgendem Befehl testen:<\/p>\n<pre><code>autocannon http:\/\/localhost:3000\/route<\/code><\/pre>\n<p>Der Test verwendet 10 gleichzeitige Verbindungen, die Anfragen an die API senden. Hier ist das Ergebnis des Tests:<\/p>\n<pre><code>Running 10s test @ http:\/\/localhost:3000\/route\n\n10 connections\n\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Stat    \u2502 2.5% \u2502 50%  \u2502 97.5% \u2502 99%  \u2502 Avg     \u2502 Stdev   \u2502 Max   \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Latency \u2502 0 ms \u2502 0 ms \u2502 1 ms  \u2502 1 ms \u2502 0.04 ms \u2502 0.24 ms \u2502 17 ms \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 Stat      \u2502 1%      \u2502 2.5%    \u2502 50%    \u2502 97.5%   \u2502 Avg    \u2502 Stdev   \u2502 Min     \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Req\/Sec   \u2502 16591   \u2502 16591   \u2502 19695  \u2502 19903   \u2502 19144  \u2502 1044.15 \u2502 16587   \u2502\n\u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u253c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2524\n\u2502 Bytes\/Sec \u2502 5.73 MB \u2502 5.73 MB \u2502 6.8 MB \u2502 6.86 MB \u2502 6.6 MB \u2502 360 kB  \u2502 5.72 MB \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n\nReq\/Bytes counts sampled once per second.\n# of samples: 11\n114 2xx responses, 210455 non 2xx responses\n211k requests in 11.01s, 72.6 MB read<\/code><\/pre>\n<p>Da nur 10 Anfragen pro Sekunde erlaubt waren (mit einem zus\u00e4tzlichen Burst von 5 Anfragen), wurden nur 114 Anfragen erfolgreich von der API bearbeitet, und die restlichen Anfragen wurden mit einem 503-Fehlercode beantwortet, mit der Bitte, einige Zeit zu warten.<\/p>\n<h3>3. Algorithmen zur Ratenbegrenzung<\/h3>\n<p>Obwohl die Ratenbegrenzung wie ein einfaches Konzept aussieht, das mit einer Warteschlange umgesetzt werden kann, kann sie in Wirklichkeit auf verschiedene Weise implementiert werden und bietet verschiedene Vorteile. Hier sind einige g\u00e4ngige Algorithmen, die zur Implementierung der Ratenbegrenzung verwendet werden:<\/p>\n<h4>Fixed-Window-Algorithmus<\/h4>\n<p>Der Fixed-Window-Algorithmus ist einer der einfachsten Algorithmen zur Ratenbegrenzung. Er begrenzt die Anzahl der Anfragen, die in einem bestimmten Zeitintervall bearbeitet werden k\u00f6nnen.<\/p>\n<p>Du legst eine feste Anzahl von Anfragen fest, zum Beispiel 100, die der API-Server in einer Stunde bearbeiten kann. Wenn nun die 101. Anfrage eintrifft, verweigert der Algorithmus ihre Bearbeitung. Wenn das Zeitintervall zur\u00fcckgesetzt wird (d.h. in der n\u00e4chsten Stunde), k\u00f6nnen weitere 100 eingehende Anfragen bearbeitet werden.<\/p>\n<p>Dieser Algorithmus ist einfach zu implementieren und funktioniert in vielen F\u00e4llen gut, in denen eine serverseitige Ratenbegrenzung erforderlich ist, um die Bandbreite zu kontrollieren (im Gegensatz zur Verteilung der Bandbreite auf die Nutzer\/innen). Er kann jedoch zu einem starken Datenverkehr\/einer starken Verarbeitung an den R\u00e4ndern des festen Zeitintervalls f\u00fchren. Der Sliding-Window-Algorithmus ist eine bessere Alternative, wenn du eine gleichm\u00e4\u00dfige Verarbeitung brauchst.<\/p>\n<h4>Sliding-Window-Algorithmus<\/h4>\n<p>Der Sliding-Window-Algorithmus ist eine Variante des Fixed-Window-Algorithmus. Anstatt feste, vordefinierte Zeitintervalle zu verwenden, nutzt dieser Algorithmus ein rollierendes Zeitfenster, um die Anzahl der bearbeiteten und eingehenden Anfragen zu verfolgen.<\/p>\n<p>Anstatt die absoluten Zeitintervalle (von z. B. jeweils 60 Sekunden) zu betrachten, wie z. B. 0s bis 60s, 61s bis 120s usw., betrachtet der Sliding-Window-Algorithmus die letzten 60 Sekunden ab Eingang einer Anfrage. Angenommen, eine Anfrage geht in der 82. Sekunde ein; dann z\u00e4hlt der Algorithmus die Anzahl der Anfragen, die zwischen 22s und 82s bearbeitet wurden (anstelle des absoluten Intervalls 60s bis 120s), um festzustellen, ob diese Anfrage bearbeitet werden kann oder nicht. So kann verhindert werden, dass eine gro\u00dfe Anzahl von Anfragen sowohl in der 59. als auch in der 61. Sekunde bearbeitet wird und den Server f\u00fcr einen sehr kurzen Zeitraum \u00fcberlastet.<\/p>\n<p>Dieser Algorithmus kann Burst-Verkehr besser bew\u00e4ltigen, ist aber im Vergleich zum Fixed-Window-Algorithmus schwieriger zu implementieren und zu warten.<\/p>\n<h4>Token Bucket Algorithmus<\/h4>\n<p>Bei diesem Algorithmus wird ein fiktiver Eimer mit Token gef\u00fcllt, und jedes Mal, wenn der Server eine Anfrage bearbeitet, wird ein Token aus dem Eimer genommen. Wenn der Eimer leer ist, kann der Server keine Anfragen mehr bearbeiten. Weitere Anfragen werden entweder aufgeschoben oder abgelehnt, bis der Eimer wieder gef\u00fcllt ist.<\/p>\n<p>Der Token-Bucket wird mit einer festen Rate aufgef\u00fcllt (bekannt als Token-Generierungsrate), und die maximale Anzahl der Token, die im Bucket gespeichert werden k\u00f6nnen, ist ebenfalls festgelegt (bekannt als Bucket-Tiefe).<\/p>\n<p>Indem du die Token-Regenerierungsrate und die Tiefe des Buckets kontrollierst, kannst du den maximalen Verkehrsfluss steuern, den die API zul\u00e4sst. Das Paket <code>express-throttle<\/code>, das du vorhin gesehen hast, verwendet den Token Bucket Algorithmus, um den Datenverkehr der API zu drosseln oder zu kontrollieren.<\/p>\n<p>Der gr\u00f6\u00dfte Vorteil dieses Algorithmus ist, dass er Burst-Verkehr unterst\u00fctzt, solange er in der Bucket-Tiefe untergebracht werden kann. Das ist besonders n\u00fctzlich f\u00fcr unvorhersehbaren Datenverkehr.<\/p>\n<h4>Leaky-Bucket-Algorithmus<\/h4>\n<p>Der Leaky-Bucket-Algorithmus ist ein weiterer Algorithmus f\u00fcr den Umgang mit API-Verkehr. Anstatt eine Bucket-Tiefe einzuhalten, die festlegt, wie viele Anfragen in einem bestimmten Zeitraum bearbeitet werden k\u00f6nnen (wie bei einem Token Bucket), erlaubt er einen festen Fluss von Anfragen aus dem Bucket, was dem stetigen Fluss von Wasser aus einem undichten Eimer entspricht.<\/p>\n<p>Die Eimertiefe wird in diesem Fall verwendet, um zu bestimmen, wie viele Anfragen in die Warteschlange aufgenommen werden k\u00f6nnen, bevor der Eimer \u00fcberl\u00e4uft, d.h. eingehende Anfragen abgewiesen werden.<\/p>\n<p>Der Leaky Bucket verspricht einen stetigen Fluss von Anfragen und ist im Gegensatz zum Token Bucket nicht in der Lage, Spitzen im Datenverkehr zu bew\u00e4ltigen.<\/p>\n<h2>Best Practices f\u00fcr die API-Ratenbegrenzung<\/h2>\n<p>Jetzt wei\u00dft du, was API-Ratenbegrenzung ist und wie es umgesetzt wird. Hier sind einige Best Practices, die du bei der Implementierung in deiner Anwendung beachten solltest.<\/p>\n<h3>Biete eine kostenlose Stufe an, damit die Nutzer deine Dienste ausprobieren k\u00f6nnen<\/h3>\n<p>Wenn du eine API-Ratenbeschr\u00e4nkung in Erw\u00e4gung ziehst, solltest du immer versuchen, eine angemessene kostenlose Stufe anzubieten, mit der deine potenziellen Nutzer deine API ausprobieren k\u00f6nnen. Es muss nicht sehr gro\u00dfz\u00fcgig sein, aber es sollte ausreichen, damit sie deine API bequem in ihrer Entwicklungs-Anwendung testen k\u00f6nnen.<\/p>\n<p>Auch wenn API-Ratenbeschr\u00e4nkungen wichtig sind, um die Qualit\u00e4t deiner API-Endpunkte f\u00fcr deine Nutzer\/innen aufrechtzuerhalten, kann ein kleines, ungedrosseltes Gratis-Tier dir helfen, neue Nutzer\/innen zu gewinnen.<\/p>\n<h3>Entscheide, was passiert, wenn das Ratenlimit \u00fcberschritten wird<\/h3>\n<p>Wenn eine Nutzerin oder ein Nutzer das von dir festgelegte API-Ratenlimit \u00fcberschreitet, gibt es einige Dinge, die du beachten solltest, um sicherzustellen, dass du ein positives Nutzererlebnis bieten und gleichzeitig deine Ressourcen sch\u00fctzen kannst. Einige Fragen, die du stellen solltest, und \u00dcberlegungen, die du anstellen musst, sind:<\/p>\n<h4>Welchen Fehlercode und welche Meldung werden deine Nutzer sehen?<\/h4>\n<p>Als Erstes musst du deine Nutzer\/innen dar\u00fcber informieren, dass sie die festgelegte API-Ratengrenze \u00fcberschritten haben. Dazu musst du die API-Antwort in eine voreingestellte Meldung \u00e4ndern, die das Problem erkl\u00e4rt. <i>Es ist wichtig, dass der Statuscode f\u00fcr diese Antwort 429 &#8222;Too Many Requests&#8220; lautet<\/i> Es ist auch \u00fcblich, das Problem im Antworttext zu erkl\u00e4ren. Hier ist ein Beispiel f\u00fcr einen Antworttext, der so aussehen k\u00f6nnte:<\/p>\n<pre><code class=\"language-js\">{\n    \"error\": \"Too Many Requests\",\n    \"message\": \"You have exceeded the set API rate limit of X requests per minute. Please try again in a few minutes.\",\n    \"retry_after\": 60\n}<\/code><\/pre>\n<p>Der oben gezeigte Beispiel-Antworttext nennt den Fehlernamen und die Fehlerbeschreibung und gibt au\u00dferdem eine Zeitspanne an (normalerweise in Sekunden), nach der der Nutzer erneut versuchen kann, Anfragen zu senden. Ein beschreibender Antworttext wie dieser hilft den Nutzern zu verstehen, was schief gelaufen ist und warum sie nicht die erwartete Antwort erhalten haben. Au\u00dferdem erfahren sie, wie lange sie warten m\u00fcssen, bevor sie eine weitere Anfrage senden k\u00f6nnen.<\/p>\n<h4>Werden neue Anfragen gedrosselt oder ganz gestoppt?<\/h4>\n<p>Ein weiterer Entscheidungspunkt ist, was zu tun ist, wenn ein Nutzer die festgelegte API-Rate \u00fcberschreitet. Normalerweise w\u00fcrdest du den Nutzer daran hindern, mit dem Server zu interagieren, indem du eine Antwort 429 &#8222;Too many requests&#8220; zur\u00fcckschickst, wie du oben gesehen hast. Du solltest aber auch einen anderen Ansatz in Betracht ziehen &#8211; die Drosselung.<\/p>\n<p>Anstatt den Zugriff auf die Serverressource komplett zu unterbinden, kannst du stattdessen die Gesamtzahl der Anfragen, die der Nutzer innerhalb eines bestimmten Zeitraums senden kann, verlangsamen. Das ist n\u00fctzlich, wenn du deinen Nutzern einen kleinen Klaps auf die Hand geben willst, sie aber trotzdem weiterarbeiten lassen willst, wenn sie ihr Anfragevolumen reduzieren.<\/p>\n<h3>Caching und Kreislaufunterbrechung in Betracht ziehen<\/h3>\n<p>API-Ratenbeschr\u00e4nkungen sind unangenehm &#8211; sie hindern deine Nutzer daran, mit deinen API-Diensten zu interagieren und sie zu nutzen. Besonders schlimm ist es f\u00fcr Nutzer\/innen, die immer wieder \u00e4hnliche Anfragen stellen m\u00fcssen, z. B. den Zugriff auf einen Wettervorhersagedatensatz, der nur w\u00f6chentlich aktualisiert wird, oder das Abrufen einer Liste von Optionen f\u00fcr ein Dropdown-Men\u00fc, das vielleicht nur alle paar Tage ge\u00e4ndert wird. In diesen F\u00e4llen w\u00e4re ein intelligenter Ansatz die Implementierung von Caching.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/de\/docs\/wordpress-hosting\/caching\/seiten-caching\/#site-cache-expiration\">Caching<\/a> ist eine Hochgeschwindigkeits-Speicherabstraktion, die in F\u00e4llen eingesetzt wird, in denen das Datenzugriffsvolumen hoch ist, die Daten sich aber nicht sehr oft \u00e4ndern. Anstatt einen API-Aufruf zu t\u00e4tigen, der m\u00f6glicherweise mehrere interne Dienste aufruft und hohe Kosten verursacht, k\u00f6nntest du die am h\u00e4ufigsten genutzten Endpunkte zwischenspeichern, so dass die zweite Anfrage aus dem statischen Cache bedient wird, was in der Regel schneller und kosteng\u00fcnstiger ist und die Arbeitslast deiner Hauptdienste verringern kann.<\/p>\n<p>Ein anderer Fall kann sein, dass du eine ungew\u00f6hnlich hohe Anzahl von Anfragen von einem Nutzer erh\u00e4ltst. Selbst wenn du ein Ratenlimit gesetzt hast, st\u00f6\u00dft er immer wieder an seine Kapazit\u00e4tsgrenzen und bekommt eine Ratenbegrenzung. Solche Situationen deuten darauf hin, dass die M\u00f6glichkeit eines API-Missbrauchs besteht.<\/p>\n<p>Um deine Dienste vor \u00dcberlastung zu sch\u00fctzen und ein einheitliches Erlebnis f\u00fcr den Rest deiner Nutzer zu gew\u00e4hrleisten, solltest du in Erw\u00e4gung ziehen, den verd\u00e4chtigen Nutzer komplett von der API auszuschlie\u00dfen. Dies wird als Circuit Breaking bezeichnet und klingt zwar \u00e4hnlich wie eine Ratenbegrenzung, wird aber in der Regel dann eingesetzt, wenn das System mit einer \u00dcberlast an Anfragen konfrontiert ist und Zeit braucht, um sich zu verlangsamen, damit es seine Dienstqualit\u00e4t wiederherstellen kann.<\/p>\n<h3>\u00dcberwache dein Setup genau<\/h3>\n<p>API-Ratenbegrenzungen sollen deine Ressourcen gleichm\u00e4\u00dfig auf deine Nutzer\/innen verteilen, k\u00f6nnen aber manchmal unn\u00f6tige Probleme f\u00fcr deine Nutzer\/innen verursachen oder sogar auf verd\u00e4chtige Aktivit\u00e4ten hinweisen.<\/p>\n<p>Wenn du eine <a href=\"https:\/\/kinsta.com\/de\/blog\/application-performance-monitoring\/\">robuste \u00dcberwachungsl\u00f6sung<\/a> f\u00fcr deine API einrichtest, kannst du herausfinden, wie oft die Ratenlimits von deinen Nutzern erreicht werden, ob du die allgemeinen Limits \u00fcberdenken musst, wobei du die durchschnittliche Arbeitsbelastung deiner Nutzer im Auge behalten solltest, und Nutzer identifizieren, die ihre Limits h\u00e4ufig \u00fcberschreiten (was darauf hindeuten k\u00f6nnte, dass sie m\u00f6glicherweise bald eine Erh\u00f6hung ihrer Limits ben\u00f6tigen oder auf verd\u00e4chtige Aktivit\u00e4ten \u00fcberwacht werden m\u00fcssen). In jedem Fall hilft dir ein aktives Monitoring, die Auswirkungen deiner API-Ratenbegrenzungen besser zu verstehen.<\/p>\n<h3>Ratenbegrenzung auf mehreren Ebenen implementieren<\/h3>\n<p>Eine Ratenbegrenzung kann auf mehreren Ebenen implementiert werden (Benutzer, Anwendung oder System). Viele Menschen machen den Fehler, Ratenbegrenzungen nur auf einer dieser Ebenen einzurichten und zu erwarten, dass damit alle m\u00f6glichen F\u00e4lle abgedeckt sind. Das ist zwar nicht unbedingt ein Anti-Pattern, kann sich aber in manchen F\u00e4llen als ineffektiv erweisen.<\/p>\n<p>Wenn die eingehenden Anfragen die Netzwerkschnittstelle deines Systems \u00fcberlasten, kann es sein, dass die Ratenbegrenzung auf Anwendungsebene nicht einmal in der Lage ist, die Arbeitslast zu optimieren. Deshalb ist es am besten, wenn du die Regeln zur Ratenbegrenzung auf mehreren Ebenen einrichtest, vorzugsweise auf den obersten Schichten deiner Architektur, um sicherzustellen, dass keine Engp\u00e4sse entstehen.<\/p>\n<h2>Arbeiten mit API-Ratenbeschr\u00e4nkungen<\/h2>\n<p>In diesem Abschnitt erf\u00e4hrst du, wie du die API-Ratenbeschr\u00e4nkungen f\u00fcr einen bestimmten API-Endpunkt testest und wie du eine Nutzungskontrolle auf deinem Client implementierst, um sicherzustellen, dass du deine API-Ratenbeschr\u00e4nkungen nicht aussch\u00f6pfst.<\/p>\n<h3>So testest du API-Ratenbeschr\u00e4nkungen<\/h3>\n<p>Um die Ratenbeschr\u00e4nkung f\u00fcr eine API zu ermitteln, solltest du immer zuerst die API-Dokumente lesen, um herauszufinden, ob die Beschr\u00e4nkungen klar definiert sind. In den meisten F\u00e4llen findest du in den API-Dokumenten das Limit und wie es implementiert wurde. Du solltest das API-Ratenlimit nur dann &#8222;testen&#8220;, wenn du es nicht aus den API-Dokumenten, dem Support oder der Community herausfinden kannst. Denn wenn du eine API testest, um ihr Tariflimit herauszufinden, wirst du dein Tariflimit mindestens einmal aussch\u00f6pfen, was finanzielle Kosten und\/oder die Nichtverf\u00fcgbarkeit der API f\u00fcr eine bestimmte Zeit zur Folge haben kann.<\/p>\n<p>Wenn du das Ratenlimit manuell ermitteln willst, solltest du zun\u00e4chst mit einem einfachen API-Testtool wie Postman beginnen, um manuell Anfragen an die API zu stellen und zu sehen, ob du ihr Ratenlimit aussch\u00f6pfen kannst. Wenn das nicht der Fall ist, kannst du ein Lasttest-Tool wie Autocannon oder Gatling verwenden, um eine gro\u00dfe Anzahl von Anfragen zu simulieren und zu sehen, wie viele Anfragen von der API bearbeitet werden k\u00f6nnen, bevor sie mit einem 429-Statuscode antwortet.<\/p>\n<p>Ein anderer Ansatz ist die Verwendung eines Tools zur \u00dcberpr\u00fcfung der Ratenbegrenzung wie das von AppBrokers <code><a href=\"https:\/\/github.com\/AppBroker\/rate-limit-test-tool\" target=\"_blank\" rel=\"noopener noreferrer\">rate-limit-test-tool<\/a><\/code>. Dedizierte Tools wie dieses automatisieren den Prozess f\u00fcr dich und bieten dir au\u00dferdem eine Benutzeroberfl\u00e4che, um die Testergebnisse sorgf\u00e4ltig zu analysieren.<\/p>\n<p>Wenn du dir jedoch nicht sicher bist, wie hoch die Ratenbegrenzung einer API ist, kannst du immer versuchen, deine Anforderungen an die Anfragen zu sch\u00e4tzen und auf deiner Client-Seite Limits einzurichten, um sicherzustellen, dass die Anzahl der Anfragen deiner Anwendung diese Zahl nicht \u00fcberschreitet. Wie du das machst, erf\u00e4hrst du im n\u00e4chsten Abschnitt.<\/p>\n<h3>Wie man API-Aufrufe drosselt<\/h3>\n<p>Wenn du von deinem Code aus eine API aufrufst, solltest du auf deiner Seite Drosselungen einrichten, um sicherzustellen, dass du nicht versehentlich zu viele API-Aufrufe machst und dein API-Limit aussch\u00f6pfst. Es gibt mehrere M\u00f6glichkeiten, dies zu tun. Eine beliebte Methode ist die Drosselmethode in der Lodash-Dienstprogramm-Bibliothek.<\/p>\n<p>Bevor du einen API-Aufruf drosseln kannst, musst du eine API erstellen. Hier ist ein Beispielcode f\u00fcr eine Node.js-basierte API, die die durchschnittliche Anzahl der Anfragen pro Minute auf der Konsole ausgibt:<\/p>\n<pre><code class=\"language-js\">const express = require('express');\nconst app = express();\n\n\/\/ maintain a count of total requests\nlet requestTotalCount = 0;\nlet startTime = Date.now();\n\n\/\/ increase the count whenever any request is received\napp.use((req, res, next) =&gt; {\n    requestTotalCount++;\n    next();\n});\n\n\/\/ After each second, print the average number of requests received per second since the server was started\nsetInterval(() =&gt; {\n    const elapsedTime = (Date.now() - startTime) \/ 1000;\n    const averageRequestsPerSecond = requestTotalCount \/ elapsedTime;\n    console.log(`Average requests per second: ${averageRequestsPerSecond.toFixed(2)}`);\n}, 1000);\n\napp.get('\/', (req, res) =&gt; {\n    res.send('Hello World!');\n});\n\napp.listen(3000, () =&gt; {\n    console.log('Server listening on port 3000!');\n});<\/code><\/pre>\n<p>Sobald diese Anwendung l\u00e4uft, wird sie die durchschnittliche Anzahl der Anfragen pro Sekunde ausgeben:<\/p>\n<pre><code>Average requests per second: 0\nAverage requests per second: 0\nAverage requests per second: 0<\/code><\/pre>\n<p>Als N\u00e4chstes erstellst du eine neue JavaScript-Datei mit dem Namen <b>test-throttle.js<\/b> und speicherst den folgenden Code darin:<\/p>\n<pre><code class=\"language-js\">\/\/ function that calls the API and prints the response\nconst request = () =&gt; {\n    fetch('http:\/\/localhost:3000')\n    .then(r =&gt; r.text())\n    .then(r =&gt; console.log(r))\n}\n\n\/\/ Loop to call the request function once every 100 ms, i.e., 10 times per second\nsetInterval(request, 100)<\/code><\/pre>\n<p>Sobald du dieses Skript ausf\u00fchrst, wirst du feststellen, dass die durchschnittliche Anzahl der Anfragen f\u00fcr den Server auf fast 10 ansteigt:<\/p>\n<pre><code>Average requests per second: 9.87\nAverage requests per second: 9.87\nAverage requests per second: 9.88<\/code><\/pre>\n<p>Was w\u00e4re, wenn diese API zum Beispiel nur 6 Anfragen pro Sekunde zulie\u00dfe? Du w\u00fcrdest die durchschnittliche Anzahl der Anfragen unter diesem Wert halten wollen. Wenn dein Client jedoch eine Anfrage aufgrund einer Benutzeraktivit\u00e4t sendet, wie z. B. das Klicken auf eine Schaltfl\u00e4che oder ein Scrollen, kannst du die Anzahl der API-Aufrufe m\u00f6glicherweise nicht begrenzen.<\/p>\n<p>Die Funktion <code>throttle()<\/code> aus der <code>lodash<\/code> kann hier helfen. Installiere zun\u00e4chst die Bibliothek, indem du den folgenden Befehl ausf\u00fchrst:<\/p>\n<pre><code>npm install lodash<\/code><\/pre>\n<p>Als N\u00e4chstes aktualisierst du die Datei <b>test-throttle.js<\/b> und f\u00fcgst den folgenden Code ein:<\/p>\n<pre><code class=\"language-js\">\/\/ import the lodash library\nconst { throttle } = require('lodash');\n\n\/\/ function that calls the API and prints the response\nconst request = () =&gt; {\n    fetch('http:\/\/localhost:3000')\n    .then(r =&gt; r.text())\n    .then(r =&gt; console.log(r))\n}\n\n\/\/ create a throttled function that can only be called once every 200 ms, i.e., only 5 times every second\nconst throttledRequest = throttle(request, 200)\n\n\/\/ loop this throttled function to be called once every 100 ms, i.e., 10 times every second\nsetInterval(throttledRequest, 100)<\/code><\/pre>\n<p>Wenn du dir jetzt die Serverprotokolle ansiehst, wirst du eine \u00e4hnliche Ausgabe sehen:<\/p>\n<pre><code>Average requests per second: 4.74\nAverage requests per second: 4.80\nAverage requests per second: 4.83\n<\/code><\/pre>\n<p>Obwohl deine Anwendung die Funktion <code>request<\/code> 10 Mal pro Sekunde aufruft, sorgt die Drosselfunktion daf\u00fcr, dass sie nur 5 Mal pro Sekunde aufgerufen wird, so dass du unter dem Ratenlimit bleibst. So kannst du die clientseitige Drosselung einrichten, um zu verhindern, dass die API-Ratenlimits ausgesch\u00f6pft werden.<\/p>\n<h2>H\u00e4ufige Fehler bei API-Ratenbeschr\u00e4nkungen<\/h2>\n<p>Wenn du mit ratenbegrenzten APIs arbeitest, kann es vorkommen, dass du verschiedene Antworten erh\u00e4ltst, die anzeigen, dass ein Ratenlimit \u00fcberschritten wurde. In den meisten F\u00e4llen erh\u00e4ltst du den Statuscode 429 mit einer Meldung, die einer der folgenden \u00e4hnelt:<\/p>\n<ul>\n<li>Anfragen an diese API haben das Ratenlimit \u00fcberschritten<\/li>\n<li>API-Ratenlimit \u00fcberschritten<\/li>\n<li>429 too many requests<\/li>\n<\/ul>\n<p>Die Meldung, die du erh\u00e4ltst, h\u00e4ngt jedoch von der Implementierung der API ab, die du verwendest. Diese Implementierung kann variieren, und einige APIs verwenden den Statuscode 429 m\u00f6glicherweise gar nicht. Hier sind einige andere Arten von Fehlercodes und Meldungen, die du bei der Arbeit mit APIs mit Ratenbegrenzung erhalten kannst:<\/p>\n<ul>\n<li><b>403 Forbidden<\/b> oder <b>401 Unauthorized<\/b>: Manche APIs behandeln deine Anfragen als unautorisiert und verweigern dir den Zugriff auf die Ressource<\/li>\n<li><b>503 Service Unavailable<\/b> oder <b>500 Internal Server Error<\/b>: Wenn eine API durch eingehende Anfragen \u00fcberlastet ist, kann sie anfangen, 5XX Fehlermeldungen zu senden, die anzeigen, dass der Server nicht in Ordnung ist. Dies ist in der Regel vor\u00fcbergehend und wird vom Dienstanbieter zu gegebener Zeit behoben.<\/li>\n<\/ul>\n<h2>Wie Top-API-Anbieter API-Ratenlimits implementieren<\/h2>\n<p>Bei der Festlegung der Ratenbegrenzung f\u00fcr deine API kann es hilfreich sein, einen Blick darauf zu werfen, wie einige der Top-API-Anbieter dies tun:<\/p>\n<ul>\n<li><b>Discord<\/b>: <a href=\"https:\/\/kinsta.com\/de\/blog\/slack-vs-discord\/\">Discord<\/a> setzt die Ratenbegrenzung auf zwei Arten um: Es gibt ein globales Ratenlimit von 50 Anfragen pro Sekunde. Neben dem globalen Limit gibt es auch routenabh\u00e4ngige Ratenlimits, die du beachten musst. Du kannst alles dar\u00fcber in dieser <a href=\"https:\/\/discord.com\/developers\/docs\/topics\/rate-limits\" target=\"_blank\" rel=\"noopener noreferrer\">Dokumentation<\/a> nachlesen. Wenn das Ratenlimit \u00fcberschritten wird, erh\u00e4ltst du eine HTTP 429 Antwort mit einem <code>retry_after<\/code> Wert, mit dem du warten kannst, bevor du eine weitere Anfrage sendest.<\/li>\n<li><b>Twitter<\/b>: Auch Twitter hat streckenspezifische Ratenlimits, die du in der <a href=\"https:\/\/developer.twitter.com\/en\/docs\/twitter-api\/rate-limits\" target=\"_blank\" rel=\"noopener noreferrer\">Dokumentation<\/a> nachlesen kannst. Sobald das Ratenlimit \u00fcberschritten wird, erh\u00e4ltst du eine HTTP 429-Antwort mit einem <code>x-rate-limit-reset<\/code> Header-Wert, der dir mitteilt, wann du den Zugriff wieder aufnehmen kannst.<\/li>\n<li><b>Reddit<\/b>: Im archivierten API-Wiki von Reddit steht, dass das Ratenlimit f\u00fcr den Zugriff auf die Reddit-API bei 60 Anfragen pro Minute liegt (nur \u00fcber OAuth2). Die Antwort auf jeden Reddit-API-Aufruf gibt die Werte f\u00fcr die Header <code>X-Ratelimit-Used<\/code>, <code>X-Ratelimit-Remaining<\/code> und <code>X-Ratelimit-Reset<\/code> zur\u00fcck, anhand derer du feststellen kannst, wann und wie lange das Limit \u00fcberschritten werden k\u00f6nnte<\/li>\n<li><b>Facebook<\/b>: Facebook legt auch routenbasierte Ratenlimits fest. So sind zum Beispiel die Aufrufe von Facebook-basierten Apps auf 200 * (Anzahl der App-Nutzer) Anfragen pro Stunde begrenzt. Die vollst\u00e4ndigen Details findest du <a href=\"https:\/\/developers.facebook.com\/docs\/graph-api\/overview\/rate-limiting\/\" target=\"_blank\" rel=\"noopener noreferrer\">hier<\/a>. Die Antworten der Facebook-API enthalten einen <code>X-App-Usage<\/code> oder einen <code>X-Ad-Account-Usage<\/code> Header, damit du wei\u00dft, wann deine Nutzung gedrosselt wird.<\/li>\n<\/ul>\n\n<h2>Zusammenfassung<\/h2>\n<p>Bei der Entwicklung von APIs ist es wichtig, den Datenverkehr optimal zu steuern. Wenn du deine Datenverkehrssteuerung nicht genau im Auge beh\u00e4ltst, wirst du bald mit einer \u00fcberlasteten und nicht funktionierenden API dastehen. Umgekehrt ist es bei der Arbeit mit einer ratenbegrenzten API wichtig zu verstehen, wie die Ratenbegrenzung funktioniert und wie du die API nutzen solltest, um maximale Verf\u00fcgbarkeit und Nutzung zu gew\u00e4hrleisten.<\/p>\n<p>In diesem Leitfaden erf\u00e4hrst du mehr \u00fcber die API-Ratenbegrenzung, warum sie notwendig ist, wie sie implementiert werden kann und welche Best Practices du bei der Arbeit mit API-Ratenbegrenzungen beachten solltest.<\/p>\n<p>Probiere das <a href=\"https:\/\/sevalla.com\/application-hosting\/\">Anwendungs-Hosting<\/a> von Kinsta aus und starte dein n\u00e4chstes <a href=\"https:\/\/kinsta.com\/de\/blog\/node-js-20\/\">Node.js<\/a>-Projekt noch heute!<\/p>\n<p><i>Arbeitest du mit einer ratenbegrenzten API? Oder hast du eine Ratenbegrenzung in deiner eigenen API implementiert? Lass es uns in den Kommentaren unten wissen!<\/i><\/p>\n","protected":false},"excerpt":{"rendered":"<p>APIs sind eine gro\u00dfartige M\u00f6glichkeit f\u00fcr Softwareanwendungen, miteinander zu kommunizieren. Sie erm\u00f6glichen es Softwareanwendungen, miteinander zu interagieren und Ressourcen oder Privilegien zu teilen. Heute bieten viele &#8230;<\/p>\n","protected":false},"author":199,"featured_media":63192,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[],"topic":[925],"class_list":["post-63191","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","topic-api"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>API-Ratenbegrenzung: Der ultimative Leitfaden - Kinsta\u00ae<\/title>\n<meta name=\"description\" content=\"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"API-Ratenbegrenzung: Der ultimative Leitfaden\" \/>\n<meta property=\"og:description\" content=\"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-27T07:00:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-10-01T19:15:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Jeremy Holcombe\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_DE\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jeremy Holcombe\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"21\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/\"},\"author\":{\"name\":\"Jeremy Holcombe\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\"},\"headline\":\"API-Ratenbegrenzung: Der ultimative Leitfaden\",\"datePublished\":\"2023-06-27T07:00:51+00:00\",\"dateModified\":\"2025-10-01T19:15:25+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/\"},\"wordCount\":4151,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg\",\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/\",\"url\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/\",\"name\":\"API-Ratenbegrenzung: Der ultimative Leitfaden - Kinsta\u00ae\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg\",\"datePublished\":\"2023-06-27T07:00:51+00:00\",\"dateModified\":\"2025-10-01T19:15:25+00:00\",\"description\":\"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"API\",\"item\":\"https:\/\/kinsta.com\/de\/thema\/api\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"API-Ratenbegrenzung: Der ultimative Leitfaden\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/de\/#website\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/de\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/de\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/de\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/\",\"https:\/\/x.com\/Kinsta_DE\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21\",\"name\":\"Jeremy Holcombe\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g\",\"caption\":\"Jeremy Holcombe\"},\"description\":\"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.\",\"sameAs\":[\"https:\/\/www.linkedin.com\/in\/jeremyholcombe\/\"],\"url\":\"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"API-Ratenbegrenzung: Der ultimative Leitfaden - Kinsta\u00ae","description":"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/","og_locale":"de_DE","og_type":"article","og_title":"API-Ratenbegrenzung: Der ultimative Leitfaden","og_description":"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.","og_url":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","article_published_time":"2023-06-27T07:00:51+00:00","article_modified_time":"2025-10-01T19:15:25+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg","type":"image\/jpeg"}],"author":"Jeremy Holcombe","twitter_card":"summary_large_image","twitter_description":"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.","twitter_image":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg","twitter_creator":"@Kinsta_DE","twitter_site":"@Kinsta_DE","twitter_misc":{"Verfasst von":"Jeremy Holcombe","Gesch\u00e4tzte Lesezeit":"21\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/"},"author":{"name":"Jeremy Holcombe","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21"},"headline":"API-Ratenbegrenzung: Der ultimative Leitfaden","datePublished":"2023-06-27T07:00:51+00:00","dateModified":"2025-10-01T19:15:25+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/"},"wordCount":4151,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg","inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/","url":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/","name":"API-Ratenbegrenzung: Der ultimative Leitfaden - Kinsta\u00ae","isPartOf":{"@id":"https:\/\/kinsta.com\/de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg","datePublished":"2023-06-27T07:00:51+00:00","dateModified":"2025-10-01T19:15:25+00:00","description":"Erfahre, wie du die Leistung optimierst, die Sicherheit erh\u00f6hst und deine API-Nutzung kontrollierst. Nutze die M\u00f6glichkeiten der API-Ratenbegrenzung mit diesem Leitfaden.","breadcrumb":{"@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#primaryimage","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/06\/api-rate-limit.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/de\/blog\/api-raten-limit\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/de\/"},{"@type":"ListItem","position":2,"name":"API","item":"https:\/\/kinsta.com\/de\/thema\/api\/"},{"@type":"ListItem","position":3,"name":"API-Ratenbegrenzung: Der ultimative Leitfaden"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/de\/#website","url":"https:\/\/kinsta.com\/de\/","name":"Kinsta\u00ae","description":"Schnelle, sichere und hochwertige Hosting-L\u00f6sungen","publisher":{"@id":"https:\/\/kinsta.com\/de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/de\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/de\/wp-content\/uploads\/sites\/5\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/de\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Kinsta-Deutschland-207459890108303\/","https:\/\/x.com\/Kinsta_DE","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/4eee42881d7b5a73ebb4f58dd5223b21","name":"Jeremy Holcombe","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/kinsta.com\/de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/0e17001f3bb37dbbe54fceef9bb547fa?s=96&d=mm&r=g","caption":"Jeremy Holcombe"},"description":"Senior Editor at Kinsta, WordPress Web Developer, and Content Writer. Outside of all things WordPress, I enjoy the beach, golf, and movies. I also have tall people problems.","sameAs":["https:\/\/www.linkedin.com\/in\/jeremyholcombe\/"],"url":"https:\/\/kinsta.com\/de\/blog\/author\/jeremyholcombe\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/users\/199"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/comments?post=63191"}],"version-history":[{"count":6,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63191\/revisions"}],"predecessor-version":[{"id":63294,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/posts\/63191\/revisions\/63294"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/pt"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/de"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/es"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/jp"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/translations\/fr"},{"href":"https:\/\/kinsta.com\/de\/wp-json\/kinsta\/v1\/posts\/63191\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media\/63192"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/media?parent=63191"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/tags?post=63191"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/de\/wp-json\/wp\/v2\/topic?post=63191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}