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

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

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

开始课程

引言:为什么用Rust做REST API?

\n

Rust是一种现代系统编程语言,它结合了C/C++的性能和无垃圾回收器的内存安全性。对于创建REST API,Rust提供了几个强大的框架,而Actix-web是最流行的之一。在本指南中,我们将逐步在30分钟内用Rust创建一个完整的REST API。即使您是Rust新手,也会看到如何快速上手。

\n\n

环境准备

\n

在编写代码之前,请确保您已安装Rust。如果没有,请执行以下命令:

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

安装后检查版本:

\n
rustc --version
\n

现在创建一个新项目:

\n
cargo new rust_rest_api\ncd rust_rest_api
\n

打开Cargo.toml文件并添加依赖:

\n
[dependencies]\nactix-web = "4"\nserde = { version = "1.0", features = ["derive"] }\nserde_json = "1.0"\ntokio = { version = "1", features = ["full"] }
\n

运行cargo build来安装所有包。这需要1-2分钟。

\n\n

创建基础的Rust REST API

\n

从一个返回问候语的简单端点开始。打开src/main.rs并编写:

\n
use actix_web::{web, App, HttpServer, Responder};\n\nasync fn hello() -> impl Responder {\n    "你好,世界!这是用Rust写的REST API!"\n}\n\n#[actix_web::main]\nasync fn main() -> std::io::Result<()> {\n    println!("服务器已启动在 http://127.0.0.1:8080");\n    HttpServer::new(|| {\n        App::new()\n            .route("/", web::get().to(hello))\n    })\n    .bind("127.0.0.1:8080")?\n    .run()\n    .await\n}
\n

使用命令cargo run启动服务器,并在浏览器中打开http://127.0.0.1:8080。您将看到我们的问候语。这是任何Rust REST API的基础。

\n\n

添加数据结构与JSON

\n

真正的REST API处理JSON。创建一个用户模型和获取用户的端点:

\n
use serde::{Deserialize, Serialize};\n\n#[derive(Serialize, Deserialize)]\nstruct User {\n    id: u32,\n    name: String,\n    email: String,\n}\n\nasync fn get_user() -> impl Responder {\n    let user = User {\n        id: 1,\n        name: "伊万·彼得罗夫".to_string(),\n        email: "ivan@example.com".to_string(),\n    };\n    web::Json(user)\n}\n\n// 在 main() 中添加新路由:\n// .route("/user", web::get().to(get_user))
\n

现在访问/user,您将获得一个JSON对象。这是关键点:Rust通过serde自动将结构体序列化为JSON。

\n\n

处理查询参数和POST请求

\n

真正的API应该处理不同的HTTP方法和参数。添加一个通过POST创建用户的端点:

\n
use actix_web::web::Json;\n\nasync fn create_user(user: Json<User>) -> impl Responder {\n    let new_user = user.into_inner();\n    println!("已创建用户:{} ({})", new_user.name, new_user.email);\n    web::Json(new_user)\n}\n\n// 在 main() 中:\n// .route("/user", web::post().to(create_user))
\n

现在可以通过curl发送带有JSON主体的POST请求:

\n
curl -X POST http://127.0.0.1:8080/user \\\n  -H "Content-Type: application/json" \\\n  -d '{"id":2,"name":"玛丽亚·斯米尔诺娃","email":"maria@example.com"}'
\n

服务器将返回相同的对象,确认创建成功。这是CRUD操作的基础。

\n\n

处理路径参数和查询字符串

\n

添加一个通过路径参数按ID获取用户的端点:

\n
use actix_web::web::Path;\n\nasync fn get_user_by_id(path: Path<u32>) -> impl Responder {\n    let user_id = path.into_inner();\n    // 在实际应用中,这里会查询数据库\n                

博客

书籍推荐