引言:为什么选择 Rust 构建 REST API?
Rust 是一种现代系统编程语言,它结合了 C++ 的性能和编译阶段保证的内存安全。近年来,Rust 被广泛应用于构建高负载的 Web 服务和微服务。本文将展示如何在 30 分钟内使用 Actix-web 框架和 Serde 库,用 Rust 编写一个完整的 REST API。
为什么选择 Rust 来构建你的 API?
- 性能: Rust 的运行效率与 C/C++ 相当,这对高负载系统至关重要。
- 安全性: 所有权(ownership)和借用(borrowing)机制消除了与内存相关的整类错误。
- 异步支持: 内置的 async/await 支持能够高效处理数千个并发连接。
- 生态系统: Cargo(包管理器)和 crates.io 使依赖管理变得简单便捷。
我们将创建一个简单的任务列表(Todo list)管理 API,支持 CRUD 操作。你将学习如何配置路由、处理 JSON 以及管理应用状态。
步骤 1:项目设置与依赖安装
首先,使用 Cargo 创建一个新的 Rust 项目。打开终端并执行:
cargo new rust_todo_apicd rust_todo_api现在编辑 Cargo.toml 文件,添加必要的依赖:
[package]name = "rust_todo_api"version = "0.1.0"edition = "2021"
[dependencies]actix-web = "4"serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"tokio = { version = "1", features = ["full"] }uuid = { version = "1", features = ["v4"] }我们来分析每个库的作用:
- actix-web — 高性能的异步 Web 框架。
- serde — 用于数据序列化和反序列化的库(JSON)。
- serde_json — 为 serde 提供 JSON 格式支持。
- tokio — Rust 的异步运行时(actix-web 默认使用它)。
- uuid — 为我们的任务生成唯一标识符。
添加依赖后,执行 cargo build 以下载并编译所有包。首次运行可能需要几分钟。
步骤 2:创建数据模型与应用结构
创建 src/main.rs 文件,定义任务模型。我们将使用包含 id、title 和 completed 字段的 TodoItem 结构体:
use actix_web::{web, App, HttpServer, HttpResponse, middleware};use serde::{Deserialize, Serialize};use std::sync::Mutex;use uuid::Uuid;
#[derive(Debug, Serialize, Deserialize, Clone)]struct TodoItem { id: String, title: String, completed: bool,}
#[derive(Debug, Deserialize)]struct CreateTodoRequest { title: String,}
#[derive(Debug, Deserialize)]struct UpdateTodoRequest { title: Option<String>, completed: Option<bool>,}
struct AppState { todos: Mutex<Vec<TodoItem>>,}注意以下重要细节:
Serialize和Deserialize— serde 的 trait,用于自动生成处理 JSON 的代码。Mutex— 用于在多线程环境中安全地访问共享状态。Uuid— 为每个任务生成唯一标识符。
现在添加 main 函数,用于启动服务器并初始化状态:
#[actix_web::main]async fn main() -> std::io::R