Rust 的开源 HyperSwitch 的实用
以下是基于 Rust 的开源 HyperSwitch 的实用实例,涵盖不同应用场景和功能模块。这些示例通过代码片段和配置说明展示 HyperSwitch 的核心功能。
基本 HTTP 服务器
use hyperswitch::prelude::*;
#[tokio::main]
async fn main() {
let server = Server::bind("127.0.0.1:8080").await.unwrap();
server.serve(|_req| async { Ok("Hello, HyperSwitch!") }).await.unwrap();
}
路由配置
use hyperswitch::router::{Router, Method};
let mut router = Router::new();
router.add_route(Method::GET, "/home", |_req| async { Ok("Home Page") });
router.add_route(Method::POST, "/submit", |_req| async { Ok("Form Submitted") });
中间件示例
use hyperswitch::middleware::{Middleware, Next};
struct LogMiddleware;
impl Middleware for LogMiddleware {
async fn call(&self, req: Request, next: Next) -> Result<Response> {
println!("Request: {:?}", req);
next.run(req).await
}
}
JSON 响应
use hyperswitch::response::Json;
async fn handle_json(_req: Request) -> Result<Response> {
let data = serde_json::json!({ "status": "su***ess" });
Ok(Json(data).into())
}
静态文件服务
use hyperswitch::serve_static;
let server = Server::bind("127.0.0.1:8080").await.unwrap();
server.serve(serve_static("public/")).await.unwrap();
WebSocket 支持
use hyperswitch::ws::{WebSocket, Message};
async fn handle_ws(ws: WebSocket) {
ws.on_message(|msg: Message| async move {
println!("Received: {:?}", msg);
}).await;
}
数据库集成(PostgreSQL)
use hyperswitch::db::postgres::PgPool;
let pool = PgPool::connect("postgres://user:pass@localhost/db").await.unwrap();
let row: (i64,) = sqlx::query_as("SELECT $1").bind(42).fetch_one(&pool).await.unwrap();
认证中间件
use hyperswitch::auth::{AuthMiddleware, ApiKey};
let auth = AuthMiddleware::new(ApiKey::new("SECRET_KEY"));
router.add_middleware(auth);
速率限制
use hyperswitch::ratelimit::{RateLimiter, MemoryStore};
let limiter = RateLimiter::new(MemoryStore::new(), 100, Duration::from_secs(60));
router.add_middleware(limiter);
日志记录
use hyperswitch::log::Logger;
let logger = Logger::new();
router.add_middleware(logger);
错误处理
use hyperswitch::error::Error;
async fn handle_error(_req: Request) -> Result<Response, Error> {
Err(Error::NotFound("Route not found".into()))
}
HTTPS 配置
use hyperswitch::tls::{TlsConfig, Certificate};
let tls = TlsConfig::new()
.cert(Certificate::from_file("cert.pem"))
.key("key.pem");
Server::bind_tls("127.0.0.1:443", tls).await.unwrap();
测试路由
use hyperswitch::test::TestClient;
let client = TestClient::new(router);
let response = client.get("/home").send().await;
assert_eq!(response.status(), 200);
环境变量配置
use hyperswitch::config::Config;
let config = Config::from_env().unwrap();
Server::bind(&config.server.addr).await.unwrap();
健康检查端点
router.add_route(Method::GET, "/health", |_req| async { Ok("OK") });
<