10 лучших фреймворков Rust для веб-разработки
Rust уверенно завоевывает нишу веб-разработки благодаря своей производительности, безопасности памяти и асинхронности. Если вы ищете надежный фреймворк для создания веб-приложений на Rust, этот обзор поможет вам сделать правильный выбор. Мы рассмотрим 10 лучших фреймворков, их особенности и примеры кода.
1. Actix-web — самый производительный
Actix-web — лидер по производительности среди Rust-фреймворков. Основан на Actor-модели и Tokio. Идеален для высоконагруженных API.
use actix_web::{get, web, App, HttpServer, Responder};
#[get("/hello/{name}")]async fn greet(name: web::Path<String>) -> impl Responder { format!("Hello {}!", name)}
#[actix_web::main]async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new().service(greet) }) .bind(("127.0.0.1", 8080))? .run() .await}2. Axum — современный и экосистемный
Разработан командой Tokio. Использует tower-сервисы и гипер. Отлично интегрируется с sqlx, tower, serde.
use axum::{Router, routing::get, response::Json};use serde_json::{json, Value};
async fn root() -> Json<Value> { Json(json!({"message": "Hello from Axum"}))}
#[tokio::main]async fn main() { let app = Router::new().route("/", get(root)); let listener = tokio::net::TcpListener::bind("0.0.0.0:3000").await.unwrap(); axum::serve(listener, app).await.unwrap();}3. Rocket — простота и удобство
Ориентирован на быстрый старт. Использует макросы для маршрутизации. Идеален для прототипирования.
#[macro_use] extern crate rocket;
#[get("/<name>")]fn hello(name: &str) -> String { format!("Hello, {}!", name)}
#[launch]fn rocket() -> _ { rocket::build().mount("/", routes![hello])}4. Warp — функциональный и гибкий
Основан на фильтрах (Filters). Позволяет компоновать обработчики как цепочки. Отличный выбор для API.
use warp::Filter;
#[tokio::main]async fn main() { let hello = warp::path!("hello" / String) .map(|name| format!("Hello, {}!", name));
warp::serve(hello) .run(([127, 0, 0, 1], 3030)) .await;}5. Tide — минималистичный и асинхронный
Легковесный фреймворк от создателей Rust async. Простой API, основанный на трейтах.
use tide::Request;
#[async_std::main]async fn main() -> tide::Result<()> { let mut app = tide::new(); app.at("/").get(|_: Request<()>| async { Ok("Hello, Tide!") }); app.listen("127.0.0.1:8080").await?; Ok(())}6. Poem — полный стек с OpenAPI
Поддерживает автоматическую генерацию OpenAPI-спецификации. Интеграция с HTTP/2, WebSocket.
use poem::{get, handler, listener::TcpListener, Route, Server};
#[handler]fn hello() -> String { "Hello, Poem!".to_string()}
#[tokio::main]async fn main() -> Result<(), std::io::Error> { let app = Route::new().at("/", get(hello)); Server::new(TcpListener::bind("0.0.0.0:3000")) .run(app) .await}7. Salvo — простой и мощный
Поддерживает middleware, WebSocket, multipart-формы. Имеет встроенную поддержку OpenAPI.
use salvo::prelude::*;
#[handler]async fn hello(res: &mut Response) { res.render(Text::Plain("Hello, Salvo!"));}
#[tokio::main]async fn main() { let router = Router::new().get(hello); Server::new(TcpListener::bind("0.0.0.0:5800")) .serve(router) .await;}8. Gotham — асинхронный и безопасный
Использует строгую типизацию и безопасность на уровне компиляции. Подходит для сложных приложений.
use gotham::state::State;use gotham::r