二、項目初始化與依賴管理

1. 創(chuàng)建項目并添加依賴

cargo new rust-todo-api && cd rust-todo-api
cargo add axum tokio -F full
cargo add diesel -F postgres
cargo add serde -F derive
cargo add r2d2        # 連接池

?? AI 助攻
想自動生成帶注釋的 Cargo.toml?用「代碼生成」提示詞,30 秒即可拿到模板,再交給「代碼優(yōu)化」移除冗余特性,編譯速度提升 20%!


三、數(shù)據(jù)庫遷移與 Schema 生成

1. 安裝 Diesel CLI 并初始化

cargo install diesel_cli --no-default-features -F postgres
diesel setup              # 創(chuàng)建 migrations 目錄與 diesel.toml
diesel migration generate create_todos

2. 編寫遷移文件

migrations/2023-xx-xx_create_todos/up.sql

CREATE TABLE todos (
  id SERIAL PRIMARY KEY,
  title TEXT NOT NULL,
  completed BOOLEAN NOT NULL DEFAULT FALSE
);

down.sql

DROP TABLE todos;

3. 應用遷移并生成 schema

diesel migration run      # 生成 src/schema.rs

四、構建 Axum HTTP 服務器

1. 主函數(shù)與路由匯總

// src/main.rs
use axum::{
    routing::{get, post, put, delete},
    Router, Extension, Json, http::StatusCode,
};
use diesel::pg::PgConnection;
use diesel::r2d2::{self, ConnectionManager};
use serde::{Deserialize, Serialize};
use std::net::SocketAddr;

type DbPool = r2d2::Pool<ConnectionManager<PgConnection>>;

#[tokio::main]
async fn main() {
    let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL must be set");
    let manager = ConnectionManager::<PgConnection>::new(database_url);
    let pool = r2d2::Pool::builder()
        .build(manager)
        .expect("Failed to create pool.");

    let app = Router::new()
        .route("/todos", get(get_todos).post(create_todo))
        .route("/todos/:id", put(update_todo).delete(delete_todo))
        .layer(Extension(pool));

    let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
    axum::Server::bind(&addr)
        .serve(app.into_make_service())
        .await
        .unwrap();
}

?? AI 審查
把「連接池配置」提交評審?「代碼審查助手」可自動檢查最大連接數(shù)、超時設置,提前發(fā)現(xiàn) 80% 性能隱患!


五、CRUD 處理程序實現(xiàn)

1. 共享模型與 DTO

#[derive(Serialize, Deserialize)]
struct NewTodo {
    title: String,
}

#[derive(Serialize, Deserialize)]
struct UpdateTodo {
    title: Option<String>,
    completed: Option<bool>,
}

2. 創(chuàng)建 Todo

async fn create_todo(
    Extension(pool): Extension<DbPool>,
    Json(new_todo): Json<NewTodo>,
) -> impl IntoResponse {
    let conn = pool.get().expect("pool error");
    let todo = diesel::insert_into(schema::todos::table)
        .values(&new_todo.title)
        .get_result::<Todo>(&conn)
        .expect("insert error");
    (StatusCode::CREATED, Json(todo))
}

3. 查詢列表

async fn get_todos(Extension(pool): Extension<DbPool>) -> impl IntoResponse {
    let conn = pool.get().expect("pool error");
    let results = schema::todos::table.load::<Todo>(&conn).expect("select error");
    Json(results)
}

4. 更新與刪除

async fn update_todo(
    Extension(pool): Extension<DbPool>,
    Path(id): Path<i32>,
    Json(update): Json<UpdateTodo>,
) -> impl IntoResponse {
    let conn = pool.get().expect("pool error");
    diesel::update(schema::todos::table.find(id)))
        .set(&update)
        .execute(&conn)
        .expect("update error");
    StatusCode::OK
}

async fn delete_todo(
    Extension(pool): Extension<DbPool>,
    Path(id): Path<i32>,
) -> impl IntoResponse {
    let conn = pool.get().expect("pool error");
    diesel::delete(schema::todos::table.find(id)))
        .execute(&conn)
        .expect("delete error");
    StatusCode::NO_CONTENT
}

六、運行與測試

1. 啟動服務

export DATABASE_URL=postgres://user:pass@localhost/todo_db
cargo run

2. 快速驗證(curl)

# 創(chuàng)建
curl -X POST localhost:3000/todos \
  -H "Content-Type: application/json" \
  -d '{"title":"Learn Rust"}'

# 列表
curl localhost:3000/todos

# 更新
curl -X PUT localhost:3000/todos/1 \
  -H "Content-Type: application/json" \
  -d '{"completed":true}'

# 刪除
curl -X DELETE localhost:3000/todos/1

? AI 補救
把「curl 測試命令」寫進 README 太麻煩?用「代碼文檔生成器」提示詞,自動在函數(shù)頭部生成標準注釋,提醒后續(xù)接入 Postman 集合,文檔一鍵達標!


七、進階路線

  1. 錯誤統(tǒng)一處理:使用 thiserror 定義業(yè)務錯誤 + Axum 的 IntoResponse
  2. JWT 認證:添加 axum-extraTypedHeader 驗證 Bearer
  3. OpenAPI 文檔:集成 utoipa 自動生成 Swagger UI
  4. Docker 化:多階段構建,最終鏡像 < 20 MB
  5. CI/CD:GitHub Actions 自動跑 cargo test + cargo clippy

八、總結與下一步

通過本文的逐步指南,我們成功使用 Rust、Axum 和 Diesel 構建了一個功能齊全的 Todo API,涵蓋:

未來可在此基礎上添加身份驗證、更復雜的查詢邏輯以及其他功能,以滿足實際業(yè)務需求。希望本文能為您提供啟發(fā),祝編碼愉快!

?? 立即行動
把代碼 push 到 GitHub → 用 Fly.io / Render 一鍵部署 → 前端 React 調用,今晚就能擁有屬于自己的高性能 Todo API


原文鏈接: https://docs.rapidapp.io/blog/building-a-todo-api-with-rust-axum-and-diesel

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業(yè)工程師共享工作效率翻倍的秘密
返回頂部
上一篇
Rust + Rocket + Diesel 構建高性能 CRUD API 全程指南
下一篇
Rust REST API 進階:查詢參數(shù)、業(yè)務解耦與虛擬數(shù)據(jù)返回全程指南
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
在线观看一区二区视频| 国产激情视频一区二区在线观看 | 26uuu国产日韩综合| 亚洲成在线观看| 欧美日韩精品一区二区天天拍小说 | 久久综合中文字幕| 久久成人免费电影| 亚洲精品一区二区三区99| 国产在线播放一区三区四| 国产欧美一区二区三区在线看蜜臀| 精品在线观看视频| 国产欧美一区二区精品婷婷| 99re6这里只有精品视频在线观看| 国产精品免费久久| 欧美制服丝袜第一页| 日韩国产欧美在线观看| 久久综合色婷婷| 成人h动漫精品一区二区| 亚洲美女屁股眼交3| 欧美精品日日鲁夜夜添| 国产一区二区三区香蕉| 中文字幕日韩av资源站| 欧美夫妻性生活| 国产传媒日韩欧美成人| 一区二区三区日韩在线观看| 91精品国产欧美一区二区18| av资源网一区| 久久国产综合精品| 亚洲精品午夜久久久| 日韩亚洲欧美中文三级| 成人国产精品视频| 免费观看日韩av| 亚洲午夜三级在线| 国产香蕉久久精品综合网| 欧美伊人久久久久久午夜久久久久| 日本欧美在线观看| 亚洲人吸女人奶水| 久久精品在线观看| 日韩小视频在线观看专区| 91亚洲国产成人精品一区二区三| 蜜臀av性久久久久蜜臀aⅴ流畅| 日韩理论在线观看| 国产精品乱码人人做人人爱| 精品美女一区二区| 51精品国自产在线| 欧美日本视频在线| 欧美日韩在线免费视频| 91小视频在线| av电影天堂一区二区在线| 国产传媒久久文化传媒| 国产精品综合av一区二区国产馆| 午夜精品爽啪视频| 亚洲一二三四在线| 亚洲色图.com| 国产精品久久免费看| 国产精品污网站| 国产午夜精品一区二区三区视频| 2021国产精品久久精品| 国产三区在线成人av| 久久久久久黄色| 欧美国产97人人爽人人喊| ww久久中文字幕| 久久精品人人做人人综合| 久久伊99综合婷婷久久伊| 国产欧美综合在线观看第十页| 日本一区二区免费在线| 国产精品女主播av| 亚洲天堂2014| 亚洲成人免费观看| 美女高潮久久久| 国产精品一区二区三区四区| av午夜精品一区二区三区| 日本乱码高清不卡字幕| 欧美一区二区黄| 久久久www免费人成精品| 欧美激情综合五月色丁香| 亚洲欧美精品午睡沙发| 日韩影院免费视频| 国产精品原创巨作av| 91在线高清观看| 欧美日韩国产精品成人| 欧美r级在线观看| 亚洲女与黑人做爰| 狠狠狠色丁香婷婷综合激情 | 一级特黄大欧美久久久| 免费不卡在线视频| 91玉足脚交白嫩脚丫在线播放| 欧美丰满一区二区免费视频| 久久综合九色综合欧美就去吻| 亚洲视频网在线直播| 青青草视频一区| 日本精品一区二区三区高清| 欧美r级在线观看| 一区二区三区.www| 国产成人免费视频一区| 欧美一区二区视频观看视频| 国产精品视频yy9299一区| 久久99久久久欧美国产| 欧美无砖专区一中文字| 中文字幕一区二区三区视频| 国产伦精品一区二区三区免费| 51精品国自产在线| 一区二区三区国产精华| av电影在线观看完整版一区二区| 精品剧情在线观看| 久久成人久久爱| 日韩三级在线观看| 久久精品国产色蜜蜜麻豆| 欧美一级生活片| 青草国产精品久久久久久| 欧美视频精品在线观看| 亚洲一区二区高清| 欧美日韩国产a| 香蕉影视欧美成人| 欧美日韩免费视频| 亚洲综合清纯丝袜自拍| 色屁屁一区二区| 亚洲特级片在线| 在线观看成人免费视频| 一区二区三区国产精华| 日本韩国一区二区三区视频| 亚洲猫色日本管| 欧美日韩www| 玖玖九九国产精品| 久久久不卡网国产精品一区| 成人教育av在线| 亚洲国产成人91porn| 日韩一区二区在线观看视频 | 福利一区在线观看| 亚洲女人****多毛耸耸8| 在线精品亚洲一区二区不卡| 亚洲国产日韩a在线播放| 欧美视频在线不卡| 麻豆成人久久精品二区三区红| 久久综合九色综合欧美98| 成人av电影在线播放| 亚洲免费av高清| 日韩欧美精品三级| av成人免费在线观看| 日韩高清在线观看| 国产精品福利一区二区三区| 欧美日韩一区二区三区在线看| 蜜桃久久久久久久| 综合婷婷亚洲小说| 日韩欧美一区二区在线视频| 国产91精品在线观看| 日韩黄色小视频| 中文字幕视频一区二区三区久| 日韩无一区二区| 99精品久久99久久久久| 免费观看在线色综合| 亚洲图片一区二区| 成人一区二区三区| 久久久精品国产免大香伊| 日韩欧美卡一卡二| 国产精品美女一区二区三区| 亚洲精选视频在线| 亚洲乱码国产乱码精品精小说 | 国产丝袜欧美中文另类| 美日韩一级片在线观看| 国产精品久久久久天堂| 国产一区二区三区av电影| 成人免费高清视频在线观看| 日韩高清一区在线| 亚洲女子a中天字幕| 日本一区二区三区电影| 欧美sm美女调教| 7777精品伊人久久久大香线蕉的 | 国产精品少妇自拍| 26uuu亚洲| 精品国产乱码久久久久久闺蜜| 欧美四级电影网| 欧美性受极品xxxx喷水| 一本久久精品一区二区| av不卡在线观看| 成人av网站在线| 99精品视频一区二区三区| 99麻豆久久久国产精品免费优播| 大尺度一区二区| 96av麻豆蜜桃一区二区| 色综合久久66| 色美美综合视频| 欧美日韩免费观看一区二区三区| 色婷婷精品大视频在线蜜桃视频| 在线亚洲一区观看| 717成人午夜免费福利电影| 精品免费国产二区三区| 国产女主播一区| 一区二区三区中文在线| 日本午夜一区二区| 国产一区二区三区黄视频| 成人福利视频网站| 欧美色综合久久| 精品少妇一区二区三区日产乱码 | 国产精品久久久久婷婷| 一个色妞综合视频在线观看| 视频在线观看91| 国产精品一区二区三区99| 色婷婷国产精品久久包臀| 日韩午夜在线观看视频|