探索Napa:构建Rack API的高效框架
Napa是一个简洁的框架,旨在帮助开发者利用Grape、Roar和ActiveRecord快速构建基于Rack的API服务。它的设计灵感来自于Rails,提供了生成器、中间件以及与Rails应用类似的控制台,让API开发和部署变得更加便捷。
安装
Napa以宝石(gem)的形式发布,可以通过以下命令安装:
gem install napa
或者,如果你使用Bundler,在你的Gemfile中添加:
gem 'napa'
然后运行:
$ bundle install
快速上手
查阅快速入门指南,了解如何创建一个简单的Napa服务。
使用
在终端输入napa
,你可以看到所有可用的功能:
Commands:
napa console [ENVIRONMENT] # 启动Napa控制台
napa deploy [TARGET] # 将服务部署到指定目标(如生产环境、预发布等)
napa generate [COMMAND] # 生成新代码
napa help [COMMAND] # 查看命令或特定命令的帮助信息
napa new <NAME> [PATH] # 创建新的Napa应用
napa server # 启动Napa服务器
napa version # 显示Napa版本号
控制台
类似于Rails的控制台,通过运行以下命令加载带有应用程序环境的IRB会话:
napa console
部署
Napa提供了一个CLI来通过设置git标签进行部署。这对于基于chef的部署特别有用,当git SHA发生变化时,触发部署。
napa deploy production
如果你想跳过“确定要部署?”的提示,可以使用--confirm
标志自动设置标签:
napa deploy production --confirm
Rake任务
执行rake -T
查看所有可用的Rake任务:
rake db:create # 创建数据库
rake db:drop # 删除数据库
rake db:migrate # 迁移数据库
rake db:reset # 创建测试数据库
rake db:schema:dump # 从db/migrate目录下生成可移植的数据库模式文件
rake db:schema:load # 根据db/schema.rb文件加载数据库模式
rake db:seed # 加载db/seeds.rb中的种子数据
rake git:set_tag[tag] # 设置标签,触发部署
rake git:verify # 检查git仓库是否准备好部署
rake routes # 显示所有Grape路由
中间件
Napa内建了许多Rack中间件,可以增加更多功能到你的项目中。
认证
认证中间件为所有请求添加了简单的基于头部的认证层。只需要在请求头中设置'Passwords' = 'Your Password'
即可。密码在.env
文件中定义。如果需要多个密码,可以用逗号分隔列表。例如:
ALLOWED_HEADER_PASSWORDS='password1,password2'
如果没有认证需求,只需移除该中间件。
健康检查
健康检查中间件增加了/health
端点,返回关于你的应用的信息。这是为了监控工具能够标准化监控多个服务的方式。这个端点将返回类似这样的响应:
{
"name": "service-name",
"hostname": "host-name",
"revision": "当前应用的git SHA",
"pid": 1234,
"parent_pid": 1233,
"napa_revision": "正在运行的Napa版本"
}
日志器
日志器模块用于创建统一的日志格式。日志器可通过Rack中间件启用,只需在config.ru
文件中添加以下行:
use Napa::Middleware::Logger
你还可以将日志器启用为ActiveRecord的日志器,通过在初始化器中添加如下代码:
ActiveRecord::Base.logger = Napa::Logger.logger
Napa::Logger.logger
返回日志对象的单例实例,所以它可以被传递给其他库或直接调用。例如:
Napa::Logger.logger.debug '一些调试消息'
清理敏感日志数据
有些请求可能包含敏感信息,如密码或信用卡号。为了保护这些信息,应从日志中过滤掉它们。 要在初始化器中实现这一点,添加以下代码:
Napa::ParamSanitizer.filter_params = [:password, :password_confirmation, :cvv, :card_number]
请注意数组中的键仅作示例,应替换为您参数中包含敏感数据的键。
未过滤的请求示例(...表示其他信息):
{ ... "message":{"request":{"method":"POST","path":"/example","query":"name=Test%20User%200039\u0026password=password", ... "params":{"name":"Test User 0039","password":"password"} ...}}}
已过滤的请求示例(...表示其他信息):
{ ... "message":{"request":{"method":"POST","path":"/example","query":"name=Test%20User%200039\u0026password=[FILTERED]", ... "params":{"name":"Test User 0039","password":"[FILTERED]"} ...}}}
StatsD
有两个中间件可用于启用StatsD报告,分别为RequestStats
和DatabaseStats
。它们可以在config.ru
文件中独立启用:
use Napa::Middleware::RequestStats
use Napa::Middleware::DatabaseStats
RequestStats会记录应用的请求计数和响应时间。
DatabaseStats会记录ActiveRecord的查询时间。
配置
要在应用程序中配置StatsD,您需要提供STATSD_HOST
和STATSD_PORT
环境变量。如有必要,如果您的StatsD主机需要API密钥(如HostedGraphite),则可以通过STATSD_API_KEY
环境变量配置。
日志记录
如果您想在日志中看到StatsD的报告,可以将日志器连接到Napa日志器,以便在日志中查看请求。
Statsd.logger = Napa::Logger.logger
缓存
Napa提供了一个简单的ActiveSupport::Cache
包装器,让你能像在Rails中一样轻松访问它。Napa.cache
提供了ActiveSupport::Cache::Store
中所有的方法。例如:
Napa.cache.read
Napa.cache.write
Napa.cache.fetch
...
默认情况下,它使用:memory_store
,但你可以通过设置存储方式来使用其他缓存策略,如Memcache:
Napa.cache = :dalli_store
排序
您可以包含名为Napa::SortableApi
的选装模块在任何API中。要在helpers
块中包含此模块,请添加include SortableApi
。
SortableApi
接受params[:sort]
参数,格式为field1,field2,-field3
,其中field1
和field2
用于升序排序,field3
用于降序排序。例如,-field4,field1
相当于ORDER BY field4 DESC, field1
。
向sorted_from_params(ar_relation, params[:sort])
传入一个ActiveRecord::Relation
实例作为ar_relation
,并传入一个逗号分隔的字段名字符串作为params[:sort]
。
问题与特性请求
如果您发现错误或有功能建议,请在Github上提交问题。
贡献
- 分叉
- 创建新分支(
git checkout -b my-new-feature
) - 提交更改(
git commit -am 'Add some feature'
) - 推送到分支(
git push origin my-new-feature
) - 创建拉取请求
现在,准备好探索Napa的强大功能,加速您的API开发之旅吧!
HunyuanImage-3.0
HunyuanImage-3.0 统一多模态理解与生成,基于自回归框架,实现文本生成图像,性能媲美或超越领先闭源模型00ops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。C++043Hunyuan3D-Part
腾讯混元3D-Part00GitCode-文心大模型-智源研究院AI应用开发大赛
GitCode&文心大模型&智源研究院强强联合,发起的AI应用开发大赛;总奖池8W,单人最高可得价值3W奖励。快来参加吧~0285Hunyuan3D-Omni
腾讯混元3D-Omni:3D版ControlNet突破多模态控制,实现高精度3D资产生成00Spark-Chemistry-X1-13B
科大讯飞星火化学-X1-13B (iFLYTEK Spark Chemistry-X1-13B) 是一款专为化学领域优化的大语言模型。它由星火-X1 (Spark-X1) 基础模型微调而来,在化学知识问答、分子性质预测、化学名称转换和科学推理方面展现出强大的能力,同时保持了强大的通用语言理解与生成能力。Python00GOT-OCR-2.0-hf
阶跃星辰StepFun推出的GOT-OCR-2.0-hf是一款强大的多语言OCR开源模型,支持从普通文档到复杂场景的文字识别。它能精准处理表格、图表、数学公式、几何图形甚至乐谱等特殊内容,输出结果可通过第三方工具渲染成多种格式。模型支持1024×1024高分辨率输入,具备多页批量处理、动态分块识别和交互式区域选择等创新功能,用户可通过坐标或颜色指定识别区域。基于Apache 2.0协议开源,提供Hugging Face演示和完整代码,适用于学术研究到工业应用的广泛场景,为OCR领域带来突破性解决方案。00- HHowToCook程序员在家做饭方法指南。Programmer's guide about how to cook at home (Chinese only).Dockerfile09
- PpathwayPathway is an open framework for high-throughput and low-latency real-time data processing.Python00
项目优选









