RUST WEB FRAMEWORK · v1.3.0

Bee Rust.

生产级 Rust Web 框架

Beego 的设计哲学,用 Rust 的 trait、macro 与类型系统重新表达。

  • 16crates
  • 334测试
  • 32安全检测器
  • 15数据引擎
Rusty,Bee Rust 的工程师蜜蜂:悬停时四片翅膀展开成环,前足抱着锈橙色工具盒
Rusty · 正在悬停调试
向下探索

01 · 为什么是 Bee Rust

把 Beego 的顺手,带进 Rust 的世界

Bee Rust 不是把 Go 代码逐行翻译成 Rust,而是把 Beego 的 MVC、命名空间、过滤器链重新拆解,用 trait 与 macro 做出 Rust 原生的表达。默认 full 特性开箱即用,最小核心只依赖 axum + tokio。

30s

开发体验

从创建项目到首个请求,30 秒以内。

<5%

控制器开销

对比裸 axum 开销 <5%;P99 路由延迟设计目标 <100µs。

<60s

编译速度

全量 release 编译 <60s,增量编译 <5s。

<5MB

二进制体积

仅 router 的最小应用 <5MB(strip + LTO)。

0

安全性

业务代码 0 unsafe;所有 FFI 封装在独立的 *-sys crate。

1.85+

兼容性

Rust 1.85+(edition 2024 要求),跟踪 stable。

02 · 功能全景

从路由到存储,一套框架全覆盖

Web、ORM、安全、配置、日志、缓存、Session、模板,以及五类存储引擎。每个 crate 都可以单独使用。

WEB

Web 核心

MVC 控制器、Context、命名空间路由、RESTful 方法注册与请求过滤器链。ctx.json() / text() / html() / redirect() / abort()。

bee_router
ORM

ORM

#[derive(Model)] + QuerySet、CRUD、三后端连接池(事务与超时控制)、非破坏性迁移、belongs_to / has_many / m2m、JSON 列与 chrono / rust_decimal 类型映射。

bee_orm
SEC

安全检测

security-rust 4 的 32 个内置检测器:XSS、SQL 注入、命令注入、SSRF、路径穿越、Log4Shell、reDoS 等。一行代码开启。

security
CFG

配置、日志、模板

INI / YAML / ENV 加载与热更新、基于 tracing 的多级日志、tera 模板渲染。

bee_configbee_logsbee_template
DB

多存储引擎

每类一套 trait:Redis、Memcached、Elasticsearch、OpenSearch、ClickHouse、Neo4j、NebulaGraph、ArangoDB、InfluxDB、IoTDB、QuestDB。

bee_kvbee_searchbee_graphbee_tsdb
CLI

CLI

创建脚手架、生成控制器与模型、热重载运行、打包发布,以及执行迁移。

bee_cli

功能迭代

四个版本,一条主线

查看完整版本日志

03 · 架构

分层,但不臃肿

一个轻量元 crate 重新导出可独立使用的能力。feature gate 保持内核精简,存储引擎按需开启。

元 crate
bee_rustre-export + feature flags

Web 层

bee_router路由 · 控制器 · 过滤器
bee_templatetera 模板
bee_sessionMemory · Redis · Cookie/Database 规划

数据层

bee_orm模型 · QuerySet · 连接池
bee_configINI / YAML / ENV
bee_cacheMemory · Redis · Memcache
bee_kvRedis · Memcached

工具层

bee_cli脚手架 · 代码生成 · 运行 · 打包 · 迁移
bee_logstracing 集成
存储引擎
关系型 SQLite · PostgreSQL · MySQL · TiDB bee_ormKV / 缓存 Redis · Memcached bee_kv bee_cache搜索 Elasticsearch · OpenSearch · ClickHouse bee_search图 Neo4j · NebulaGraph · ArangoDB bee_graph时序 InfluxDB · IoTDB · QuestDB bee_tsdb

search / graph / tsdb 按需开启,不在默认 full 内;每个存储后端都由独立 feature 门控。

请求过滤器链

  1. 安全检测
  2. Session 恢复
  3. 参数验证
  4. prepare
  5. handle
  6. finish

任何环节都可以中断,类似 Beego 的 Abort。

技术栈

axum 0.8tower 0.5tokio 1.xserde tera 1.xtracingclap 4thiserrorsyn + quote

编译期宏展开、trait 静态分发、后端按 feature 编译。

04 · 项目宠物

Rusty:一只把依赖锁死的工程师蜜蜂

琥珀金绒毛、三道炭黑条纹、四片透光翅膀,外加一只从不装花粉、只装依赖的锈橙工具盒。

Rusty 正面悬停,翅膀展开成环,前足抱着锈橙色工具盒RUSTY · 锈锈
名字
Rusty(锈锈)
物种
工程师蜜蜂
配色
#F5B301 #1F1A17 #B7410E
性格
工作狂、乐天派、轻度强迫症
  • 修蜂巢时用触角逐格检查,像跑 lint 一样较真。
  • 花粉篮里的依赖版本锁得死死的,谁动它跟谁急。
  • 追 bug 时悬停在半空不动,翅膀快得只剩一圈虚影。
  • 发布新版本那天,在蜂巢门口跳蜜蜂的 8 字摇摆舞。

它出现在 Logo、404 页、CLI 横幅与发布公告。

Bee Rust 社交预览卡:蜜白蜂巢背景上的 Bee Rust 字标与 Rusty
品牌卡 · 社交预览打开图片 ↗

项目宠物、图片、图标与表情不是开源资产,商业使用需取得授权;详见 ASSETS-LICENSE.md。

05 · 安装

三分钟,跑起来

需要 Rust 1.85+(edition 2024)与 Cargo;除 axum / tokio 自身依赖外,没有额外系统依赖。

01

创建项目

新建一个二进制 crate,然后加入元 crate。

terminal
cargo new hello-bee && cd hello-bee
cargo add bee_rust
02

或写入 Cargo.toml

tokio 与 axum 作为直接依赖;CLI 脚手架会自动写好这些。

Cargo.toml
[dependencies]
bee_rust = "1.3.0"
tokio = { version = "1", features = ["full"] }
axum = "0.8"
03

写 main.rs

注册一个命名空间路由,交给 axum 服务;与仓库中受端到端测试覆盖的 examples/hello 同形。

src/main.rs
async fn health() -> &'static str {
    "OK"
}

#[tokio::main]
async fn main() {
    let _log_handle = bee_rust::init().unwrap();
    let router = bee_rust::bee_router::Router::new()
        .ns("/api/v1", |ns| ns.get("/health", health));
    let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await.unwrap();
    axum::serve(listener, router.build()).await.unwrap();
}
04

运行并验证

启动服务,请求健康检查端点。

terminal
cargo run
curl http://localhost:8080/api/v1/health
OK
05

从源码构建

克隆工作区,构建全部 crate,跑完整测试。

terminal
git clone https://github.com/erikwang2013/bee-rust.git
cd bee-rust
cargo build --workspace
cargo test --workspace
06

安装 CLI

bee_cli 安装 bee-rust 二进制:脚手架、代码生成、热重载运行、打包。

terminal
cargo install bee_cli
bee-rust new my-app
cd my-app && cargo run

06 · 使用说明

从第一个路由,到第一张表

API 保持显式:注册路由、实现控制器、派生模型,然后查询。没有隐藏的魔法。

R

路由

路径语法同 axum 0.8:动态段写 {name};ns() 前缀与组内路径直接拼接。

router.rs
let router = Router::new()
    .ns("/api/v1", |ns| {
        ns.get("/users", list_users)
          .post("/users", create_user);
    });
C

控制器

实现 Controller trait;Context 提供 json / text / html / redirect / abort、session 与 params。

需要 async-trait = "0.1" 与 serde_json = "1"。

controller.rs
use async_trait::async_trait;
use bee_rust::bee_router::context::RouterError;
use bee_rust::prelude::*;

struct UserController;

#[async_trait]
impl Controller for UserController {
    async fn handle(&self, ctx: &mut Context)
        -> Result<(), RouterError> {
        ctx.json(&serde_json::json!({"users": []}))
    }
}
M

模型 + QuerySet

派生 Model,声明 table / column / pk / auto,链式过滤后执行;迁移只建表补列,不破坏既有数据。

model.rs
#[derive(Model)]
#[bee(table = "users")]
struct User {
    #[bee(pk, auto)]
    id: i64,
    name: String,
    age: Option<i32>,
    active: bool,
}

let adults = User::query()
    .filter_gt("age", 18)?
    .order_by("id")
    .limit(20)
    .all(&pool).await?;
Feature flags 速查
特性启用内容备注
fullrouter · orm · kv · config · logs · cache · session · security · template默认开启
routerbee_router · bee_session · bee_template · bee_config · bee_logsWeb 核心
ormbee_orm · bee_config · bee_cache模型 + QuerySet
securitysecurity-rust 4,32 个检测器过滤器链
search · graph · tsdb搜索、图、时序引擎按需开启,不在 full 内
orm-sqlite · orm-postgres · orm-postgres-tls · orm-mysql通过元 crate 转发 bee_orm 后端同样按需开启
orm-chrono · orm-rust_decimal日期 / DateTime / Decimal 字段映射按需开启
redis · memcached · memcache · elasticsearch · opensearch · clickhouse · neo4j · nebulagraph · arangodb · influxdb · iotdb · questdb每个存储后端一个特性,可直接开在子 crate 或经 bee_rust 转发不打包进 full
最小核心
bee_rust = { version = "1.3.0", default-features = false,
             features = ["router", "logs", "config"] }

参考资料

直接读原文,不看二手总结

仓库保留 13 语言 README、API 参考、更新日志与贡献指南;切换英文时链接会自动指向英文版。

07 · 常见问题

Bee Rust 常见问题

关于框架定位、与 Beego 的关系、支持的数据库以及如何跑起来。

Bee Rust 是什么?

Bee Rust 是一个生产级 Rust Web 框架。它把 Beego 的 MVC、命名空间与过滤器链带进 Rust,用 trait、macro 与类型系统重新表达,并提供 ORM、CLI 与统一的存储引擎抽象。

和 Beego 有什么区别?

不是逐行翻译。它保留 Beego 的顺手之处——MVC、命名空间路由、过滤器链——但用 Rust 原生方式实现。默认 full 特性开箱即用,最小核心只依赖 axum 与 tokio。

支持哪些数据库?

SQLite、PostgreSQL、MySQL、TiDB(bee_orm);Redis、Memcached;Elasticsearch、OpenSearch、ClickHouse;Neo4j、NebulaGraph、ArangoDB;InfluxDB、IoTDB、QuestDB。每个后端都由独立 feature 门控,详见架构。

如何安装?

需要 Rust 1.85+(edition 2024),然后执行 cargo add bee_rust,或用 bee-rust new my-app 创建项目。快速开始会从空 crate 走到健康检查端点。

可以用于生产吗?

可以。工作区有 334 个测试、三后端连接池(事务与超时控制)、非破坏性迁移,以及 32 个检测器的安全过滤器。业务代码 0 unsafe;FFI 封装在独立的 *-sys crate。

文档在哪里?

仓库保留 13 语言 README、完整 API 参考、更新日志与贡献指南;docs.rs 从源码渲染每个 crate 与 feature。

08 · 下载

下载,然后开始

已发布到 crates.io,GitHub 有版本标签,docs.rs 有完整 API 文档。选一条顺手的路。

最新1.3.02026-10-13
terminal
cargo add bee_rust

代码采用 Apache-2.0;视觉资产版权保留,详见 ASSETS-LICENSE.md。

09 · 支持

请 Rusty 吃一勺蜜

如果 Bee Rust 帮到了你,可以用微信支付或支付宝支持项目。

微信支付WANG KEXUN点击放大
支付宝WANG KEXUN点击放大

更多支持方式

银行转账等其他支持方式见 README。

打开 README 支持区块

使用微信或支付宝扫码支持 Bee Rust