#rocket-web #web-apps #rocket-framework #rocket #web #web-framework #router

autortr_rocket

autortr_rocket 是一个专为 Rocket 框架设计的轻量级 Rust 库,旨在自动映射 Web 应用程序的路由。它通过自动注册带有自定义属性(如 #[request_mapping]#[get_mapping] 等)的函数,简化了定义和管理 HTTP 路由的过程。

6 个版本

0.2.2 2024年7月18日
0.2.1 2024年7月18日
0.1.2 2024年7月18日

Web编程 中排名 1195

Download history 326/week @ 2024-07-13 53/week @ 2024-07-20 2/week @ 2024-07-27

每月下载量 123

Apache-2.0

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