レートミドルウェアは、Iris Web フレームワークにレート制限機能を提供します。これにより、開発者はアプリケーションへのリクエストのレートを制御し、公正な使用を保証し、悪用を防ぐことができます。このミドルウェアは、レート制限の一般的な方法であるトークン バケット アルゴリズムに基づいています。
レートミドルウェアを使用するには、それを Iris アプリケーションにインポートする必要があります:
import "github.com/kataras/iris/v12/middleware/rate"
レート リミッターを使用するには、Iris アプリケーションを作成し、ミドルウェアを登録する必要があります。以下は、レート リミッターを設定する方法の例です:
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>") }
この例では、最大バースト サイズ 5 で 1 秒あたり 1 つのリクエストが許可されます。また、5 分間表示されなかった古いエントリは 1 分ごとに削除されます。
この例は、レートの使用方法を示しています。レート リミッターを設定するためのすべてのヘルパー:
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>") }
この例は、クライアントのリモート IP アドレスの代わりに API キーを使用するレート リミッターを設定する方法を示しています。
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"}) }
この例は、レート制限を超えたときに実行されるカスタム ハンドラーを設定する方法を示しています。
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>") }
この例は、各クライアントのカスタム データを保存する方法を示しています。
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.Limit 関数は、新しいレート リミッターを作成するために使用されます。 3 つのパラメータを取ります:
トークン バケット アルゴリズム: このアルゴリズムは、トークンのバケットを維持することによってリクエストのレートを制御します。各リクエストはトークンを消費し、トークンは固定レートでバケットに追加されます。バケットが空の場合、リクエストは拒否されます。
トークン バケット アルゴリズムは、リクエストのレートを制御するためのシンプルかつ効率的な方法です。次のように動作します:
詳細については、トークン バケットに関するウィキペディアの記事を参照してください。
このミドルウェアは、Iris アプリケーションにレート制限を実装するための堅牢かつ柔軟な方法を提供します。トークン バケット アルゴリズムを使用することで、公正な使用が保証され、悪用が防止され、アプリケーションの信頼性と安全性が高まります。
その他の例と詳細な使用法については、Iris の公式ドキュメントを参照してください。
以上がIris のリクエストレート制限ミドルウェアの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。