Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
中文 | English
一套宏注解,编译时装配多协议 SDK
✨ 功能特性 • 🚀 快速开始 • 📚 文档 • 💻 示例 • 🤝 参与贡献
🎯 一份注解,五种协议
用 #[forge] 宏标注一次函数,编译期生成 HTTP、MCP、gRPC、WebSocket、CLI 注册代码:
📋 目录
- ✨ 功能特性
- 🚀 快速开始
- 🎨 特性标志
- 📚 文档
- 💻 示例
- 🏗️ 架构
- 🧪 测试
- 📊 性能
- 🔒 安全
- 🗺️ 开发路线图
- 🤝 参与贡献
- 📋 更新日志
- 📄 许可证
- 🙏 致谢
- 📞 联系与支持
- ⭐ Star 历史
✨ 功能特性
| 特性 | 说明 |
|---|---|
| 🎯 统一接口定义 | 单个 #[forge] 宏同时配置 HTTP、MCP、gRPC、WebSocket、CLI |
| ⚡ 零协议税 | 协议选择发生在编译期,运行期无协议探测或动态加载 |
| 🌐 多协议支持 | Axum 0.8、rmcp 3.2(MCP 2026-07-28 规范)、tonic、WebSocket、SSE、clap |
| 🔒 类型安全 | 接口定义编译期验证,trybuild 覆盖编译失败用例 |
| 🛡️ 安全特性 | API Key / JWT Bearer 认证、limiteron 限流、审计日志、安全头 |
| 💾 内存缓存 | oxcache 提供 LRU、模式失效、批量操作与统计,无数据库依赖 |
| 🔧 配置管理 | 自包含 TOML 配置,模块化默认值与 Builder 模式 |
| 📊 版本管理 | 内置 /api/{version} 多版本路由与 #[service_module] 模块前缀 |
| 📜 OpenAPI 3.1 | utoipa 编译期收集路由,运行时生成规范 + Swagger UI |
| 🌍 国际化 | ICU4X 本地化格式化与 Accept-Language 解析 |
| 🔭 可观测性 | Prometheus 指标、OTLP 导出、健康探针、优雅停机、请求上下文 |
| 🧩 特性组合 | 30+ Cargo features 按需装配,常驻核心不依赖任何协议栈 |
参数校验、声明式分页、ETag 条件请求、生命周期钩子、钩子管道、优雅停机、健康探针、Prometheus 指标、OTel 导出、请求上下文、响应时间戳、结构化日志、inklog 桥接、trait-kit 集成、SIMD JSON 等能力均以独立 feature 按需启用,逐项说明与默认值见 特性标志 一节。
🚀 快速开始
📦 安装
或手动添加到 Cargo.toml(当前版本 0.5.0-rc.3):
[]
= { = "0.5.0-rc.3", = ["http"] }
最低要求:
- Rust 1.97.1+(edition 2024,
rust-toolchain.toml固定工具链) - protoc:仅在启用
grpcfeature 时需要(build.rs编译 protobuf)
sdforge默认不启用任何特性(default = []),按需显式启用协议特性。
💡 最小可运行示例
以下示例来自 examples/basic_cli.rs(cli feature):
use CliBuilder;
use ApiError;
use forge;
async
async
# 输出:Hello, world!(Value::String 智能提取,无引号)
🧭 核心概念
#[forge]注解描述一份端点元数据(名称、版本、路径、方法、描述),宏按启用的 feature 生成各协议注册代码,编译期经inventory::submit!()提交,启动时由init_all_plugins()一次性收集固化- 按协议选择入口:
http::build()/ rmcp stdio /SdForgeGrpcService/CliBuilder::execute()
🔧 #[forge] 宏参数
#[forge] 必填 name 与 version;常用可选参数包括 path / method / status / description / tool_name / grpc_method / cli。完整参数表(含进阶参数与默认值)见 API 参考 的「#[forge] 参数」一节。
🌐 协议组合
| 目标 | features | 场景 |
|---|---|---|
| 仅 HTTP | ["http"] |
传统 REST API |
| 仅 MCP | ["mcp"] |
AI 工具集成 |
| HTTP + MCP 双协议 | ["http", "mcp"] |
同一份代码双入口 |
| 全量运行时特性 | ["full"] |
全部协议与能力(不含 simd-json/hex) |
grpc、websocket、streaming、openapi、cli、cache 均可独立于 http 启用,任意组合。
🎨 特性标志
default = []:所有特性均为可选,按需显式启用。
- 独立于
http:mcp/grpc/openapi/cli/streaming/cache/timestamp/context/logging/inklog/i18n/simd-json/limiteron-integration - 派生自
http:security(含ratelimit-http→ratelimit与cache)、ratelimit-http、websocket(含streaming)、health/metrics/graceful/validate/paginate/lifecycle/hooks/otel docs=openapi+cli(Swagger UI 挂载需另启用http)kit=trait-kit(health + lifecycle)+limiteron-integration+limiteron/kit+oxcache/kitfull覆盖 18 项运行时特性,不含simd-json/hex
📚 文档
| 文档 | 说明 |
|---|---|
| 📖 用户指南 | 从安装、核心概念到进阶用法的完整教程 |
| 📘 API 参考 | 核心类型与各 feature 门控的公开 API |
| 🏗️ 架构文档 | 设计原则、模块划分、数据流、安全与性能设计 |
| ⚡ 性能基线 | 运行时热路径 criterion 基线与回归口径 |
| 📶 编译期门控基准 | feature 门控 vs 全量打包的编译时间与产物体积 |
| 🔒 安全文档 | 漏洞报告流程、安全设计与最佳实践 |
| 🧾 测试场景 | 测试金字塔基线与 E2E 场景定义 |
| 📋 更新日志 | 每个版本的变更记录 |
| 🤝 贡献指南 | 开发环境、TDD 工作流与 PR 流程 |
| 📦 在线 API 文档 | docs.rs 自动生成的最新文档(all-features) |
💻 示例
根包示例(cargo run --example)
| 示例 | 所需特性 | 说明 |
|---|---|---|
basic_cli |
cli |
#[forge(cli = true)] + CliBuilder::execute() 一站式 CLI |
swagger_demo |
docs + http |
Swagger UI 路由 + OpenAPI JSON + axum serve |
perf_regex_cache |
cache |
正则缓存性能验证 |
perf_lru_eviction |
cache |
LRU 驱逐性能验证 |
perf_prefix_index |
cache |
前缀索引性能验证 |
perf_batch_ops |
cache |
批量操作性能验证 |
综合示例库(workspace 成员 sdforge-examples,examples/src/)
| 模块 | 内容 |
|---|---|
basics/ |
简单 API、响应构建、类型与错误处理 |
http/ |
路由(路径参数、查询参数)、中间件(CORS) |
mcp/ |
工具定义与注册、MCP 2026-07-28 迁移、MRTR 会话 |
security/ |
API Key 认证、认证失败场景、完整安全栈 |
cache/ |
高级缓存模式与性能验证 |
config/ |
配置管理(app_config.rs) |
streaming/ |
SSE 流式响应 |
websocket/ |
基础用法与聊天室 |
grpc/ |
gRPC 服务端 |
logging/ |
结构化日志 |
openapi/ |
OpenAPI 规范生成(OpenApiBuilder、generate_openapi_spec) |
combined/ |
多特性组合完整示例(full_example.rs) |
生态集成示例(sdforge-examples 成员示例)
| 示例 | 启用特性 | 说明 |
|---|---|---|
oxcache_admin |
oxcache_admin_example |
经 BackendRegistry 暴露 oxcache 管理端点 |
dbnexus_gateway |
dbnexus_gateway_example |
白名单表上的只读数据 API 网关(sqlite 内存库) |
示例配置文件位于 examples/config/(default.toml、minimal.toml、production.toml、api-key-auth.toml)。
🏗️ 架构
SDForge 由两个 crate 组成:macros/sdforge-macros 负责解析 #[forge] / #[service_module] 注解并按 feature 门控生成注册代码;sdforge 是运行时库。注册项编译期经 inventory::submit!() 提交、启动期由 init_all_plugins() 固化,各协议模块(http / mcp / grpc / websocket / streaming / cli)彼此独立、按 feature 编译,共享 core 的统一 handler 契约(HandlerArgs + HandlerState)。模块注册全景、仓库布局与设计取舍见 架构文档。
设计原则
编译时协议选择、inventory 注册模式、统一 handler 契约、三种构造模式(new() / builder() / with_dependencies())、零数据库五大原则的完整阐述见 架构文档。
🔄 核心执行路径
以 HTTP 请求热路径为例:请求经中间件栈(认证 → 限流 → 安全头 / CORS)进入版本路由匹配 /api/{version},由 forge handler 在统一 handler 契约(HandlerArgs + HandlerState)中执行业务逻辑,经 ServiceResponse 响应管道输出 JSON;MCP、gRPC、CLI 入口复用同一批 handler 与响应契约,中间件栈顺序、版本路由与响应管道由 http::build() / build_with_config() 装配。完整时序图与数据流见 架构文档。
🌐 一份注解,五种协议
#[forge] 宏按当前启用的 feature 生成对应协议的注册项(HTTP / MCP / gRPC / CLI / OpenAPI),未启用的协议不生成任何代码;MCP 经 Mcp-Method / Mcp-Name 头(或 stdio)路由,gRPC 经 SdForgeGrpcService::call() 按 grpc_method 分发,CLI 经 CliBuilder::execute() 完成解析、分发与退出码,协议之间无运行时耦合。编译期注册流与请求期数据流详见 架构文档。
🧪 测试
测试策略矩阵
| 层级 | 位置 | 说明 |
|---|---|---|
| 单元测试 | src/ 内嵌 #[cfg(test)]、tests/unit/ |
模块级测试,含 proptest 属性测试(src/tests/property_tests.rs) |
| 集成测试 | tests/integration/ |
覆盖 http / mcp / grpc / websocket / security / cache / streaming / openapi / cli / docs / health_probes / graceful_shutdown / validate / paginate / etag / lifecycle / otel_export / status_code / rbac 等协议与特性组合 |
| 宏测试 | tests/macros/、macros/tests/ |
trybuild 编译失败用例与宏展开验证 |
| E2E | tests/e2e/ |
e2e_advanced 多域 E2E 场景(12 域规模基线见 测试场景) |
| 示例综合测试 | examples/tests/ |
全 feature re-export 与跨协议 dispatch(77 个测试)及网关 E2E |
| 基准测试 | benches/、src/benches/ |
criterion:runtime_bench / config_and_cache_bench / sdforge_bench |
| Doc-tests | src/ 文档注释 |
rustdoc 内嵌示例 |
运行命令
# 与 CI 矩阵一致(http / mcp / http,mcp / http,security / http,cache /
# http,websocket / http,grpc / http,streaming / full 共 9 种组合)
# lib 测试(CI 覆盖率口径)
# 覆盖率(CI 门禁 ≥80% 行覆盖,lefthook pre-push 同口径)
# 格式化与零告警 Lint
覆盖率测量经 llvm-cov.toml 排除 build.rs 生成的 protobuf 代码(src/grpc/pb/)。
测试规模
约 2,900 个测试函数(src/ 2,015 + tests/ 704 + macros/ 59 + examples/ 126,grep 统计,截至 v0.5.0-rc.3)。
📊 性能
运行时热路径(criterion 基线)
plain_get 路由分发中位延迟约 553 ns(约 1.81 M req/s),1 个路径参数约 604 ns;HandlerArgs 装配与 JSON 序列化/反序列化等完整基线、环境口径与复现命令见 性能基线。
编译时门控收益(feature 门控 vs 全量打包)
http only 相比 full 节省约 47% 编译时间、框架库 rlib 体积缩减约六成、唯一依赖少 82 个 crate;完整数据与方法论见 编译期门控基准(2026-07-03 实测,AMD Ryzen 9 9950X / rustc 1.93.1 / WSL2)。
🔒 安全
🚨 漏洞上报
请勿通过公开 issue 报告安全漏洞。 请使用 GitHub Security Advisories 私密披露通道提交,响应时限与流程见 安全文档。
🛡️ 安全设计要点
认证(API Key / JWT Bearer 与密钥长度强制)、fail-safe 默认值(默认绑定 127.0.0.1)、不可伪造的客户端 IP、审计签名、错误脱敏、输入防御(MCP schema 校验与 1 MiB 载荷上限)等设计与取舍,详见 架构文档 与 安全文档。
🔍 供应链安全
CI 安全门禁常开:cargo deny check(deny.toml 策略)+ cargo audit,配合 CodeQL、Dependabot 与 pre-commit 密钥扫描(detect-secrets);发布前另设 tiangang SAST 与 diting 审查门槛,见 贡献指南 发布流程。
🗺️ 开发路线图
🤝 参与贡献
欢迎贡献!开发环境初始化(工具链、protoc、lefthook / pre-commit 钩子)、TDD 工作流、特性组合校验与 Conventional Commits 提交规范(commit-msg 钩子强制校验),见 贡献指南。
📋 更新日志
详见 CHANGELOG.md。最近版本要点:
- [0.5.0-rc.3] (2026-09-10):
ResponseCacheLayer响应缓存中间件、AppConfigsecurity/cache 字段、AuditSink审计存储抽象与InklogAuditSink - [0.5.0-rc.2] (2026-09-07):
#[forge(status = <code>)]自定义成功状态码、i18n_key参数与翻译注册表、rmcp 2.2 → 3.2 - [0.4.7] (2026-07-23):依赖版本约束移除波浪号;补公开
bincodeRUSTSEC-2025-0141 ignore 决策
📄 许可证
本项目基于 MIT + Commons Clause 双重条款发布:在 MIT 许可下可自由使用、修改与分发,但未经作者单独书面授权不得销售。详见 LICENSE。
Copyright (c) 2026 Kirky.X
🙏 致谢
SDForge 站在优秀的开源生态之上,感谢以下项目:
- Axum / Tower — HTTP 服务与中间件
- rmcp — MCP 官方 Rust SDK
- Tonic / Prost — gRPC 与 protobuf
- utoipa — OpenAPI 规范生成
- clap — 命令行解析
- inventory — 编译期注册
- ICU4X — 国际化
- base 工作区姊妹项目 oxcache、limiteron、trait-kit、inklog、dbnexus
📞 联系与支持
- 🐛 Issue:github.com/Kirky-X/sdforge/issues
- 💬 讨论:github.com/Kirky-X/sdforge/discussions
- 🏠 仓库:https://github.com/Kirky-X/sdforge
- 📖 文档:https://docs.rs/sdforge
- 👤 维护者:Kirky.X
⭐ Star 历史
💝 支持本项目
如果您觉得这个项目有用,请考虑给它一个 ⭐️!
Built with ❤️ using Rust