如何在30分钟内用Rust编写REST API:实用指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为何使用 Rust 开发 REST API?

Rust 是一种兼具 C++ 性能与内存安全性的现代系统编程语言。近年来,它被广泛用于构建高负载 Web 服务和 REST API。在本指南中,我们将使用 Actix-web 框架在 30 分钟内创建一个完整的 Rust REST API。

为何选择 Rust 开发 REST API?

  • 性能: Rust 编译为原生代码且不使用垃圾回收器,提供了最大化的请求处理速度。
  • 安全性: 所有权和借用系统消除了所有与内存相关的错误类别。
  • 可扩展性: Actix-web 是世界上最快的 Web 框架之一,能够每秒处理数百万个请求。

阅读完本文后,您将拥有一个包含多个端点、错误处理以及便于未来扩展结构的现成项目。



步骤 1:项目设置与依赖安装

首先,让我们创建一个新的 Cargo 项目。打开您的终端并运行:

cargo new rust_rest_apicd rust_rest_api

现在打开 Cargo.toml 文件并添加以下依赖:

[dependencies]actix-web = "4"serde = { version = "1.0", features = ["derive"] }serde_json = "1.0"tokio = { version = "1", features = ["full"] }uuid = { version = "1.0", features = ["v4", "serde"] }

我们来分解一下每个库的作用:

  • actix-web — 用于创建 HTTP 服务器的主要 Web 框架。
  • serde / serde_json — 数据的序列化和反序列化为 JSON 格式。
  • tokio — 一个异步运行时,是 Actix 运行所必需的。
  • uuid — 为我们的实体生成唯一标识符。

运行 cargo build 以下载所有依赖。首次运行时需要一些时间。



步骤 2:创建数据模型与存储

我们的 API 将管理一个任务列表(一个 TODO 应用程序)。让我们创建一个简单的模型。打开 src/main.rs 并添加以下代码:

use actix_web::{web, App, HttpServer, HttpResponse, middleware::Logger};use serde::{Deserialize, Serialize};use std::sync::Mutex;use uuid::Uuid;

// 任务模型#[derive(Debug, Serialize, Deserialize, Clone)]struct Task { id: Uuid, title: String, completed: bool,}

// 创建任务的请求#[derive(Debug, Deserialize)]struct CreateTaskRequest { title: String,}

// 任务存储(内存中)struct AppState { tasks: Mutex>,}

我们使用 Mutex 来实现线程安全的数据访问。在真实项目中,您会用数据库替换它,但此选项用于演示目的已足够。

现在让我们添加一个初始化应用程序状态的函数:

fn init_tasks() -> Vec {    vec![        Task {            id: Uuid::new_v4(),            title: "学习 Rust".to_string(),            completed: false,        },        Task {            id: Uuid::new_v4(),            title: "编写 REST API".to_string(),            completed: true,        },    ]}


步骤 3:实现 CRUD 端点

现在让我们为 REST API 创建主要处理器。在模型声明之后添加以下代码:



GET /tasks — 获取所有任务列表

async fn get_tasks(data: web::Data<AppState>) -> HttpResponse {    let tasks = data.tasks.lock().unwrap();    HttpResponse::Ok().json(tasks.clone())}


POST /tasks — 创建新任务

async fn create_task(    data: web::Dat                

博客

书籍推荐