pingora_web:首款基于 Cloudflare Pingora 的 Rust Web 框架
pingora_web 是首款基于 Cloudflare Pingora 的生产级 Web 框架,摆脱了传统 hyper 架构依赖,采用经过全球规模验证的企业级网络基础设施。
🚀 快速开始
Hello World(5 行代码)
rust
use pingora_web::{App, Response, Router, StatusCode};
fn main() {
let mut router = Router::new();
router.get_fn("/", |_req| Response::text(StatusCode::OK, "Hello World!"));
App::new(router).listen("0.0.0.0:8080").unwrap();
}
路径参数
rust
use pingora_web::{App, Response, Router, StatusCode};
fn main() {
let mut router = Router::new();
router.get_fn("/", |_req|
Response::text(StatusCode::OK, "Hello World!")
);
router.get_fn("/hello/{name}", |req| {
let name = req.param("name").unwrap_or("world");
Response::text(StatusCode::OK, format!("Hello {}", name))
});
App::new(router).listen("0.0.0.0:8080").unwrap();
}
JSON API 开发
rust
use pingora_web::{App, Response, Router, StatusCode};
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
struct User {
id: u64,
name: String,
email: String,
}
fn main() {
let mut router = Router::new();
// GET /users/{id}
router.get_fn("/users/{id}", |req| {
let user_id: u64 = req.param("id")
.unwrap_or("0")
.parse()
.unwrap_or(0);
let user = User {
id: user_id,
name: "张三".to_string(),
email: "zhangsan@example.com".to_string(),
};
Response::json(StatusCode::OK, user)
});
// POST /users
router.post_fn("/users", |req| {
match serde_json::from_slice::<User>(req.body()) {
Ok(user) => Response::json(StatusCode::CREATED, user),
Err(_) => Response::json(StatusCode::BAD_REQUEST,
serde_json::json!({"error": "无效的 JSON 格式"})
)
}
});
App::new(router).listen("0.0.0.0:8080").unwrap();
}
添加依赖
toml
[dependencies]
pingora_web = "0.1"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
⚡ 核心特性
🛣️ 简洁的路由系统
- 支持路径参数:
/users/{id}
- 闭包路由:
router.get_fn("/", |req| ...)
- RESTful API 设计
🧅 中间件系统
- 洋葱模型中间件架构
- 内置请求 ID 追踪
- 自动错误恢复
- 结构化日志
📦 开箱即用
- JSON 自动序列化/反序列化
- 静态文件服务
- HTTP 压缩
- 流式响应
🏗️ 技术优势:为什么选择 Pingora?
与传统架构的差异
在 Rust Web 生态中,主流框架都基于 hyper HTTP 库。pingora_web 打破这一局面,基于 Cloudflare Pingora 构建。
技术特性 | pingora_web | 传统框架 |
---|---|---|
底层架构 | Cloudflare Pingora | 主要基于 hyper |
生产验证 | 全球 20% 流量验证 | 社区验证 |
并发能力 | 大规模并发优化 | 标准异步模型 |
内存效率 | 零拷贝 + 智能池化 | 传统内存管理 |
企业特性 | 内置监控、限流、压缩 | 需要额外配置 |
Pingora 的生产验证
Cloudflare Pingora 是经过全球规模验证的网络基础设施:
- 处理规模:全球 20% 的 HTTP/HTTPS 请求
- 日处理量:超过 55 万亿次 HTTP 请求
- 服务覆盖:320+ 城市,125+ 国家/地区
- 客户规模:2800万+ 互联网资产
🎯 适用场景
高性能 API 服务
- 微服务 API:处理大量客户端请求
- 实时数据 API:需要低延迟响应
- 企业级 API 网关:统一服务入口
数据密集型应用
- 文件服务:高效的静态资源分发
- 流媒体服务:视频、音频内容传输
- 代理服务:网络流量管理和转发
企业级系统
- 内部服务平台:企业内部 API 集成
- 监控系统:利用内置追踪和日志
- 边缘计算:分布式计算节点
🔧 中间件和扩展
内置中间件
rust
use pingora_web::{
App, TracingMiddleware, ResponseCompressionBuilder,
LimitsMiddleware, LimitsConfig
};
fn main() {
let mut router = Router::new();
// 添加路由...
let mut app = App::new(router);
// 请求追踪
app.use_middleware(TracingMiddleware::new());
// 请求限制
app.use_middleware(LimitsMiddleware::with_config(
LimitsConfig::new()
.request_timeout(Duration::from_secs(30))
.max_body_size(10 * 1024 * 1024) // 10MB
));
// HTTP 压缩模块
app.add_http_module(ResponseCompressionBuilder::enable(6));
app.listen("0.0.0.0:8080").unwrap();
}
静态文件服务
rust
use pingora_web::utils::ServeDir;
// 服务 ./public 目录下的静态文件
router.get("/static/{path}", Arc::new(ServeDir::new("./public")));
流式响应
rust
use futures::stream;
use bytes::Bytes;
router.get_fn("/stream", |_req| {
let data_stream = stream::iter(
(0..100).map(|i| Bytes::from(format!("chunk-{}\n", i)))
);
Response::stream(StatusCode::OK, data_stream.boxed())
.header("content-type", "text/plain")
});
🚀 部署和运行
开发环境
bash
# 创建项目
cargo new my_api && cd my_api
# 添加依赖
cargo add pingora_web serde serde_json
# 运行
cargo run
生产环境
rust
use pingora_web::{App, Router};
use pingora::server::Server;
fn main() {
let router = setup_routes();
let app = App::new(router);
// 高级配置:转换为 Pingora Service
let mut service = app.to_service("production-api");
service.add_tcp("0.0.0.0:8080");
let mut server = Server::new(None).unwrap();
server.add_service(service);
server.run_forever();
}
📚 社区与资源
- GitHub : pingora-web/pingora_web
- Crates.io : pingora_web
- 文档 : docs.rs/pingora_web
- 许可证: MIT / Apache-2.0
🔮 技术路线图
- WebSocket 支持:实时通信能力
- GraphQL 集成:现代 API 查询语言
- 更多中间件:丰富的生态组件
- 监控集成:Prometheus、Jaeger 原生支持
立即开始 :cargo add pingora_web
基于 Cloudflare Pingora 构建,经过全球验证的企业级 Rust Web 框架