8 个版本
0.2.2 | 2022 年 7 月 5 日 |
---|---|
0.2.1 | 2022 年 7 月 5 日 |
0.2.0 | 2022 年 6 月 21 日 |
0.1.0 | 2022 年 6 月 16 日 |
0.0.9 | 2022 年 6 月 16 日 |
1228 在 HTTP 服务器
26 每月下载次数
51KB
836 行
Envoy
服务网络
Envoy 是一个用于快速开发的简洁且实用的 Rust 网络应用框架。它提供了一套强大的功能,使得构建异步网络应用和 API 变得更加容易和有趣。
入门
为了在 Rust 中构建网络应用程序,你需要一个 HTTP 服务器和一个异步运行时。在运行 cargo init
后,将以下行添加到你的 Cargo.toml
文件中
# 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"] }
示例
创建一个 HTTP 服务器,接收 JSON 主体,验证它,并返回确认消息。
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
更多示例请参见 示例 目录。
Envoy 的设计
社区资源
要添加此列表中的链接,请 编辑 markdown 文件 并提交一个 pull request(需要 GitHub 登录)
在此列出不代表 Envoy 团队的推荐或认可。自行承担风险。
监听器
- 基于 async-rustls 的 envoy-rustls TLS
- envoy-acme HTTPS for envoy with automatic certificates, via Let's Encrypt and ACME tls-alpn-01 challenges
模板引擎
- envoy-tera
- envoy-handlebars
- askama (includes support for envoy)
路由器
认证
测试
中间件
- envoy-compress
- envoy-sqlx - SQLx pooled connections & transactions
- envoy-trace
- envoy-tracing
- opentelemetry-envoy
- driftwood http logging middleware
- envoy-compressed-sse
- envoy-websockets
- envoy-csrf
会话存储
- async-redis-session
- async-sqlx-session (sqlite, mysql, postgres, ...)
- async-mongodb-session
示例应用
- 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
- 使用 envoy, rhai, async-graphql, surf, graphql-client, handlebars-rust, jsonwebtoken, 和 mongodb 为 graphql 服务创建干净的样板代码。
- Graphql 服务:用户注册、使用 PBKDF2 盐和哈希密码、登录、JSON web token 认证、更改密码、资料更新、用户的查询 & 修改、以及项目的查询 & 修改。
- Web 应用程序:客户端请求、获取 & 解析 GraphQL 数据、将数据渲染到模板引擎(handlebars-rust),使用 Rhai 脚本语言定义自定义助手。
- surfer
- 基于 Envoy 堆栈构建的博客,由 envoy-graphql-mongodb 生成。
- 使用 envoy, async-graphql, jsonwebtoken, mongodb 等后端为 graphql 服务。
- 使用 envoy, rhai, surf, graphql_client, handlebars-rust, cookie 等前端构建 Web 应用程序。
- envoy-server-example
贡献
想加入我们?查看指南中的 "贡献" 部分 The "Contributing" section of the guide 并查看一些这些问题
行为准则
Envoy 项目遵循 Contributor Covenant Code of Conduct。这描述了所有贡献者应遵守的最小行为准则。
许可
许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可协议 (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确指出,否则任何有意提交以包含在你通过 Apache-2.0 许可定义的作品中的贡献,都将按上述方式双许可,不附加任何额外条款或条件。
依赖项
~6–18MB
~192K SLoC