sdforge 0.5.0-rc.4

Multi-protocol SDK framework with unified macro configuration
docs.rs failed to build sdforge-0.5.0-rc.4
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.
Visit the last successful build: sdforge-0.3.0

CI Status Version Docs.rs Downloads License Rust Coverage

中文 | English

一套宏注解,编译时装配多协议 SDK

✨ 功能特性🚀 快速开始📚 文档💻 示例🤝 参与贡献


🎯 一份注解,五种协议

#[forge] 宏标注一次函数,编译期生成 HTTP、MCP、gRPC、WebSocket、CLI 注册代码:


📋 目录


✨ 功能特性

特性 说明
🎯 统一接口定义 单个 #[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 add sdforge

或手动添加到 Cargo.toml(当前版本 0.5.0-rc.3):

[dependencies]
sdforge = { version = "0.5.0-rc.3", features = ["http"] }

最低要求:

  • Rust 1.97.1+(edition 2024,rust-toolchain.toml 固定工具链)
  • protoc:仅在启用 grpc feature 时需要(build.rs 编译 protobuf)

sdforge 默认不启用任何特性(default = []),按需显式启用协议特性。

💡 最小可运行示例

以下示例来自 examples/basic_cli.rscli feature):

use sdforge::cli::CliBuilder;
use sdforge::core::ApiError;
use sdforge::forge;

#[forge(name = "echo", version = "1.0", description = "Echo a greeting", cli = true)]
async fn echo(name: String) -> Result<String, ApiError> {
    Ok(format!("Hello, {}!", name))
}

#[tokio::main]
async fn main() {
    sdforge::init_all_plugins();
    // execute() 返回 `!`:内部完成 build / parse / dispatch / 输出 / exit
    CliBuilder::new().execute().await;
}
cargo run --example basic_cli --features cli -- echo --name world
# 输出:Hello, world!(Value::String 智能提取,无引号)

🧭 核心概念

  • #[forge] 注解描述一份端点元数据(名称、版本、路径、方法、描述),宏按启用的 feature 生成各协议注册代码,编译期经 inventory::submit!() 提交,启动时由 init_all_plugins() 一次性收集固化
  • 按协议选择入口:http::build() / rmcp stdio / SdForgeGrpcService / CliBuilder::execute()

🔧 #[forge] 宏参数

#[forge] 必填 nameversion;常用可选参数包括 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

grpcwebsocketstreamingopenapiclicache 均可独立于 http 启用,任意组合。


🎨 特性标志

default = []:所有特性均为可选,按需显式启用。

  • 独立于 httpmcp / grpc / openapi / cli / streaming / cache / timestamp / context / logging / inklog / i18n / simd-json / limiteron-integration
  • 派生自 httpsecurity(含 ratelimit-httpratelimitcache)、ratelimit-httpwebsocket(含 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/kit
  • full 覆盖 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 批量操作性能验证
cargo run --example basic_cli --features cli -- echo --name world
cargo run --example swagger_demo --features "docs http"
cargo run --example perf_regex_cache --features cache

综合示例库(workspace 成员 sdforge-examplesexamples/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 规范生成(OpenApiBuildergenerate_openapi_spec
combined/ 多特性组合完整示例(full_example.rs

生态集成示例(sdforge-examples 成员示例)

示例 启用特性 说明
oxcache_admin oxcache_admin_example BackendRegistry 暴露 oxcache 管理端点
dbnexus_gateway dbnexus_gateway_example 白名单表上的只读数据 API 网关(sqlite 内存库)
cargo run -p sdforge-examples --example oxcache_admin --features oxcache_admin_example

示例配置文件位于 examples/config/default.tomlminimal.tomlproduction.tomlapi-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 种组合)
cargo test --features "http,mcp" --workspace
cargo test --features full --workspace

# lib 测试(CI 覆盖率口径)
cargo test --features full --lib

# 覆盖率(CI 门禁 ≥80% 行覆盖,lefthook pre-push 同口径)
cargo llvm-cov --features full --lib --lcov --fail-under-lines 80

# 格式化与零告警 Lint
cargo fmt --all -- --check
cargo clippy --workspace --all-targets --all-features -- -D warnings

覆盖率测量经 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 checkdeny.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 响应缓存中间件、AppConfig security/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):依赖版本约束移除波浪号;补公开 bincode RUSTSEC-2025-0141 ignore 决策

📄 许可证

本项目基于 MIT + Commons Clause 双重条款发布:在 MIT 许可下可自由使用、修改与分发,但未经作者单独书面授权不得销售。详见 LICENSE

Copyright (c) 2026 Kirky.X


🙏 致谢

SDForge 站在优秀的开源生态之上,感谢以下项目:


📞 联系与支持


⭐ Star 历史

Star History Chart

💝 支持本项目

如果您觉得这个项目有用,请考虑给它一个 ⭐️!


Built with ❤️ using Rust