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

Permintaan Mengehadkan Kadar Pertengahan untuk Iris

Susan Sarandon
Susan Sarandonasal
2024-10-31 11:58:02987semak imbas

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"

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

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

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

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

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

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!

Kenyataan:
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