7 个版本
使用旧的 Rust 2015
0.2.0 | 2019年10月21日 |
---|---|
0.1.5 | 2018年1月2日 |
0.1.4 | 2017年12月25日 |
0.1.2 | 2017年11月24日 |
0.1.0 | 2017年9月13日 |
#1975 in 网页编程
每月54次下载
在 5 crates 中使用
54KB
1K SLoC
Sapper
Sapper,一个用 Rust 编写的轻量级网页框架。
Sapper 专注于易用性和快速开发。它可以与 稳定的 Rust 一起使用。
Sapper 现在基于 hyper 0.10.13。
教程
查看 json 示例,您可以学习如何解析 http 参数,并返回 json;
查看 MVC diesel 示例,您可以学习如何使用数据库,如何渲染模板,以及如何重定向。
导入
在 Cargo.toml 中,
[dependencies]
sapper = "0.1"
基本示例
现在,您可以使用以下命令启动示例服务器:
cd examples/basic/
cargo build
cargo run
然后在浏览器中打开,访问
https://127.0.0.1:1337/
或
https://127.0.0.1:1337/test
或任何其他 URL 进行测试。
其他示例
基本基准
mike@mike-Vostro-3653:~/works2/wrk$ uname -a
Linux mike-Vostro-3653 4.10.0-21-generic #23-Ubuntu SMP Fri Apr 28 16:14:22 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
mike@mike-Vostro-3653:~/works2/wrk$ cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 94
model name : Intel(R) Core(TM) i3-6100 CPU @ 3.70GHz
cpu MHz : 832.183
cache size : 3072 KB
bogomips : 7392.00
...
mike@mike-Vostro-3653:~/works2/sapper/examples/tiny$ cargo run --release
Finished release [optimized] target(s) in 36.27 secs
Running `target/release/tiny`
Listening on http://127.0.0.1:1337
output: hello, world!
mike@mike-Vostro-3653:~/works2/wrk$ ./wrk -t2 -c100 -d30s http://127.0.0.1:1337
Running 30s test @ http://127.0.0.1:1337
2 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 21.73us 139.92us 16.02ms 99.87%
Req/Sec 235.94k 26.75k 259.73k 76.33%
7045973 requests in 30.04s, 598.04MB read
Requests/sec: 234536.10
Transfer/sec: 19.91MB
功能
- Sapper 仅提供基本框架;
- 三级粒度(全局、模块、功能处理器)中间件控制器和统一中间件表示;
- 类型安全抽象,与 hyper 保持相同的风格;
- 为了易于使用,将提供一些方便的宏来帮助编写业务逻辑;
- 全局对象跨请求;
哲学
类型化、分层控制和中间件。
类型化
在 Sapper 中,几乎每个重要的事物都是一个 Type
。它们是
- 每个模块是一个类型,不同的模块是不同的类型;
- 每个中间件为处理器提供一些(0 到 n)类型以获取值;
- 继承自 hyper 的类型化精神,所有头部、mime 等都应该使用类型进行操作。
分层控制
- Sapper 强制您在每个模块中放置路由器(在 main.rs 中,您不能写它,没有空间留给您写);
- Sapper 强制您将路由器绑定与处理器实现分开;
- Sapper 的插件处理器可以在应用级别包装器、模块级别包装器和每个处理器中使用。这三个级别的分层控制使得构建您的业务更加灵活。
中间件
洒泼的核心只包含路由系统、请求和响应定义、中间件系统和一些其他基本设施。几乎所有实用功能,如查询参数、体参数、cookie、session、json、xml、orm...,都是由相应的中间件提供的。
洒泼的中间件非常容易编写。一个Rust模块实现了中间件的原型功能。
fn (&mut Request) -> Result<()>; // before plugin
fn (&Request, &mut Response) -> Result<()>; // after plugin
可以将其视为洒泼的中间件。示例中间件:[sapper_query](https://github.com/sappworks/sapper_query)。
待办事项
- QueryParams (x-www-form-urlencoded);
- BodyParams (x-www-form-urlencoded);
- BodyJsonParams;
- 开发用基本静态文件服务;
- 跨请求共享全局对象;
- 宏定义;
- Multipart;
中间件
- 通过[sapper_query](https://github.com/sappworks/sapper_query)解析请求中的查询字符串;
- 通过[sapper_body](https://github.com/sappworks/sapper_body)解析请求体参数,包括URL编码表单、json类型、json到结构体的宏;
- 通过[sapper_logger](https://github.com/sappworks/sapper_logger)记录请求并计算其时间;
- 通过[sapper_session](https://github.com/sappworks/sapper_session)的cookie插件,并提供一个set_cookie辅助函数;
- 通过[sapper_tmpl](https://github.com/sappworks/sapper_tmpl)使用tera渲染模板;
相关项目
感谢以下项目
- 基于[hyper](https://github.com/hyperium/hyper) mio分支的[sapper](https://github.com/sappworks/sapper);
- 从[iron](https://github.com/iron/iron)中学习了许多设计;
- 从[router](https://github.com/iron/router)中窃取了路由代码;
- 使用[recognizer](https://github.com/conduit-rust/route-recognizer.rs)作为路由识别器;
许可证
MIT
依赖关系
~8MB
~184K SLoC