Rate-Limiting
Author Cloudapp
E.G.

Next.js 14 - API-Begrenzung mit Upstash Redis leicht gemacht.

1. Juli 2024
Inhaltsverzeichnis

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

Redis-Upstash
Redis-Upstash
Redis-Upstash-DB-Creation
Redis-Upstash-DB-Creation
Redis-Upstash-DB-Endpoint-password
Redis-Upstash-DB-Endpoint-password

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.

Quota-exceeded
Quota-exceeded

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:

Wenn Ihnen gefallen hat was Sie gelesen haben oder wenn es Ihnen sogar geholfen hat, dann würden wir uns über einen "Clap" 👏 oder einen neuen Follower auf unseren Medium Account sehr freuen.

Oder folgen Sie uns auf Twitter -> Cloudapp.dev

Verwandte Artikel