#web-framework #poem-web #async #tower-service #tower-layer #framework

poem

Poem 是一个功能全面且易于使用的 Rust 编程语言 Web 框架

216 个版本 (稳定版)

3.0.4 2024年7月27日
3.0.1 2024年5月18日
3.0.0 2024年3月30日
2.0.1 2024年3月4日
0.1.0 2020年8月5日

#9HTTP服务器

Download history 10745/week @ 2024-05-04 13391/week @ 2024-05-11 12189/week @ 2024-05-18 11042/week @ 2024-05-25 12167/week @ 2024-06-01 12359/week @ 2024-06-08 14946/week @ 2024-06-15 14335/week @ 2024-06-22 13013/week @ 2024-06-29 18219/week @ 2024-07-06 16864/week @ 2024-07-13 17634/week @ 2024-07-20 16798/week @ 2024-07-27 15409/week @ 2024-08-03 15602/week @ 2024-08-10 14353/week @ 2024-08-17

65,425 每月下载量
用于 160 个大仓 (直接使用67个)

MIT/Apache

760KB
18K SLoC

Poem 框架

程序就像一首诗,不写下来就无法写诗. ---Dijkstra

使用 Rust 编程语言的一个功能全面且易于使用的 Web 框架。


特性

  • 易于使用和性能。
  • 最小化泛型使用。
  • 快速且灵活的路由。
  • tower::Servicetower::Layer 兼容性。
  • 使用 poem-openapi 编写符合 OAS3 规范的 API 并自动生成文档。

大仓特性

为了避免编译未使用的依赖项,Poem 禁用某些特性,所有特性默认都未启用

特性 描述
server 服务器和监听器 API(默认启用)
compression 支持解压缩请求体和压缩响应体
cookie 支持 Cookie
csrf 支持跨站请求伪造 (CSRF) 保护
multipart 支持 Multipart
native-tls 支持使用 native-tls 的 TLS 上的 HTTP 服务器
openssl-tls 支持使用 openssl-tls 的 TLS 上的 HTTP 服务器
opentelemetry 支持 opentelemetry
prometheus 支持 Prometheus
redis-session 支持 RedisSession
rustls 支持通过 TLS 的 HTTP 服务器,使用 rustls
会话 支持会话
sse 支持服务器端事件(SSE)
静态文件 支持静态文件端点
tempfile 支持 tempfile
tower-compat tower::Layertower::Service 提供适配器。
WebSocket 支持 WebSocket
anyhow anyhow 库集成。
eyre06 eyre 库的 0.6.x 版本集成。
i18n 支持国际化
acme-native-roots 支持 ACME(自动证书管理环境)
acme-webpki-roots 支持使用 webpki TLS 根而非本地 TLS 根的 ACME
tokio-metrics tokio-metrics 库集成。
embed rust-embed 库集成。
xml quick-xml 库集成。
yaml serde-yaml 库集成。
requestid 将唯一 ID 与每个传入请求关联

安全性

此库使用 #![forbid(unsafe_code)] 确保所有内容都在 100% 安全的 Rust 中实现。

示例

use poem::{get, handler, listener::TcpListener, web::Path, Route, Server};

#[handler]
fn hello(Path(name): Path<String>) -> String {
    format!("hello: {}", name)
}

#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
    let app = Route::new().at("/hello/:name", get(hello));
    Server::new(TcpListener::bind("0.0.0.0:3000"))
      .run(app)
      .await
}

更多示例可以在 这里 找到。

MSRV

此库支持的最低 Rust 版本是 1.75.0

贡献

🎈 感谢您的帮助,使项目得到改进!我们非常高兴有您加入!

许可

根据您的选择,此库受以下任一许可协议的约束:

贡献

除非您明确说明,否则您提交给 Poem 的任何有意贡献均应按照 Apache 许可协议进行许可,没有任何附加条款或条件。

依赖项

~13–34MB
~602K SLoC