برنامه نویسی

میان افزار محدود کننده نرخ درخواست برای Iris

Summarize this content to 400 words in Persian Lang

نمای کلی

را rate میان‌افزار قابلیت‌های محدودکننده نرخ را برای چارچوب وب Iris فراهم می‌کند. این به توسعه دهندگان اجازه می دهد تا نرخ درخواست ها را به برنامه های خود کنترل کنند، از استفاده منصفانه اطمینان حاصل کنند و از سوء استفاده جلوگیری کنند. میان افزار بر اساس الگوریتم سطل توکن است که یک روش محبوب برای محدود کردن نرخ است.

نصب و راه اندازی

برای استفاده از rate میان افزار، باید آن را در برنامه 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(“https://dev.to/”, index)
app.Get(“/other”, other)

app.Listen(“:8080”)
}

func index(ctx iris.Context) {
ctx.HTML(“”)
}

func other(ctx iris.Context) {
ctx.HTML(“”)
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این مثال به 1 درخواست در ثانیه با حداکثر اندازه پشت سر هم 5 اجازه می دهد. همچنین ورودی های قدیمی را اگر به مدت 5 دقیقه دیده نشده باشند، هر دقیقه پاک می کند.

با استفاده از rate.Every یاور

این مثال نحوه استفاده از rate.Every کمک کننده برای تنظیم یک محدود کننده نرخ:

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(“https://dev.to/”, index)
app.Get(“/other”, other)

app.Listen(“:8080”)
}

func index(ctx iris.Context) {
ctx.HTML(“”)
}

func other(ctx iris.Context) {
ctx.HTML(“”)
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده از کلید API برای محدود کردن نرخ

این مثال نحوه راه‌اندازی یک محدودکننده نرخ را نشان می‌دهد که از یک کلید API به جای آدرس IP راه دور مشتری استفاده می‌کند:

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

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سفارشی Exceed Handler

این مثال نشان می دهد که چگونه می توان یک کنترل کننده سفارشی را تنظیم کرد تا در صورت تجاوز از حد مجاز اجرا شود:

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(“https://dev.to/”, index)
app.Get(“/other”, other)

app.Listen(“:8080”)
}

func index(ctx iris.Context) {
ctx.HTML(“”)
}

func other(ctx iris.Context) {
ctx.HTML(“”)
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

داده های مشتری سفارشی

این مثال نحوه ذخیره داده های سفارشی برای هر مشتری را نشان می دهد:

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(“https://dev.to/”, index)
app.Get(“/other”, other)

app.Listen(“:8080”)
}

func index(ctx iris.Context) {
ctx.HTML(“”)
}

func other(ctx iris.Context) {
ctx.HTML(“”)
}

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح

محدود کردن نرخ: rate.Limit تابع برای ایجاد یک محدود کننده نرخ جدید استفاده می شود. سه پارامتر می گیرد:

limit: حداکثر تعداد درخواست های مجاز در هر ثانیه.

burst: حداکثر اندازه انفجار.

options: گزینه های اضافی مانند PurgeEvery برای تمیز کردن ورودی های قدیمی

الگوریتم سطل توکن: این الگوریتم با نگهداری یک سطل توکن، نرخ درخواست ها را کنترل می کند. هر درخواست یک توکن مصرف می کند و توکن ها با نرخ ثابتی به سطل اضافه می شوند. اگر سطل خالی باشد، درخواست رد می شود.

الگوریتم سطل توکن

الگوریتم سطل نشانه روشی ساده و کارآمد برای کنترل نرخ درخواست ها است. به صورت زیر عمل می کند:

مقداردهی اولیه: یک سطل با تعداد معینی توکن مقداردهی اولیه می شود.

اضافه کردن توکن: توکن ها با نرخ ثابت به سطل اضافه می شوند.

رسیدگی به درخواست: هر درخواست یک توکن مصرف می کند. اگر سطل خالی باشد، درخواست رد می شود.

انفجار انفجار: سطل می‌تواند حداکثر تعداد توکن را در خود جای دهد، که امکان انبوه ترافیک را فراهم می‌کند.

برای جزئیات بیشتر، به مقاله ویکی پدیا در مورد سطل توکن مراجعه کنید.

نتیجه گیری

این میان افزار یک راه قوی و انعطاف پذیر برای اجرای محدودیت نرخ در برنامه های Iris شما ارائه می دهد. با استفاده از الگوریتم سطل توکن، استفاده منصفانه را تضمین می کند و از سوء استفاده جلوگیری می کند و برنامه شما را قابل اعتمادتر و ایمن تر می کند.

برای مثال‌های بیشتر و استفاده دقیق، به مستندات رسمی Iris مراجعه کنید.

نمای کلی

را rate میان‌افزار قابلیت‌های محدودکننده نرخ را برای چارچوب وب Iris فراهم می‌کند. این به توسعه دهندگان اجازه می دهد تا نرخ درخواست ها را به برنامه های خود کنترل کنند، از استفاده منصفانه اطمینان حاصل کنند و از سوء استفاده جلوگیری کنند. میان افزار بر اساس الگوریتم سطل توکن است که یک روش محبوب برای محدود کردن نرخ است.

نصب و راه اندازی

برای استفاده از rate میان افزار، باید آن را در برنامه 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("https://dev.to/", index)
    app.Get("/other", other)

    app.Listen(":8080")
}

func index(ctx iris.Context) {
    ctx.HTML("")
}

func other(ctx iris.Context) {
    ctx.HTML("")
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این مثال به 1 درخواست در ثانیه با حداکثر اندازه پشت سر هم 5 اجازه می دهد. همچنین ورودی های قدیمی را اگر به مدت 5 دقیقه دیده نشده باشند، هر دقیقه پاک می کند.

با استفاده از rate.Every یاور

این مثال نحوه استفاده از rate.Every کمک کننده برای تنظیم یک محدود کننده نرخ:

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("https://dev.to/", index)
    app.Get("/other", other)

    app.Listen(":8080")
}

func index(ctx iris.Context) {
    ctx.HTML("")
}

func other(ctx iris.Context) {
    ctx.HTML("")
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

استفاده از کلید API برای محدود کردن نرخ

این مثال نحوه راه‌اندازی یک محدودکننده نرخ را نشان می‌دهد که از یک کلید API به جای آدرس IP راه دور مشتری استفاده می‌کند:

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"})
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سفارشی Exceed Handler

این مثال نشان می دهد که چگونه می توان یک کنترل کننده سفارشی را تنظیم کرد تا در صورت تجاوز از حد مجاز اجرا شود:

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("https://dev.to/", index)
    app.Get("/other", other)

    app.Listen(":8080")
}

func index(ctx iris.Context) {
    ctx.HTML("")
}

func other(ctx iris.Context) {
    ctx.HTML("")
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

داده های مشتری سفارشی

این مثال نحوه ذخیره داده های سفارشی برای هر مشتری را نشان می دهد:

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("https://dev.to/", index)
    app.Get("/other", other)

    app.Listen(":8080")
}

func index(ctx iris.Context) {
    ctx.HTML("")
}

func other(ctx iris.Context) {
    ctx.HTML("")
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح

  • محدود کردن نرخ: rate.Limit تابع برای ایجاد یک محدود کننده نرخ جدید استفاده می شود. سه پارامتر می گیرد:

    • limit: حداکثر تعداد درخواست های مجاز در هر ثانیه.
    • burst: حداکثر اندازه انفجار.
    • options: گزینه های اضافی مانند PurgeEvery برای تمیز کردن ورودی های قدیمی
  • الگوریتم سطل توکن: این الگوریتم با نگهداری یک سطل توکن، نرخ درخواست ها را کنترل می کند. هر درخواست یک توکن مصرف می کند و توکن ها با نرخ ثابتی به سطل اضافه می شوند. اگر سطل خالی باشد، درخواست رد می شود.

الگوریتم سطل توکن

الگوریتم سطل نشانه روشی ساده و کارآمد برای کنترل نرخ درخواست ها است. به صورت زیر عمل می کند:

  1. مقداردهی اولیه: یک سطل با تعداد معینی توکن مقداردهی اولیه می شود.
  2. اضافه کردن توکن: توکن ها با نرخ ثابت به سطل اضافه می شوند.
  3. رسیدگی به درخواست: هر درخواست یک توکن مصرف می کند. اگر سطل خالی باشد، درخواست رد می شود.
  4. انفجار انفجار: سطل می‌تواند حداکثر تعداد توکن را در خود جای دهد، که امکان انبوه ترافیک را فراهم می‌کند.

برای جزئیات بیشتر، به مقاله ویکی پدیا در مورد سطل توکن مراجعه کنید.

نتیجه گیری

این میان افزار یک راه قوی و انعطاف پذیر برای اجرای محدودیت نرخ در برنامه های Iris شما ارائه می دهد. با استفاده از الگوریتم سطل توکن، استفاده منصفانه را تضمین می کند و از سوء استفاده جلوگیری می کند و برنامه شما را قابل اعتمادتر و ایمن تر می کند.

برای مثال‌های بیشتر و استفاده دقیق، به مستندات رسمی Iris مراجعه کنید.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا