23 个版本
0.1.9 | 2020 年 12 月 13 日 |
---|---|
0.1.8 | 2020 年 11 月 20 日 |
0.1.7 | 2020 年 10 月 21 日 |
0.1.3 | 2020 年 9 月 15 日 |
0.0.5 | 2020 年 5 月 28 日 |
#596 in HTTP 服务器
用于 deadwiki
93KB
1.5K SLoC
~ vial: 一个微型微型框架 ~
Vial 是一个用于在 Rust 中创建小型网站的简易 Web "框架"。
它只包括一些基本功能
- 解析和路由 HTTP 请求
- 解析 POST 表单数据
- 提供静态文件(css,js)
其他一切... 好吧,那就看你了。
目标是尽可能少的依赖项 Web 库,你可以用它快速测试一个想法或启动一个个人项目。 单文件、服务器端应用程序?当然! 快速编译?当然请! 按需 依赖项?这才对!
这有点像野餐,音乐播放列表全是 90 年代音乐,你还得自带饮料。 和食物。
想了解更多,请继续阅读或访问以下链接之一
⚠ 状态: Vial 目前处于早期开发阶段。它将与 deadwiki 一起开发,但那是 严格 用于个人用途。请谨慎行事,并始终保持警觉。
~ 入门 ~
要开始,只需将 vial
添加到您的 Cargo.toml
[dependencies]
vial = "0.1"
现在您可以在应用程序中使用 use vial::prelude::*;
来引入通用类型,或者像其他任何软件包一样使用该软件包。
~ Hello World ~
按照惯例
vial::routes! {
GET "/" => |_| "Hello, world!";
}
fn main() {
vial::run!().unwrap();
}
为了更有条理,您可以直接路由到函数
use vial::prelude::*;
routes! {
GET "/echo" => echo;
POST "/echo" => post;
}
fn echo(_: Request) -> &'static str {
"<form method='POST'>
<input type='text' name='echo'/>
<input type='submit'/>
</form>"
}
fn post(req: Request) -> String {
format!(
"<h1>You said: {}</h1>",
req.form("echo").unwrap_or("You didn't say anything!")
)
}
fn main() {
vial::run!().unwrap();
}
要真正打破常规,您可以将其网站拆分为不同的模块
use vial;
mod wiki;
mod blog;
mod index {
use vial::prelude::*;
routes! {
GET "/" => |_| Response::from_file("index.html")
}
}
fn main() {
// The order matters here - if `wiki` and `blog` both define "/",
// the `mod index` version will match first and get run.
vial::run!(index, wiki, blog);
}
但嘿,当你可以写 Rust 时,谁还想浪费时间在 HTML 上? 启用 horror
功能,你就可以开始了
use vial::prelude::*;
#[macro_use]
extern crate horrorshow;
routes! {
GET "/" => |_| html! {
p {
: "You're looking for this: ";
a(href="/echo") { : "echo" }
}
};
GET "/echo" => echo;
POST "/echo" => post;
}
fn echo(_: Request) -> impl Responder {
html! {
form(method="POST") {
p {
: "Type something: ";
input(type="text", name="echo");
input(type="submit");
}
}
}
}
fn post(req: Request) -> impl Responder {
owned_html! {
h1: req.form("echo")
.unwrap_or("You didn't say anything!");
}
}
fn main() {
vial::run!().unwrap();
}
~ 奖励功能 ~
瓶默认不包含JSON或模板引擎等花哨的功能,但(将会提供)一些编译时可以激活的--features
来提高生产力
- 帽子:启用帽子:一个正派疯狂、基于HTML的模板语言。
- 恐怖:启用恐怖秀:一个小巧快速的基于宏的HTML构建器。
- json_serde:通过Serde提供
Request::json
和Response::with_json
功能。 - cookie:
Request::cookie()
,Response::with_cookie
和相关功能。 - 会话:支持会话。
- 上传:多部分表单数据(文件上传)
- 日志:访问日志
请注意:上面的列表是一个正在开发中的列表。
~ 热重载 ~
在调试模式下,您的资产将自动重新加载,包括适当的ETag支持,但您可能还想刷新您的Rust代码。
目前最简单的方法是使用cargo-watch
$ cargo install cargo-watch
$ cargo watch -x 'run --example hello_world'
~ 测试 ~
可以使用make test
在稳定的Rust的较新版本上运行测试。我们还使用GitHub Actions运行提交的测试。
瓶更愿意将所有内容放在tests/
中,而不是直接在src/*.rs
文件中包含测试。为了在测试中访问私有API,我们将它们设置为pub
,并使用#[doc(hidden)]
。感谢您的合作。
~ 许可 ~
瓶根据您的选择,采用以下任一许可
- Apache License,版本2.0,(LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT License(LICENSE-MIT或http://opensource.org/licenses/MIT)
依赖项
~0–0.9MB
~14K SLoC