一个简单的 Vapor 4 速率限制中间件。
Rate-Limit-Limit
、Rate-Limit-Remaining
和 Rate-Limit-Reset
标头。要使用 RateLimitMiddleware
,请将以下内容添加到您的包清单中。
let package = Package(
...
dependencies: [
.package(url: "https://github.com/devmaximilian/RateLimitMiddleware.git", from: "4.0.0"),
],
targets: [
.target(
name: "<target name>",
dependencies: [
.product(name: "RateLimitMiddleware", package: "RateLimitMiddleware")
]
)
]
)
/// Limits requests to 60 requests per 30 minutes
let rateLimitMiddleware = RateLimitMiddleware(
limit: 60,
refreshInterval: .minutes(30)
)
要对每个端点实施应用程序范围的速率限制,请在 configure.swift
中注册中间件。
public func configure(_ app: Application) throws {
...
app.middleware.use(rateLimitMiddleware)
...
}
要对每个路由组实施速率限制,请为该特定路由组注册中间件。
let rateLimitedGroup = app.routes.grouped(rateLimitMiddleware)
rateLimitedGroup.get("hello") { _ in
return "Hello, world!"
}
或者
app.routes.group(rateLimitMiddleware) { builder in
builder.get("hello") { _ in
return "Hello, world!"
}
}
为了防止过期缓存永远留在内存中,可以选择启用自动清除。
/// Limits requests to 60 requests per 30 minutes
let rateLimitMiddleware = RateLimitMiddleware(
limit: 60,
refreshInterval: .minutes(30),
autoPurge: true
)
由于此功能可能会影响性能(当缓存清除运行时),因此默认情况下它是关闭的。