8 个版本 (5 个破坏性版本)
0.5.0 | 2019 年 3 月 3 日 |
---|---|
0.4.0 | 2018 年 6 月 1 日 |
0.3.0 | 2017 年 3 月 29 日 |
0.2.0 | 2016 年 10 月 25 日 |
0.1.0 | 2015 年 8 月 15 日 |
#1269 在 HTTP 服务器
每月 48 次下载
用于 twelve_factor
18KB
267 行
Hyper Router
这个 cargo 是对伟大的 Hyper HTTP 库的一个小扩展。它基本上是添加了定义路由到请求处理器以及通过请求路径查询处理器的能力。
使用方法
要使用这个库,只需将其
hyper = "^0.12"
hyper-router = "^0.5"
添加到您的依赖项中。
extern crate hyper;
extern crate hyper_router;
use hyper::header::{CONTENT_LENGTH, CONTENT_TYPE};
use hyper::{Request, Response, Body, Method};
use hyper::server::Server;
use hyper::rt::Future;
use hyper_router::{Route, RouterBuilder, RouterService};
fn request_handler(_: Request<Body>) -> Response<Body> {
let body = "Hello World";
Response::builder()
.header(CONTENT_LENGTH, body.len() as u64)
.header(CONTENT_TYPE, "text/plain")
.body(Body::from(body))
.expect("Failed to construct the response")
}
fn router_service() -> Result<RouterService, std::io::Error> {
let router = RouterBuilder::new()
.add(Route::get("/greet").using(request_handler))
.build();
Ok(RouterService::new(router))
}
fn main() {
let addr = "0.0.0.0:8080".parse().unwrap();
let server = Server::bind(&addr)
.serve(router_service)
.map_err(|e| eprintln!("server error: {}", e));
hyper::rt::run(server)
}
此代码将启动 Hyper 服务器并将使用路由器来查找请求处理器。我们创建 Route
以确保在访问路径 /greet
时调用 basic_handler
处理器。
需要注意的事项
- 您可以将路径指定为正则表达式,以便可以匹配任何您想要的路径。
- 如果您有匹配多个路径的请求,则首先添加的路径将被选择。
这个库处于开发初期阶段,所以可能会有破坏性的更改。- 由于这个库相当受欢迎,所以我不会进行破坏性兼容性更改。
进一步开发
- 添加根据查询参数区分请求的能力。
等待您的反馈
我创建了这个小工具来帮助自己学习 Rust 并避免使用像 Iron 或 rustful 这样的大型框架。我只是想保持简单。
显然,我可能犯了一些错误或做出了不良的设计选择,所以我正在等待您的反馈!请通过 moriturius at GMail 联系我。您也可以在 项目的错误跟踪器 中创建问题。
依赖关系
~8MB
~156K SLoC