3个版本 (重大更改)
0.3.0 | 2023年1月29日 |
---|---|
0.2.0 | 2023年1月28日 |
0.1.0 | 2023年1月26日 |
#721 在 HTTP服务器
37KB
681 行
哈罗
哈罗 是一个用 简单 和 同步 编写的 Web 框架。
该项目以 哈罗角色 命名。应用程序接口受到了 web.py 项目的启发。
动机
简而言之,异步Rust更难以使用,并且可能比同步Rust产生更高的维护负担,但作为回报,可以提供最佳性能。异步Rust的所有领域都在不断改进,因此这些问题的影响将随着时间的推移而减弱
https://rust-lang.github.io/async-book/01_getting_started/03_state_of_async_rust.html
正如异步书籍所说,异步Rust尚未成熟。虽然它带来了性能,但也导致了更高的维护负担。本项目旨在为Rust创建一个简单且最小的同步Web框架。
快速开始
使用 cargo 将 haro
添加为依赖项
cargo add haro
然后,在您的 main.rs 中
use haro::{Application, Request, Response, Handler};
use serde_json::json;
fn main() {
let mut app = Application::new("0:8080");
let hello_handler = HelloHandler {
name: "Haro".to_string(),
};
app.route("/", |_| Response::str("Hello Haro")); // route by closure
app.route("/input/:name", input); // route by function
app.route_handler("/hello", hello_handler); //route by `Handler` trait type
app.run();
}
fn input(req: Request) -> Response {
let data = json!({
"method":req.method(),
"args":req.args,
"params":req.params,
"data":req.data,
});
Response::json(data)
}
struct HelloHandler {
name: String,
}
impl Handler for HelloHandler {
fn call(&self, _: Request) -> Response {
Response::str(format!("hello {}", self.name))
}
}
http get "localhost:8080/"
HTTP/1.1 200 OK
content-length: 12
content-type: text/plain
Hello Haro
http post "localhost:8080/input/world?a=b" c=d
HTTP/1.1 200 OK
content-length: 77
content-type: application/json
{
"args": {
"a": "b"
},
"data": {
"c": "d"
},
"method": "POST",
"params": {
"name": "world"
}
}
更多示例
该仓库包含 更多示例,展示了如何将所有组件组合在一起。
功能
- 使用 函数/闭包/特质类型 进行URL路由
- 最小样板代码的请求和响应
- 查询参数
- POST数据
- JSON
- Cookie
- 中间件
- 模板(可选)
- 数据库(可选)
- 测试
- HTTP2
许可证
在以下许可证中选择其一
- Apache许可证版本2.0,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
依赖关系
~5–24MB
~347K SLoC