update md
Guardian 是一个基于 Swift 服务端框架 Vapor 3 的 Middleware,它根据IP地址 + 访问的 URL 来限制自客户端的请求数量,支持自定义返回数据类型。 它的工作原理是将客户端 IP 地址添加到缓存中,并计算客户端在添加 GuardianMiddleware 时定义的生命周期内可以做出的请求次数,并在达到限制时返回 HTTP 429(太多请求)。 当限制时间过了后,可以重新发起请求。
考虑到如果局域网内公用1个 IP 地址,可以适当增大单位阈值。
请将以下內容添加到您的 Package.swift 文件中:
Package.swift
let package = Package( name: "Project", dependencies: [ ... .package(url: "https://github.com/Jinxiansen/Guardian.git", from: "3.0.0"), ], targets: [ .target(name: "App", dependencies: ["Guardian", ... ]) ] )
Guardian 可配置的字段:最大访问次数、时间单位和要使用的缓存。 如果你不提供自己的缓存,Guardian 将自行创建在内存缓存。
Guardian
let guardian = GuardianMiddleware(rate: Rate(limit: 20, interval: .minute)) //例如:每个 api 地址每分钟限20次调用
在 configure.swift
configure.swift
import Guardian
var middlewares = MiddlewareConfig() middlewares.use(GuardianMiddleware(rate: Rate(limit: 22, interval: .minute))) services.register(middlewares)
let group = router.grouped(GuardianMiddleware(rate: Rate(limit: 25, interval: .minute))) group.get("welcome") { req in return "hello,world !" }
Guardian 增加了对自定义返回数据的支持,如下例所示:
返回一个 JSON 对象。
middlewares.use(GuardianMiddleware(rate: Rate(limit: 20, interval: .minute), closure: { (req) -> EventLoopFuture<Response>? in let view = ["result":"429","message":"The request is too fast. Please try again later!"] return try view.encode(for: req) }))
或返回leaf/Html * web页面,
middlewares.use(GuardianMiddleware(rate: Rate(limit: 25, interval: .minute), closure: { (req) -> EventLoopFuture<Response>? in let view = try req.view().render("leaf/busy") return try view.encode(for: req) }))
或者 自定义返回其他类型数据…
目前支持设置的时间单位有:
case .second case .minute case .hour case .day
如果有什么疑问和建议可以提1个 Issues 或联系我:
Email : hi@jinxiansen.com
Twitter : @Jinxiansen
Guardian is released under the MIT license. See LICENSE for details.
©Copyright 2023 CCF 开源发展委员会 Powered by Trustie& IntelliDE 京ICP备13000930号
[English]
Guardian 是一个基于 Swift 服务端框架 Vapor 3 的 Middleware,它根据IP地址 + 访问的 URL 来限制自客户端的请求数量,支持自定义返回数据类型。 它的工作原理是将客户端 IP 地址添加到缓存中,并计算客户端在添加 GuardianMiddleware 时定义的生命周期内可以做出的请求次数,并在达到限制时返回 HTTP 429(太多请求)。 当限制时间过了后,可以重新发起请求。
安装 📦
请将以下內容添加到您的
Package.swift
文件中:使用 🚀
使用方法有两种:
Guardian
可配置的字段:最大访问次数、时间单位和要使用的缓存。 如果你不提供自己的缓存,Guardian 将自行创建在内存缓存。在
configure.swift
方法二:
将中间件添加到路由组
支持自定义返回数据 📌
Guardian 增加了对自定义返回数据的支持,如下例所示:
返回一个 JSON 对象。
或返回leaf/Html * web页面,
或者 自定义返回其他类型数据…
Rate.Interval 的枚举类型
目前支持设置的时间单位有:
Contacts
如果有什么疑问和建议可以提1个 Issues 或联系我:
Email : hi@jinxiansen.com
Twitter : @Jinxiansen
License 📄
Guardian is released under the MIT license. See LICENSE for details.