#tide #路由 #http框架 #网络 #http

tide-fluent-routes

潮流流畅路由是一个为Tide实现流畅路由API的库

6个版本

0.1.5 2021年1月29日
0.1.4 2020年11月20日
0.1.3 2020年10月21日

#542HTTP服务器

Download history 13/week @ 2024-03-17 2/week @ 2024-03-24 18/week @ 2024-03-31 1/week @ 2024-04-14 4/week @ 2024-04-21 1/week @ 2024-04-28

每月127次下载

MIT/Apache

32KB
533

Tide Fluent Routes — 构建状态

Tide Fluent Routes是一个定义Tide HTTP框架路由的流畅API。目前它支持设置路径,您可以在路由树中的任何位置集成中间件,并且可以集成端点。一些使用Tide原生路由可以实现的功能(目前)尚不可行;

  • Tide前缀路由未实现
  • 不能嵌套Tide服务器

要使用此功能,您可以导入Tide Fluent Routes并使用use tide_fluent_routes::prelude::* 它在Tide::Server上引入了 register扩展方法,以注册来自RouteBuilder的路由。RouteBuilder可以使用route()方法初始化。您可以注册简单的端点,如下所示;

use tide_fluent_routes::prelude::*;

let mut server = tide::Server::new();

server.register(
   root()
       .get(endpoint)
       .post(endpoint));

流畅路由遵循Tide的约定。所有HTTP动词都支持相同的方式。路径可以使用at扩展,但此方法需要一个路由闭包,允许以树的形式构建路由。可以定义完整的路由树,如下所示;


server.register(
    root()
        .get(endpoint)
        .post(endpoint)
        .at("api/v1", |route| route
            .get(endpoint)
            .post(endpoint)
        )
        .at("api/v2", |route| route
            .get(endpoint)
            .post(endpoint)
        )
);

这消除了为路由树的局部部分引入变量的需要。

包括在其他函数中定义的路由看起来也非常自然,这使得从其他地方定义的较小树组合大型路由树变得容易;


fn v1_routes(routes: RouteSegment<()>) -> RouteSegment<()> {
    routes
        .at("articles", |route| route
            .get(endpoint)
            .post(endpoint)
            .at(":id", |route| route
                .get(endpoint)
                .put(endpoint)
                .delete(endpoint)
            )
        )
}

fn v2_routes(routes: RouteSegment<()>) -> RouteSegment<()> {
    routes
        .at("articles", |route| route
            .get(endpoint))
}

server.register(
    root()
        .get(endpoint)
        .post(endpoint)
        .at("api/v1", v1_routes)
        .at("api/v2", v2_routes));

在使用纯Tide路由时,很难看到哪些中间件对哪些端点是活动的。向树中添加中间件很容易,并且中间件的应用位置非常清晰;

server.register(
    root()
        .get(endpoint)
        .post(endpoint)
        .at("api/v1", |route| route
            .with(dummy_middleware, |route| route
                .get(endpoint)
            )
            .post(endpoint)
        )
        .at("api/v2", |route| route
            .get(endpoint)
            .get(endpoint)
        ),
);

可以使用serve_dir提供目录服务,这与正常Tide路由相同,流畅路由添加了serve_file方便方法以提供单个文件。

use tide_fluent_routes::prelude::*;
use tide_fluent_routes::fs::ServeFs;

let mut server = tide::Server::new();

server.register(
    root()
        .serve_file("files/index.html")
        .at("img", |r| r
            .serve_dir("files/images")
        )
);

版本:0.1.2

许可协议

在以下任一许可协议下授权

由您选择。

贡献

除非您明确说明,否则根据Apache-2.0许可证定义的,您有意提交以包含在工作中的任何贡献,将如上双许可,不附加任何额外条款或条件。

依赖项

~10–21MB
~313K SLoC