6 个版本
0.2.2 | 2024年7月18日 |
---|---|
0.2.1 | 2024年7月18日 |
0.1.2 | 2024年7月18日 |
在 Web编程 中排名 1195
每月下载量 123
19KB
81 行
autortr_rocket
autortr_rocket
是一个专为 Rocket
框架设计的轻量级 Rust 库,旨在自动映射 Web 应用程序的路由。它通过自动注册带有自定义属性(如 #[request_mapping]
或 #[get_mapping]
等)的函数,简化了定义和管理 HTTP
路由的过程。
1.使用方法
将其添加到您的 Cargo.toml
[dependencies]
autortr_rocket = "0.2"
# And
# If necessary
rocket = "${version}"
lazy_static = "${version}"
ctor = "${version}"
2.API
2.0.宏定义
#[request_mapping]
命名空间
方法
GET
POST
PUT
PATCH
DELETE
HEAD
路径
数据
<表单>
- …
get_mapping
默认
#[get_mapping("${path}")]
命名空间
路径
数据
<表单>
post_mapping
- 与上述
get_mapping
相同
- 与上述
put_mapping
- 与上述
get_mapping
相同
- 与上述
patch_mapping
- 与上述
get_mapping
相同
- 与上述
delete_mapping
- 与上述
get_mapping
相同
- 与上述
head_mapping
- 与上述
get_mapping
相同
- 与上述
2.1.导入
use autortr_rocket::prelude::*;
2.2.控制器
API
函数。
2.2.1.GET
// Default mount base-path is: "/"
app.mount("/", routes![get_fn]);
// GET: method == get; path == "/get"
// -> rocket: #[get("/get")]
// -> HTTP: http://127.0.0.1:8000/get
#[request_mapping(method = "get", path = "/get")]
fn get_fn() -> &'static str {
"Hello, get!"
}
2.2.2.POST
// POST: method == post; path == "/post"
// -> rocket: #[post("/post")]
// -> HTTP: http://127.0.0.1:8000/post
#[request_mapping(method = "post", path = "/post")]
fn post_fn() -> &'static str {
"Hello, post!"
}
2.2.3.PUT
// PUT: method == put; path == "/put"
// -> rocket: #[put("/put")]
// -> HTTP: http://127.0.0.1:8000/put
#[request_mapping(method = "put", path = "/put")]
fn puf_fn() -> &'static str {
"Hello, put!"
}
2.2.4.PATCH
// PATCH: method == patch; path == "/patch"
// -> rocket: #[patch("/patch")]
// -> HTTP: http://127.0.0.1:8000/patch
#[request_mapping(method = "patch", path = "/patch")]
fn patch_fn() -> &'static str {
"Hello, patch!"
}
2.2.5.DELETE
// DELETE: method == delete; path == "/delete"
// -> rocket: #[delete("/delete")]
// -> HTTP: http://127.0.0.1:8000/delete
#[request_mapping(method = "delete", path = "/delete")]
fn delete_fn() -> &'static str {
"Hello, delete!"
}
2.2.5.命名空间
通过 namespace
属性自定义挂载基础路径。
Rocket's
基础
app.mount("/namespace", routes![namespace_fn]);
// GET: namespace == rocket, method == get; path == "/namespace"
// -> rocket: #[get("/namespace")]
// -> rocket: mount: /rocket/namespace
// -> HTTP: http://127.0.0.1:8000/rocket/namespace
#[request_mapping(namespace = "/rocket", method = "get", path = "/namespace")]
fn namespace_fn() -> &'static str {
"Hello, namespace!"
}
2.3.App 实例
fn configure() -> AdHoc {
AdHoc::on_ignite("Configure Rocket", |rocket| async {
println!("Running additional initialization");
rocket
})
}
// ----------------------------------------------------------------
// 1.Populate Rocket instance.
// -> auto-mount by Autortr
let rocket_app = app(); // Rocket<Build>
// 2.Configure
// rocket_app.[...]
// 3.Launch
// let _ = app.attach(configure())[.xxx.yyy.zzz].launch().await?;
let _ = rocket_app.attach(configure()).launch().await?;
Ok(())
2.3.1.launch
#[rocket::launch]
fn rocket() -> _ {
let app = app();
app.attach(configure())
}
2.3.2.main
#[rocket::main]
async fn main() -> Result<(), rocket::Error> {
let app = app();
let _ = app.attach(configure()).launch().await?;
Ok(())
}
2.4.Next
2.4.1.其他
的 Web 框架
- …
依赖项
~15-46MB
~786K SLoC