Heim >Backend-Entwicklung >Golang >Fordern Sie Middleware zur Ratenbegrenzung für Iris an

Fordern Sie Middleware zur Ratenbegrenzung für Iris an

Susan Sarandon
Susan SarandonOriginal
2024-10-31 11:58:02986Durchsuche

Request Rate Limiting Middleware for Iris

Überblick

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.

Installation

Um die Tarif-Middleware zu verwenden, müssen Sie sie in Ihre Iris-Anwendung importieren:

import "github.com/kataras/iris/v12/middleware/rate"

Verwendung

Grundeinrichtung

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.

Verwenden von rate.Every Helper

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>")
}

Verwendung des API-Schlüssels zur Ratenbegrenzung

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"})
}

Benutzerdefinierter Exceed-Handler

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>")
}

Benutzerdefinierte Kundendaten

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>")
}

Erläuterung

  • Ratenbegrenzung: Die rate.Limit-Funktion wird verwendet, um einen neuen Ratenbegrenzer zu erstellen. Es benötigt drei Parameter:

    • limit: Die maximal zulässige Anzahl von Anfragen pro Sekunde.
    • Burst: Die maximale Burst-Größe.
    • Optionen: Zusätzliche Optionen wie PurgeEvery zum Bereinigen alter Einträge.
  • 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.

Token-Bucket-Algorithmus

Der Token-Bucket-Algorithmus ist eine einfache und effiziente Möglichkeit, die Anfragerate zu steuern. Es funktioniert wie folgt:

  1. Initialisierung: Ein Bucket wird mit einer bestimmten Anzahl von Token initialisiert.
  2. Token-Hinzufügung: Token werden zu einem festen Preis zum Bucket hinzugefügt.
  3. Anfragebearbeitung: Jede Anfrage verbraucht ein Token. Wenn der Bucket leer ist, wird die Anfrage abgelehnt.
  4. Burst-Handhabung: Der Bucket kann eine maximale Anzahl von Tokens aufnehmen und ermöglicht so Verkehrsstöße.

Weitere Informationen finden Sie im Wikipedia-Artikel zu Token Bucket.

Abschluss

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn