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 网页编程

Download history 21/week @ 2024-03-04 13/week @ 2024-03-11 13/week @ 2024-03-18 11/week @ 2024-03-25 40/week @ 2024-04-01 10/week @ 2024-04-08 10/week @ 2024-04-15 14/week @ 2024-04-22 4/week @ 2024-04-29 6/week @ 2024-05-06 18/week @ 2024-05-13 8/week @ 2024-05-20 22/week @ 2024-05-27 9/week @ 2024-06-03 13/week @ 2024-06-10 10/week @ 2024-06-17

每月54次下载
5 crates 中使用

MIT 许可证

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 进行测试。

其他示例

  1. tiny

  2. init_global

  3. 查询参数

  4. 请求体参数

  5. 会话

  6. 模板渲染

  7. 简单日志记录器

  8. 响应 JSON

  9. MVC diesel 示例

  10. 更多...

基本基准

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)。

待办事项

  1. QueryParams (x-www-form-urlencoded);
  2. BodyParams (x-www-form-urlencoded);
  3. BodyJsonParams;
  4. 开发用基本静态文件服务;
  5. 跨请求共享全局对象;
  6. 宏定义;
  7. 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