Rumah > pembangunan bahagian belakang > Golang > Permintaan Mengehadkan Kadar Pertengahan untuk Iris

Permintaan Mengehadkan Kadar Pertengahan untuk Iris

Susan Sarandon
Lepaskan: 2024-10-31 11:58:02
asal
1015 orang telah melayarinya

Request Rate Limiting Middleware for Iris

Gambaran keseluruhan

Perisian tengah kadar menyediakan keupayaan mengehadkan kadar untuk rangka kerja web Iris. Ia membolehkan pembangun mengawal kadar permintaan kepada aplikasi mereka, memastikan penggunaan yang adil dan mencegah penyalahgunaan. Perisian tengah adalah berdasarkan algoritma baldi token, yang merupakan kaedah popular untuk mengehadkan kadar.

Pemasangan

Untuk menggunakan perisian tengah kadar, anda perlu mengimportnya dalam aplikasi Iris anda:

import "github.com/kataras/iris/v12/middleware/rate"
Salin selepas log masuk

Penggunaan

Persediaan Asas

Untuk menggunakan pengehad kadar, anda perlu mencipta aplikasi Iris dan mendaftarkan perisian tengah. Di bawah ialah contoh cara menyediakan pengehad kadar:

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>")
}
Salin selepas log masuk

Contoh ini membenarkan 1 permintaan sesaat dengan saiz pecah maksimum 5. Ia juga membersihkan entri lama setiap minit jika ia tidak dilihat selama 5 minit.

Menggunakan kadar.Setiap Pembantu

Contoh ini menunjukkan cara menggunakan kadar.Setiap pembantu untuk menyediakan pengehad kadar:

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>")
}
Salin selepas log masuk

Menggunakan Kunci API untuk Mengehadkan Kadar

Contoh ini menunjukkan cara menyediakan pengehad kadar yang menggunakan kunci API dan bukannya alamat IP jauh pelanggan:

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"})
}
Salin selepas log masuk

Pengendali Melebihi Tersuai

Contoh ini menunjukkan cara menetapkan pengendali tersuai untuk dilaksanakan apabila melebihi had kadar:

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>")
}
Salin selepas log masuk

Data Pelanggan Tersuai

Contoh ini menunjukkan cara menyimpan data tersuai untuk setiap pelanggan:

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>")
}
Salin selepas log masuk

Penjelasan

  • Penghadan Kadar: Fungsi kadar.Had digunakan untuk mencipta pengehad kadar baharu. Ia memerlukan tiga parameter:

    • had: Bilangan maksimum permintaan yang dibenarkan sesaat.
    • pecah: Saiz letusan maksimum.
    • pilihan: Pilihan tambahan seperti PurgeEvery untuk membersihkan entri lama.
  • Algoritma Baldi Token: Algoritma ini mengawal kadar permintaan dengan mengekalkan baldi token. Setiap permintaan menggunakan token, dan token ditambahkan pada baldi pada kadar tetap. Jika baldi kosong, permintaan ditolak.

Algoritma Baldi Token

Algoritma baldi token ialah cara yang mudah dan cekap untuk mengawal kadar permintaan. Ia berfungsi seperti berikut:

  1. Permulaan: Baldi dimulakan dengan bilangan token tertentu.
  2. Tambahan Token: Token ditambahkan pada baldi pada kadar tetap.
  3. Pengendalian Permintaan: Setiap permintaan menggunakan token. Jika baldi kosong, permintaan ditolak.
  4. Pengendalian Letusan: Baldi boleh memuatkan bilangan maksimum token, membolehkan semburan trafik.

Untuk butiran lanjut, rujuk artikel Wikipedia tentang Token Bucket.

Kesimpulan

Perisian tengah ini menyediakan cara yang teguh dan fleksibel untuk melaksanakan pengehadan kadar dalam aplikasi Iris anda. Dengan menggunakan algoritma baldi token, ia memastikan penggunaan yang adil dan menghalang penyalahgunaan, menjadikan aplikasi anda lebih dipercayai dan selamat.

Untuk lebih banyak contoh dan penggunaan terperinci, rujuk dokumentasi rasmi Iris.

Atas ialah kandungan terperinci Permintaan Mengehadkan Kadar Pertengahan untuk Iris. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan