Nimble
一个简单优雅的 Rust Web 框架,灵感来自 Express,基于 Hyper。
特性
- ✨ 简单直观 - 类似 Express 的路由定义方式
- 🚀 基于 Hyper - 建立在可靠的 HTTP 库之上
- 📦 零成本抽象 - 使用 Rust 的强大类型系统
- 🎯 类型安全 - 编译时确保路由和处理器的类型正确
- 🔧 实用功能 - 内置 JSON、HTML、文件服务、重定向等响应类型
- 📁 自动静态文件服务 - 自动挂载
./static目录下的文件
快速开始
在 Cargo.toml 中添加依赖:
[]
= { = "https://github.com/yourusername/nimble" }
= { = "1", = ["full"] }
= { = "1", = ["derive"] } # 如果需要处理 JSON
创建一个简单的 Web 应用:
use ;
use Deserialize;
async
路由
Nimble 目前支持 GET 和 POST 方法,其中 POST 又分为普通表单和 JSON 两种形式。
use ;
new
.route
.route
.route;
注意:当前版本不支持路径参数(如
/users/:id),也不支持PUT、DELETE等方法。
响应类型
Nimble 提供了多种内置响应类型,均实现了 IntoResponse trait:
use ;
// HTML 响应
Html
// JSON 响应(要求类型实现 Serialize)
Json
// 纯文本响应
Text
// 临时重定向 (302)
Redirect
// 永久重定向 (301)
perm
// 文件响应(第一个参数为文件路径,第二个为是否强制下载)
File // 直接显示
File // 作为附件下载
// 仅状态码(空响应)
NOT_FOUND
此外,以下类型也自动实现了 IntoResponse:
&'static strStringVec<u8>()Result<T, E>其中T和E都实现了IntoResponse
静态文件服务
Router::new() 会自动扫描项目根目录下的 ./static 文件夹,并将所有文件映射为路由。
例如,目录结构如下:
├── static/
│ ├── css/
│ │ └── style.css
│ ├── js/
│ │ └── app.js
│ └── images/
│ └── logo.png
└── src/
└── main.rs
启动应用后,可通过以下 URL 访问:
http://localhost:3000/css/style.csshttp://localhost:3000/js/app.jshttp://localhost:3000/images/logo.png
文件下载
静态文件路由支持通过查询参数 ?download=true 强制下载:
http://localhost:3000/images/logo.png?download=true
请求参数
GET 请求
GET 处理函数接收一个 HashMap<String, String>,包含 URL 查询字符串中的参数。
use HashMap;
async
new.route;
POST 表单
普通 POST 处理函数同样接收 HashMap<String, String>,数据来自 application/x-www-form-urlencoded 格式的请求体。
async
POST JSON
使用 post_json 可以自动将 JSON 请求体反序列化为指定的类型(需实现 Deserialize)。
use Deserialize;
async
new.route;
错误处理
通过返回 Result<T, E> 可以方便地处理错误,其中 T 和 E 都必须实现 IntoResponse。
use ;
async
new.route;
许可证
本项目采用以下许可证之一:
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
- Apache 许可证 2.0 版 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
你可以自由选择使用其中任意一种。