Le middleware de taux fournit des capacités de limitation de débit pour le framework Web Iris. Il permet aux développeurs de contrôler le taux de requêtes adressées à leurs applications, garantissant ainsi une utilisation équitable et évitant les abus. Le middleware est basé sur l'algorithme du token bucket, qui est une méthode populaire pour limiter le débit.
Pour utiliser le middleware de tarification, vous devez l'importer dans votre application Iris :
import "github.com/kataras/iris/v12/middleware/rate"
Pour utiliser le limiteur de débit, vous devez créer une application Iris et enregistrer le middleware. Vous trouverez ci-dessous un exemple de configuration du limiteur de débit :
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>") }
Cet exemple autorise 1 requête par seconde avec une taille de rafale maximale de 5. Il purge également les anciennes entrées toutes les minutes si elles n'ont pas été vues depuis 5 minutes.
Cet exemple montre comment utiliser le taux. Chaque assistant pour configurer un limiteur de débit :
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>") }
Cet exemple montre comment configurer un limiteur de débit qui utilise une clé API au lieu de l'adresse IP distante du client :
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"}) }
Cet exemple montre comment définir un gestionnaire personnalisé à exécuter lorsque la limite de débit est dépassée :
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>") }
Cet exemple montre comment stocker des données personnalisées pour chaque client :
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>") }
Rate Limiting : La fonction rate.Limit est utilisée pour créer un nouveau limiteur de débit. Cela prend trois paramètres :
Algorithme de seau de jetons : Cet algorithme contrôle le taux de requêtes en maintenant un seau de jetons. Chaque requête consomme un jeton et les jetons sont ajoutés au compartiment à un taux fixe. Si le seau est vide, la demande est refusée.
L'algorithme du token bucket est un moyen simple et efficace de contrôler le taux de requêtes. Cela fonctionne comme suit :
Pour plus de détails, reportez-vous à l'article Wikipédia sur Token Bucket.
Ce middleware offre un moyen robuste et flexible de mettre en œuvre une limitation de débit dans vos applications Iris. En utilisant l'algorithme du token bucket, il garantit une utilisation équitable et évite les abus, rendant votre application plus fiable et sécurisée.
Pour plus d'exemples et une utilisation détaillée, reportez-vous à la documentation officielle d'Iris.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!