Rack Middleware API限流技术文档
2024-12-23 01:13:14作者:咎竹峻Karen
1. 安装指南
此限流中间件已封装成gem,可以使用以下命令安装最新版:
sudo gem install jduff-api-throttling
如果需要使用最新源码,可以在GitHub上找到:jduff/api-throttling(这是dambalah/api-throttling的分支,包含了近期的一些改动)。
2. 项目使用说明
在Rack应用中,只需使用中间件并传递一些选项即可:
use ApiThrottling, :requests_per_hour => 3
这将设置每小时最多3次请求的限流,并使用Redis缓存来追踪。默认情况下,Rack::Auth::Basic用于基于每个用户进行请求限制。
中间件还支持以下选项:
:cache=>:redis:支持:memcache,:hash。也可以传入这些缓存的实例,或者使用Rails.cache。:auth=>false:如果你的中间件在其他地方进行了认证,可以设置此项。:key:自定义缓存键的生成方式。
使用所有选项的示例:
CACHE = MemCache.new
use ApiThrottling, :requests_per_hour => 100, :cache=>CACHE, :auth=>false,
:key=>Proc.new{|env,auth| "#{env['PATH_INFO']}_#{Time.now.strftime("%Y-%m-%d-%H")}" }
这将限制每个URL每小时100次请求,使用MemCache来存储计数。
3. 项目API使用文档
项目API主要是通过中间件进行调用,以下为中间件的API使用方法:
class ApiThrottling
def initialize(app, options={})
# 初始化方法,设置应用和选项
end
def call(env, options={})
# 调用方法,处理请求并应用限流逻辑
end
private
def bad_request
# 生成400 Bad Request响应
end
def over_rate_limit
# 生成503 Over Rate Limit响应
end
end
4. 项目安装方式
基础Rack应用安装
首先,确保安装了thin webserver:
sudo gem install thin
然后使用以下基础Rack应用进行测试:
use Rack::ShowExceptions
use Rack::Lint
run lambda {|env| [200, { 'Content-Type' => 'text/plain', 'Content-Length' => '12'}, ["Hello World!"] ] }
将代码保存为config.ru文件,并使用以下命令启动thin服务器:
thin --rackup config.ru start
现在可以使用以下命令测试服务是否正常运行:
curl -i http://localhost:3000
Redis安装
为了记录请求次数,需要安装Redis并使用其Ruby客户端库:
sudo gem install ezmobius-redis-rb
确保Redis服务器运行在默认端口6379上。
使用限流中间件
最后,在你的Rack应用中引入并配置限流中间件:
require 'api_throttling'
use Rack::Lint
use Rack::ShowExceptions
use ApiThrottling, :requests_per_hour => 3
run lambda {|env| [200, {'Content-Type' => 'text/plain', 'Content-Length' => '12'}, ["Hello World!"] ] }
现在,你可以尝试使用curl测试API,直到达到限流设置的限制。
登录后查看全文
热门项目推荐
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0152- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0112
项目优选
收起
暂无描述
Dockerfile
733
4.75 K
Ascend Extension for PyTorch
Python
618
795
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
433
395
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.01 K
1.01 K
Claude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed.
Get Started
Rust
1.18 K
152
deepin linux kernel
C
29
16
华为昇腾面向大规模分布式训练的多模态大模型套件,支撑多模态生成、多模态理解。
Python
145
237
暂无简介
Dart
983
252
昇腾LLM分布式训练框架
Python
166
198
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
1.68 K
989