actix-web-schema
一个为 actix-web 提供模式化开发支持的工具库。通过派生宏简化路由定义和响应处理,让你的代码更加简洁和声明式。
特性
#[service]- 通过 trait 定义 HTTP 服务,自动生成路由配置#[response]- 通过结构体定义响应格式,自动实现Responder#[request]- 通过结构体定义请求格式,自动实现Deserialize- 统一的响应格式包装(
{code: 0, data: ...}) - 类型安全的路由定义
- 零运行时开销
安装
在 Cargo.toml 中添加:
[]
= "0.1"
快速开始
定义服务
使用 #[service] 宏将 trait 转换为 HTTP 服务:
use service;
use web;
/// 用户服务
定义请求
使用 #[request] 宏定义请求结构:
use request;
定义响应
使用 #[response] 宏定义响应结构:
use response;
use Serialize;
// User 自动实现 Responder,响应格式为:
// {"code": 0, "data": {"id": 1, "name": "...", "email": "..."}}
完整示例
use ;
use ;
// 定义响应结构
// 定义服务
// 定义请求结构
// 实现服务
async
访问 GET /hello/world 返回:
访问 POST /login 返回:
工作原理
#[service] 宏
#[service] 宏处理 trait 定义:
- 为每个带有 HTTP 方法属性的方法生成路由配置
- 创建对应的
Service结构体并实现HttpServiceFactory - 过滤掉 HTTP 方法属性,保持原有 trait 定义
#[response] 宏
#[response] 宏处理结构体定义:
- 自动添加
#[derive(Serialize)] - 实现
Respondertrait - 以统一格式
{"code": 0, "data": ...}返回 JSON 响应
#[request] 宏
#[request] 宏处理结构体定义:
- 自动添加
#[derive(Deserialize)] - 用于定义请求体结构,可直接作为
web::Json<T>的类型参数
支持的 HTTP 方法
GET-#[get("/path")]POST-#[post("/path")]PUT-#[put("/path")]DELETE-#[delete("/path")]PATCH-#[patch("/path")]HEAD-#[head("/path")]OPTIONS-#[options("/path")]
项目结构
actix-web-schema/
├── actix-web-schema/ # 主库
│ └── src/lib.rs # 导出宏
└── actix-web-schema-macro/ # 过程宏实现
└── src/lib.rs # 宏定义
License
MIT OR Apache-2.0
贡献
欢迎提交 Issue 和 Pull Request!