Inhaltsverzeichnis
- Verwendeter Stack
- Zwei neue NPM Pakete
- Erste Schritte mit der Redis-Datenbank
- Einloggen und Erstellen der Redis DB
- Umgebungsvariablen hinzufügen (.env.local)
- Implementieren der Ratenbegrenzung in eine bestehende API Route
- Definieren des "Ratenbegrenzer"
- Kontrolle der Ratenbegrenzung
- Fehlermeldung
- Optimierung erforderlich für GlobalRatelimit
- Cloudapp-dev und bevor Sie uns verlassen
Sicherzustellen, dass ein System verfügbar ist, ist für jedes Produkt von entscheidender Bedeutung. Missbrauch kann jedoch die Ressourcen überlasten, oder es kann notwendig sein, die Nutzung zu kontrollieren und Gebühren zu erheben. Eine effektive Implementierung von Ratenbegrenzungen löst diese Probleme und kann nahtlos integriert werden. Da Ihr System bereits vorhanden ist, benötigen Sie eine Lösung, die in zustandslosen Umgebungen wie serverlosen Funktionen gut funktioniert, ohne zusätzliche Entwicklungszeit zu erfordern.
Hier ist das GitHub repo mit dem vollständigen Code, in dem Sie die beiden neuen Komponenten sehen können.
Beispielseite (Gehostet auf Vercel -> https://nextjs14-azureb2c-prisma.vercel.app/
Verwendeter Stack
Ich werde mit meinem Standard-Stack beginnen:
Next.js 14 als das Web-Framework (API Routes)
Upstash Redis, in Kombination mit den NPM Paketen @upstash/ratelimit und @upstash/redis
Vercel für das Hosting
Zwei neue NPM Pakete
@upstash/ratelimit - Implementiert bisher drei verschiedene standardisierte Algorithmen, und Sie können mehr darüber im Projekt lesen.README.
@upstash/redis - Wird für Lese und Schreibzugriffe auf die REDIS DB verwendet
Erste Schritte mit der Redis-Datenbank
Ratenbegrenzung mit einer einzigen Datenbank ist einfach zu implementieren. Beginnen Sie mit der Erstellung einer neuen Redis-Datenbank auf Upstash:
Einloggen und Erstellen der Redis DB



Umgebungsvariablen hinzufügen (.env.local)
Die zuvor kopierten Variablen werden jetzt verwendet
Implementieren der Ratenbegrenzung in eine bestehende API Route
Gehen wir zu einem bestehenden API-Router. Ich werde den Sitemap-Zähler verwenden, den ich in einem vorherigen Post erstellt habe.
Definieren des "Ratenbegrenzer"
In diesem Abschnitt definieren wir die Ratenbegrenzung und legen fest, dass nur ein Aufruf innerhalb von 45 Sekunden erlaubt ist.
Kontrolle der Ratenbegrenzung
Als nächsten Schritt definieren wir einen Bezeichner (der die öffentliche IP-Adresse, eine Benutzer-ID (für angemeldete Benutzer) usw. sein könnte).
Fehlermeldung
Wenn die Kontrolle fehl schlägt, dann wird ein Fehler "Quote überschritten" ausgegeben.

Optimierung erforderlich für GlobalRatelimit
Für Projekte in größerem Maßstab können Sie ein "GlobalRateLimit" mit über den Globus verteilten Knoten definieren.
import { GlobalRatelimit } from "@upstash/ratelimit"; import { Redis } from "@upstash/redis";Wie Sie sehen können, ist die Integration einfach. Der gleiche Ansatz kann für ein Abrechnungsmodell verwendet werden, bei dem der Kunde für eine bestimmte Anzahl von API-Aufrufen bezahlt.
Cloudapp-dev und bevor Sie uns verlassen
Danke, dass Sie bis zum Ende gelesen haben. Noch eine Bitte bevor Sie gehen: