Description
Sapper, a lightweight web framework, written in Rust.
Sapper focuses on easy of use. It is alpha now and only compiled with rust nightly.
Sapper alternatives and similar packages
Based on the "Web programming" category.
Alternatively, view Sapper alternatives based on common mentions on social networks and blogs.
-
actix-web
Actix Web is a powerful, pragmatic, and extremely fast web framework for Rust. -
gutenberg
A fast static site generator in a single binary with everything built-in. https://www.getzola.org -
Gotham
A flexible web framework that promotes stability, safety, security and speed. -
Percy
Build frontend browser apps with Rust + WebAssembly. Supports server side rendering. -
License
Tiny, no-nonsense, self-contained, Tensorflow and ONNX inference [Moved to: https://github.com/sonos/tract] -
rust-musl-builder
Docker images for compiling static Rust binaries using musl-libc and musl-gcc, with static versions of useful C libraries. Supports openssl and diesel crates. -
tungstenite-rs
Lightweight stream-based WebSocket implementation for Rust. -
Rouille, Rust web server middleware
Web framework in Rust -
heroku-buildpack-rust
A buildpack for Rust applications on Heroku, with full support for Rustup, cargo and build caching. -
OBSOLETION NOTICE
Completely OBSOLETE Rust HTTP library (server and client) -
url-crawler
Rust crate for configurable parallel web crawling, designed to crawl for content -
urlshortener-rs
A very-very simple url shortener (client) for Rust. -
The FastCGI Rust implementation.
Native Rust library for FastCGI
Static code analysis for 29 languages.
Do you think we are missing an alternative of Sapper or a related project?
Popular Comparisons
README
Sapper
Sapper, a lightweight web framework, written in Rust.
Sapper focuses on ergonomic usage and rapid development. It can work with stable Rust.
Sapper now is based on hyper 0.10.13.
Tutorial
Look into json demo, you can learn how to parse http parameters, and return json;
Look into mvc diesel demo, you can learn how to use database, how to render template, and how to redirect.
Import
In Cargo.toml,
[dependencies]
sapper = "0.1"
Basic Example
Now, you can boot the example server with:
cd examples/basic/
cargo build
cargo run
and open the browser, visit
http://localhost:1337/
or
http://localhost:1337/test
or any other url to test it.
Other Examples
- tiny
- init_global
- query params
- body params
- session
- template rendering
- simple logger
- response json
more continued...
Basic Benchmark
[email protected]:~/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
[email protected]:~/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
...
[email protected]:~/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!
[email protected]:~/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
Features
- Sapper supplies only basic framework;
- Three level granularity (global, module, function handler) middleware controller and unified middleware presentation;
- Typesafe abstraction, keep the same spirit with hyper;
- For easy using, will supply some convenient macros to help write business logics;
- Global object cross requests;
Philosophy
Typed, hierarchical control, and middlewares.
Typed
In Sapper, nearly every important thing is a Type
. They are:
- Each module is a type, different modules are different types;
- Every middleware supplies some (0 to n) types for handler getting values;
- Inherited from hyper's typed spirit, all headers, mime and so on should use types for manipulation.
Hierarchical Control
- Sapper forces you to put router in each module (in main.rs, you can not write it, no space left for you to write);
- Sapper forces you to seperate the router binding and the handler realization;
- Sapper's plugin processor can be used in app level wrapper, module level wrapper, and each handler. These three level hierarchical controls make it flexible to construct your business.
Middlewares
Sapper's core contains only router system, request and response definitions, middleware system, and some other basic facilities. Nearly all practical features, such as query parameter, body parameter, cookie, session, json, xml, orm..., are supplied by the corresponding middlewares.
Sapper's middleware is very easy to write. One rust module realized a function on the prototype of
fn (&mut Request) -> Result<()>; // before plugin
fn (&Request, &mut Response) -> Result<()>; // after plugin
can be thought as Sapper's middleware. Sample middleware: sapper_query.
TODO
- [X] QueryParams (x-www-form-urlencoded);
- [X] BodyParams (x-www-form-urlencoded);
- [X] BodyJsonParams;
- [X] Basic static file serving for dev;
- [X] Global object shared cross requests;
- [X] Macros;
- [ ] Multipart;
Middlewares
- sapper_query parsing query string for req;
- sapper_body parsing body parameters for req, including url form encoded, json type, json to struct macro;
- sapper_logger record request and caculate its time;
- sapper_session a cookie plugin, and else supply a helper set_cookie function;
- sapper_tmpl use tera to render template;
Related Projects
Thanks to these projects below:
- hyper Sapper is based on hyper mio branch;
- iron Sapper learns many designs from iron;
- router Sapper steals router about code from it;
- recognizer Sapper uses this route recognizer;
License
MIT
*Note that all licence references and agreements mentioned in the Sapper README section above
are relevant to that project's source code only.