微信截圖_17435908574000.png)
Transformers Generate 功能介紹
REST API以其簡單、靈活和可擴(kuò)展的特點,成為構(gòu)建跨平臺Web服務(wù)的首選。它通常使用JSON或XML格式進(jìn)行數(shù)據(jù)交換,便于不同平臺之間的集成。在本教程中,我們將使用以下技術(shù)棧:
SQLX是一個Rust庫,它直接執(zhí)行原始SQL查詢,與傳統(tǒng)ORM不同,SQLX提供了更高的控制性和安全性。它支持在編譯時檢查SQL查詢,從而在開發(fā)階段就能發(fā)現(xiàn)潛在錯誤。此外,SQLX支持多種數(shù)據(jù)庫,包括PostgreSQL、MySQL和SQLite。
在開始構(gòu)建API之前,我們需要完成以下準(zhǔn)備工作:
我們將使用Docker來創(chuàng)建并運(yùn)行PostgreSQL容器。以下是創(chuàng)建容器的命令:
docker run --name rust-postgres-db -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=password -e POSTGRES_DB=rust_api -p 5432:5432 -d postgres
如果需要在容器重啟后保存數(shù)據(jù),可以掛載一個卷:
docker run --name rust-postgres-db -e POSTGRES_USER=admin -e POSTGRES_PASSWORD=password -e POSTGRES_DB=rust_api -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres
使用Cargo初始化一個新的Rust項目:
cargo new rust-axum-rest-api
cd rust-axum-rest-api
在Cargo.toml
中添加以下依賴項:
[dependencies]
axum = "0.6"
tokio = { version = "1", features = ["full"] }
sqlx = { version = "0.6", features = ["runtime-tokio-native-tls", "postgres"] }
serde = { version = "1.0", features = ["derive"] }
tracing = "0.1"
tracing-subscriber = "0.3"
dotenv = "0.15"
安裝SQLX CLI以支持?jǐn)?shù)據(jù)庫遷移:
cargo install sqlx-cli --features postgres
在項目根目錄創(chuàng)建.env
文件,添加以下內(nèi)容:
DATABASE_URL=postgres://admin:password@localhost/rust_api
將.env
文件添加到.gitignore
中以保護(hù)敏感信息。
運(yùn)行以下命令創(chuàng)建數(shù)據(jù)庫:
sqlx database create
創(chuàng)建遷移文件以定義users
和posts
表:
sqlx migrate add create_users_table
sqlx migrate add create_posts_table
在遷移文件中定義表結(jié)構(gòu),例如:
-- users 表
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username TEXT NOT NULL,
email TEXT NOT NULL UNIQUE
);
-- posts 表
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
title TEXT NOT NULL,
body TEXT NOT NULL,
user_id INTEGER REFERENCES users(id)
);
應(yīng)用遷移:
sqlx migrate run
編寫一個簡單的啟動代碼:
use axum::{routing::get, Router};
use std::net::SocketAddr;
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(|| async { "Hello, world!" }));
let addr = SocketAddr::from(([0, 0, 0, 0], 5000));
println!("Server running at http://{}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
運(yùn)行服務(wù)器:
cargo run
訪問http://localhost:5000
,應(yīng)返回Hello, world!
。
定義Post
結(jié)構(gòu)體并實現(xiàn)查詢邏輯:
use serde::Serialize;
#[derive(Serialize)]
struct Post {
id: i32,
title: String,
body: String,
user_id: i32,
}
async fn get_posts() -> Result<Json<Vec>, StatusCode> {
let posts = sqlx::query_as!(Post, "SELECT * FROM posts")
.fetch_all(&pool)
.await
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
Ok(Json(posts))
}
定義CreatePost
結(jié)構(gòu)體并實現(xiàn)插入邏輯:
use serde::Deserialize;
#[derive(Deserialize)]
struct CreatePost {
title: String,
body: String,
user_id: i32,
}
async fn create_post(Json(payload): Json) -> Result<Json, StatusCode> {
let post = sqlx::query_as!(
Post,
"INSERT INTO posts (title, body, user_id) VALUES ($1, $2, $3) RETURNING *",
payload.title,
payload.body,
payload.user_id
)
.fetch_one(&pool)
.await
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
Ok(Json(post))
}
實現(xiàn)更新邏輯:
async fn update_post(
Path(id): Path,
Json(payload): Json,
) -> Result<Json, StatusCode> {
let post = sqlx::query_as!(
Post,
"UPDATE posts SET title = $1, body = $2 WHERE id = $3 RETURNING *",
payload.title,
payload.body,
id
)
.fetch_one(&pool)
.await
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
Ok(Json(post))
}
實現(xiàn)刪除邏輯:
async fn delete_post(Path(id): Path) -> Result<Json, StatusCode> {
sqlx::query!("DELETE FROM posts WHERE id = $1", id)
.execute(&pool)
.await
.map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
Ok(Json(json!({ "message": "Post deleted successfully" })))
}
通過本教程,我們使用Rust和Axum構(gòu)建了一個完整的REST API,涵蓋了用戶和帖子的CRUD操作。在此過程中,我們結(jié)合了SQLX實現(xiàn)高效的數(shù)據(jù)庫交互,并使用Serde進(jìn)行JSON序列化。您可以在此基礎(chǔ)上擴(kuò)展功能,例如添加更多路由或?qū)崿F(xiàn)復(fù)雜的查詢邏輯。
原文鏈接: https://www.rustfinity.com/blog/create-high-performance-rest-api-with-rust
Transformers Generate 功能介紹
四款A(yù)I大模型API價格對比:DeepSeek R1、ChatGPT o3-mini、Grok3、通義千問 Max
四款A(yù)I大模型API基礎(chǔ)參數(shù)、核心性能的區(qū)別:DeepSeek R1、ChatGPT o3-mini、Grok3、通義千問 Max
2025年多模態(tài)大模型API基礎(chǔ)參數(shù)、核心性能:Deepseek、ChatGPT、文心一言
2025年最新推理大模型API價格對比:通義千問Max vs 豆包1.5 Pro vs 混元Lite
2025年多模態(tài)大模型API價格對比:Deepseek、ChatGPT、文心一言
國產(chǎn)精品大模型API基礎(chǔ)參數(shù)、核心性能:通義千問 Max、智譜清言 GLM 4 Plus、DeepSeek V3
2025年最新推理大模型API參數(shù)與性能詳解:通義千問Max、豆包1.5 Pro、混元Lite深度對比
2025年五大AI大模型API基礎(chǔ)參數(shù)、核心性能:Gemini 2.5、DeepSeek R1、Claude 3.7