Rust 高性能 REST API 开发全指南:从环境搭建到部署实战

作者:API传播员 · 2025-09-30 · 阅读时间:6分钟

由于Rust的高性能、安全性和强大的并发能力,使用Rust构建**创建RESTful API,从环境设置到最终部署的完整流程。通过本文,您将学会构建一个高效、可靠的REST API,能够处理高并发流量并为用户提供稳定的服务。


环境设置

在开始之前,您需要在系统上安装Rust。推荐使用rustup工具链安装程序完成安装。打开终端并运行以下命令:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

按照屏幕提示完成安装后,运行以下命令验证安装是否成功:

rustc --version

Rust自带的包管理器和构建系统Cargo将帮助我们创建项目。在终端中运行以下命令创建一个新的Rust项目:

cargo new rest_api --bin
cd rest_api

上述命令会生成一个名为rest_api的目录,其中包含基本的Rust项目结构。


选择Web框架

Rust提供了多种Web框架用于构建REST API,包括RocketActix WebWarp。在本指南中,我们选择性能和灵活性兼备的Actix Web

打开项目目录中的Cargo.toml文件,添加以下依赖项:

[dependencies]
actix-web = "4.0"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
uuid = "1.0"
  • Actix Web:用于构建Web服务的框架。
  • SerdeSerde JSON:用于数据序列化和反序列化。
  • UUID:用于生成唯一标识符。

创建简单的服务器

为了验证环境是否正确配置,我们可以先创建一个简单的服务器。在src/main.rs中替换以下内容:

use actix_web::{web, App, HttpServer, Responder};

async fn hello() -> impl Responder {
    "Hello, world!"
}#[actix_web::main]
async fn main() -> std::io::Result {    HttpServer::new(|| {        App::new().route("/", web::get().to(hello))
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await
}

运行以下命令启动服务器:

cargo run

打开浏览器访问 http://127.0.0.1:8080,您应该会看到“Hello, world!”的输出。


数据模型

一个结构良好的API需要定义数据模型。在src目录下创建一个名为models.rs的新文件,定义如下数据结构:

use serde::{Serialize, Deserialize};
use uuid::Uuid;

#[derive(Serialize, Deserialize)]
pub struct Item {
    pub id: Uuid,
    pub name: String,
    pub description: String,
}

处理器逻辑

src目录下创建一个名为handlers.rs的新文件,用于处理API请求逻辑:

use actix_web::{web, HttpResponse};
use uuid::Uuid;
use serde_json::json;
use crate::models::Item;

pub async fn create_item(item: web::Json) -> HttpResponse {
    HttpResponse::Ok().json(item.into_inner())
}pub async fn get_items() -> HttpResponse {
    let items = vec![
        Item {
            id: Uuid::new_v4(),
            name: String::from("Item 1"),
            description: String::from("Description 1"),
        },
        Item {
            id: Uuid::new_v4(),
            name: String::from("Item 2"),
            description: String::from("Description 2"),
        },
    ];
    HttpResponse::Ok().json(items)
}pub async fn get_item(item_id: web::Path) -> HttpResponse {
    let item = Item {
        id: *item_id,
        name: String::from("Item 1"),
        description: String::from("Description 1"),
    };
    HttpResponse::Ok().json(item)
}pub async fn update_item(item_id: web::Path, item: web::Json) -> HttpResponse {
    let mut updated_item = item.into_inner();
    updated_item.id = *item_id;
    HttpResponse::Ok().json(updated_item)
}pub async fn delete_item(item_id: web::Path) -> HttpResponse {
    HttpResponse::Ok().json(json!({ "deleted": item_id.to_string() }))
}

配置路由

更新src/main.rs文件以配置API的路由:

mod handlers;
mod models;

use actix_web::{web, App, HttpServer};#[actix_web::main]
async fn main() -> std::io::Result {    HttpServer::new(|| {        App::new()
            .service(
                web::scope("/api")
                    .route("/items", web::post().to(handlers::create_item))
                    .route("/items", web::get().to(handlers::get_items))
                    .route("/items/{id}", web::get().to(handlers::get_item))
                    .route("/items/{id}", web::put().to(handlers::update_item))
                    .route("/items/{id}", web::delete().to(handlers::delete_item))
            )
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await
}

测试API

您可以使用curlPostman测试API。例如:

创建一个新项目:

curl -X POST http://127.0.0.1:8080/api/items 
-H "Content-Type: application/json" 
-d '{"id": "550e8400-e29b-41d4-a716-446655440000", "name": "Item 1", "description": "Description 1"}'

获取所有项目:

curl http://127.0.0.1:8080/api/items

获取特定项目:

curl http://127.0.0.1:8080/api/items/550e8400-e29b-41d4-a716-446655440000

更新项目:

curl -X PUT http://127.0.0.1:8080/api/items/550e8400-e29b-41d4-a716-446655440000 
-H "Content-Type: application/json" 
-d '{"name": "Updated Item 1", "description": "Updated Description 1"}'

删除项目:

curl -X DELETE http://127.0.0.1:8080/api/items/550e8400-e29b-41d4-a716-446655440000

部署与环境变量管理

在生产环境中,建议使用以下命令构建优化版本:

cargo build --release

Rust API可以部署到HerokuAWSDigitalOceanGoogle云平台等平台。为管理配置,建议使用环境变量。在项目根目录创建.env文件:

DATABASE_URL=postgres://user:password@localhost/dbname

Cargo.toml中添加dotenv依赖,并在main.rs中加载环境变量:

use dotenv::dotenv;
use std::env;

#[actix_web::main]
async fn main() -> std::io::Result {
    dotenv().ok();
    let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
    // 其他代码...
}

通过本指南,您已经学会如何使用Rust构建一个高效的REST API。Rust的安全性、性能和并发能力使其成为构建现代Web服务的理想选择。通过适当的测试和部署,您的API将能够在生产环境中稳定运行。


原文链接: https://medium.com/@rs4528090/how-to-build-a-rest-api-with-rust-65dfb19d1edd