#web-apps #envoy #web #http #async #web-framework

envoy_http

A minimal and pragmatic Rust web application framework built for rapid development

8 releases

0.2.2 Jul 5, 2022
0.2.1 Jul 5, 2022
0.2.0 Jun 21, 2022
0.1.0 Jun 16, 2022
0.0.9 Jun 16, 2022

#1158 in HTTP server

Download history 28/week @ 2024-02-25 1/week @ 2024-03-03 52/week @ 2024-03-31

52 downloads per month

MIT/Apache

51KB
836 lines

Envoy

Serve the web

Envoy is a minimal and pragmatic Rust web application framework built for rapid development. It comes with a robust set of features that make building async web applications and APIs easier and more fun.

Getting started

In order to build a web app in Rust you need an HTTP server, and an async runtime. After running cargo init add the following lines to your Cargo.toml file:

# Example, use the version numbers you need
envoy = "0.16.0"
async-std = { version = "1.8.0", features = ["attributes"] }
serde = { version = "1.0", features = ["derive"] }

Examples

Create an HTTP server that receives a JSON body, validates it, and responds with a confirmation message.

use envoy::Context;
use envoy::prelude::*;

#[derive(Debug, Deserialize)]
struct Animal {
    name: String,
    legs: u16,
}

#[tokio::main]
async fn main() -> envoy::Result {
    let mut app = envoy::new();
    app.at("/orders/shoes").post(order_shoes);
    app.listen("127.0.0.1:8080").await?;
    Ok(())
}

async fn order_shoes(mut ctx: &mut Context) -> envoy::Result {
    let Animal { name, legs } = ctx.body_json().await?;
    Ok(format!("Hello, {}! I've put in an order for {} shoes", name, legs).into())
}
$ curl localhost:8080/orders/shoes -d '{ "name": "Chashu", "legs": 4 }'
Hello, Chashu! I've put in an order for 4 shoes
$ curl localhost:8080/orders/shoes -d '{ "name": "Mary Millipede", "legs": 750 }'
Hello, Mary Millipede! I've put in an order for 750 shoes

See more examples in the examples directory.

Envoy's design:

Community Resources

To add a link to this list, edit the markdown file and submit a pull request (github login required)
Listing here does not constitute an endorsement or recommendation from the envoy team. Use at your own risk.

Listeners

  • envoy-rustls TLS for envoy based on async-rustls
  • envoy-acme HTTPS for envoy with automatic certificates, via Let's Encrypt and ACME tls-alpn-01 challenges

Template engines

Routers

Auth

Testing

Middleware

Session Stores

Example applications

  • dot dot vote
  • envoy-example (sqlx + askama)
  • playground-envoy-mongodb
  • envoy-morth-example
  • broker (backend as a service)
  • envoy-basic-crud (sqlx + tera)
  • envoy-graphql-mongodb
    • Clean boilerplate for graphql services using envoy, rhai, async-graphql, surf, graphql-client, handlebars-rust, jsonwebtoken, and mongodb.
    • Graphql Services: User register, Salt and hash a password with PBKDF2 , Sign in, JSON web token authentication, Change password, Profile Update, User's query & mutation, and Project's query & mutation.
    • Web Application: Client request, bring & parse GraphQL data, Render data to template engine(handlebars-rust), Define custom helper with Rhai scripting language.
  • surfer
    • The Blog built on Envoy stack, generated from envoy-graphql-mongodb.
    • Backend for graphql services using envoy, async-graphql, jsonwebtoken, mongodb and so on.
    • Frontend for web application using envoy, rhai, surf, graphql_client, handlebars-rust, cookie and so on.
  • envoy-server-example

Contributing

Want to join us? Check out our The "Contributing" section of the guide and take a look at some of these issues:

Conduct

The Envoy project adheres to the Contributor Covenant Code of Conduct. This describes the minimum behavior expected from all contributors.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Dependencies

~6–16MB
~187K SLoC