首页 > 解决方案 > Go 上的 API 速率限制

问题描述

我有一个如下所示的 routes.go 文件:

func GetRouter(services Servicesr) *mux.Router {
    router := mux.NewRouter()
    router.HandleFunc("/api/)

    return router
}

我想限制我的/api/services,我正在尝试做这样的事情:

在 limiter.go 我有这个:

package limiter
import (
    "golang.org/x/time/rate"
    "net/http"
)

var limiter = rate.NewLimiter(1, 3)

func Limit(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if limiter.Allow() == false {
            http.Error(w, http.StatusText(429), http.StatusTooManyRequests)
            return
        }

        next.ServeHTTP(w, r)
    })
}

但我似乎无法理解如何对 API/服务的 router.HandlerFunc 进行速率限制

标签: go

解决方案


router.HandleFunc将for 行更改为api/services以下内容:

router.Handle("/api/services", Limit(http.HandlerFunc(services.GetServices))).Methods(http.MethodGet)

推荐阅读