Heim >Backend-Entwicklung >Golang >Fordern Sie Middleware zur Ratenbegrenzung für Iris an
Die Rate-Middleware bietet Ratenbegrenzungsfunktionen für das Iris-Web-Framework. Es ermöglicht Entwicklern, die Anzahl der Anfragen an ihre Anwendungen zu kontrollieren, um eine faire Nutzung sicherzustellen und Missbrauch zu verhindern. Die Middleware basiert auf dem Token-Bucket-Algorithmus, einer beliebten Methode zur Ratenbegrenzung.
Um die Tarif-Middleware zu verwenden, müssen Sie sie in Ihre Iris-Anwendung importieren:
import "github.com/kataras/iris/v12/middleware/rate"
Um den Ratenbegrenzer verwenden zu können, müssen Sie eine Iris-Anwendung erstellen und die Middleware registrieren. Nachfolgend finden Sie ein Beispiel für die Einrichtung des Ratenbegrenzers:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") limit := rate.Limit(1, 5, rate.PurgeEvery(time.Minute, 5*time.Minute)) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Dieses Beispiel erlaubt 1 Anfrage pro Sekunde mit einer maximalen Burst-Größe von 5. Außerdem werden alte Einträge jede Minute gelöscht, wenn sie 5 Minuten lang nicht gesehen wurden.
Dieses Beispiel zeigt, wie die Rate verwendet wird. Jeder Helfer zum Einrichten eines Ratenbegrenzers:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Use rate.Every helper to set up the rate limiter. limit := rate.Limit(rate.Every(time.Minute), 5) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Dieses Beispiel zeigt, wie ein Ratenbegrenzer eingerichtet wird, der einen API-Schlüssel anstelle der Remote-IP-Adresse des Clients verwendet:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Use API key for rate limiting. app.Use(useAPIKey) limit := rate.Limit(rate.Every(time.Minute), 300, rate.PurgeEvery(5*time.Minute, 15*time.Minute)) app.Use(limit) app.Get("/list", list) app.Listen(":8080") } func useAPIKey(ctx iris.Context) { apiKey := ctx.Header("X-API-Key") if apiKey == "" { ctx.StopWithStatus(iris.StatusForbidden) return } rate.SetIdentifier(ctx, apiKey) ctx.Next() } func list(ctx iris.Context) { ctx.JSON(iris.Map{"key": "value"}) }
Dieses Beispiel zeigt, wie man einen benutzerdefinierten Handler so einstellt, dass er ausgeführt wird, wenn das Ratenlimit überschritten wird:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Set a custom exceed handler. limit := rate.Limit(1, 5, rate.ExceedHandler(func(ctx iris.Context) { ctx.StopWithStatus(429) })) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Dieses Beispiel zeigt, wie benutzerdefinierte Daten für jeden Kunden gespeichert werden:
package main import ( "time" "github.com/kataras/iris/v12" "github.com/kataras/iris/v12/middleware/rate" ) func main() { app := iris.New() app.Logger().SetLevel("debug") // Store custom data for each client. limit := rate.Limit(1, 5, rate.ClientData(func(ctx iris.Context) any { return ctx.RemoteAddr() })) app.Use(limit) app.Get("/", index) app.Get("/other", other) app.Listen(":8080") } func index(ctx iris.Context) { ctx.HTML("<h1>Index Page</h1>") } func other(ctx iris.Context) { ctx.HTML("<h1>Other Page</h1>") }
Ratenbegrenzung: Die rate.Limit-Funktion wird verwendet, um einen neuen Ratenbegrenzer zu erstellen. Es benötigt drei Parameter:
Token-Bucket-Algorithmus: Dieser Algorithmus steuert die Anforderungsrate, indem er einen Token-Bucket verwaltet. Jede Anfrage verbraucht ein Token und Token werden mit einer festen Rate zum Bucket hinzugefügt. Wenn der Bucket leer ist, wird die Anfrage abgelehnt.
Der Token-Bucket-Algorithmus ist eine einfache und effiziente Möglichkeit, die Anfragerate zu steuern. Es funktioniert wie folgt:
Weitere Informationen finden Sie im Wikipedia-Artikel zu Token Bucket.
Diese Middleware bietet eine robuste und flexible Möglichkeit, Ratenbegrenzung in Ihren Iris-Anwendungen zu implementieren. Durch die Verwendung des Token-Bucket-Algorithmus wird eine faire Nutzung gewährleistet und Missbrauch verhindert, wodurch Ihre Anwendung zuverlässiger und sicherer wird.
Weitere Beispiele und eine detaillierte Verwendung finden Sie in der offiziellen Iris-Dokumentation.
Das obige ist der detaillierte Inhalt vonFordern Sie Middleware zur Ratenbegrenzung für Iris an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!