為什么選擇 Rust?
在構建現代 API 服務器時,TypeScript、Go 和 Rust 是當前社區中最受歡迎的三種語言。它們各有優缺點:
- TypeScript:生產效率高,但性能相對較差。
- Go:在生產效率和性能之間取得平衡。
- Rust:性能最佳,但開發效率較低。
盡管 Rust 的學習曲線較陡,但它的類型安全性和高性能使其成為構建高效、可靠 API 服務器的絕佳選擇。
類型安全
在 TypeScript 中,開發者可能會忽略對請求體或第三方數據源的詳細類型定義。而 Rust 的類型系統則強制開發者為所有數據類型提供完整的定義,或者明確選擇使用通用類型(如 serde_json 中的 Value 類型)。這種嚴格的類型檢查極大地降低了運行時錯誤的可能性。
執行速度
Rust 的執行速度接近 C 和 C++,并且由于沒有垃圾回收機制,其內存管理更加高效。這種高性能特性使得 Rust 應用在垂直擴展時比 Node.js 更具優勢,從而降低了基礎設施的成本和復雜性。
開發效率
雖然 Rust 的開發效率可能不如 TypeScript,但在某些場景下,Rust 的優勢反而更明顯。例如,在 Rust 中使用 MongoDB 不需要額外的庫(如 Mongoose),這簡化了開發流程。此外,Rust 的高類型安全性可以減少代碼維護成本,從長遠來看提高了整體生產力。
為什么選擇 MongoDB?
在本教程中,我們選擇 MongoDB 作為數據庫,原因如下:
- 快速設置:相比 PostgreSQL 等 SQL 數據庫,MongoDB 的設置更為簡單。
- 類型安全性:Rust 的類型系統為 MongoDB 的無模式設計提供了額外的安全性和可預測性。
如果您需要手動安裝 MongoDB,可以參考其官方安裝指南。
項目目標
我們將構建一個用于管理遛狗預約的 API。以下是項目的主要數據結構和功能:
數據結構
- 狗:記錄寵物的名字、年齡和品種。
- 主人:記錄主人的姓名、地址和聯系方式。
- 預約:記錄預約的開始時間、持續時間以及相關的主人信息。
API 功能
- POST /owner:添加主人信息。
- POST /dog:為指定主人添加寵物信息。
- POST /booking:為指定主人創建預約。
- GET /booking:獲取所有未來的預約,按時間排序。
- PUT /booking/{id}/cancel:取消指定預約。
通過這些功能,您將能夠輕松管理遛狗預約,并為后續功能擴展打下基礎。
環境準備
在開始之前,請確保您的系統已安裝 Rust 和 Cargo。運行以下命令檢查安裝情況:
rustc --version
cargo --version
創建新項目
使用 Cargo 創建一個新的 Rust 項目:
cargo new rust-web-server-tutorial
接著,打開項目目錄下的 Cargo.toml 文件,并添加以下依賴項:
- Actix:用于構建高性能 HTTP 服務器。
- MongoDB:連接和操作 MongoDB 數據庫。
- Serde:用于序列化和反序列化數據。
- Chrono:處理日期和時間。
- Futures-util:處理異步流。
在項目的入口文件 main.rs 中,添加一個簡單的 HTTP 服務器示例,并綁定到 http://localhost:5001。
快速開發和調試
在開發過程中,您可以使用以下命令實時監控代碼更改并自動運行項目:
cargo watch -c -w src -x run
其中:
-c:清除屏幕。
-w src:僅監控 src 目錄中的文件。
-x run:在檢測到更改時運行項目。
訪問 http://localhost:5001,您應該會看到返回的文本“Hello Medium!”。
文件結構設置
為了更好地組織代碼,我們將項目劃分為以下三個主要模塊:
- models:定義數據庫和 HTTP 請求中使用的數據結構。
- routes:定義 API 路由及其處理邏輯。
- services:處理數據庫連接和操作。
項目的文件結構如下:
rust-web-server-tutorial/
└── src/
├── main.rs
├── models/
│ ├── booking_model.rs
│ ├── dog_model.rs
│ ├── mod.rs
│ └── owner_model.rs
├── routes/
│ ├── booking_route.rs
│ ├── dog_route.rs
│ ├── mod.rs
│ └── owner_route.rs
└── services/
├── db.rs
└── mod.rs
可以通過以下命令快速生成這些文件和目錄:
cd src &&
mkdir models routes services &&
touch models/booking_model.rs models/dog_model.rs models/mod.rs models/owner_model.rs &&
touch routes/booking_route.rs routes/dog_route.rs routes/mod.rs routes/owner_route.rs &&
touch services/db.rs services/mod.rs &&
cd ..
定義數據模型
預訂模型
定義 Booking 數據結構,用于表示數據庫中的預約記錄。同時,為了簡化用戶請求,我們創建了 BookingRequest 結構體,并實現了 TryFrom 特性以支持數據轉換。
主人模型
定義 Owner 數據結構,包含主人的姓名、地址和聯系方式。某些字段(如電子郵件)可能是可選的,因此使用了 Option 類型。
狗模型
定義 Dog 數據結構,記錄寵物的基本信息。
在 mod.rs 文件中公開這些模型,以便在其他模塊中使用。
數據庫服務
在 services/db.rs 文件中,定義一個 Database 結構體,用于管理 MongoDB 的連接和操作。通過 init 方法初始化數據庫連接,并實現以下功能:
- 創建記錄:支持添加主人、寵物和預約。
- 取消預約:更新預約狀態為已取消。
- 獲取預約:通過 MongoDB 的聚合操作獲取完整的預約數據。
添加 HTTP 路由
在 routes 目錄下,為每個功能模塊創建對應的路由文件,并實現以下端點:
- 狗路由:處理寵物相關的 API 請求。
- 主人路由:處理主人相關的 API 請求。
- 預約路由:處理預約的創建、查詢和取消。
在 mod.rs 文件中公開這些路由,并在 main.rs 中將其連接到 HTTP 服務器。
測試和驗證
使用 Postman 或 cURL 測試 API。例如:
curl -X POST http://localhost:5001/owner -H "Content-Type: application/json" -d '{"name": "John Doe", "address": "123 Main St"}'
通過這些測試,確保 API 的功能正常運行。
總結
通過本教程,您學習了如何使用 Rust 和 Actix 構建一個高性能的 API 服務器,并結合 MongoDB 實現數據存儲。雖然 Rust 的學習曲線較陡,但其高性能和類型安全性使其成為構建可靠網絡服務的理想選擇。
原文鏈接: https://www.bretcameron.com/blog/how-to-build-an-api-server-with-rust
熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
国产福利一区二区三区视频在线|
中文字幕一区二|
99精品久久久久久|
一区二区三区精品视频在线|
欧美丰满嫩嫩电影|
av色综合久久天堂av综合|
欧美三级在线播放|
成人毛片在线观看|
国产真实精品久久二三区|
亚洲视频在线一区|
欧美一区二区三区成人|
国产精品69久久久久水密桃|
菠萝蜜视频在线观看一区|
亚洲欧洲日产国产综合网|
在线精品视频免费播放|
高清不卡一区二区|
蜜臀久久99精品久久久画质超高清|
久久久久久97三级|
欧美一区二区福利视频|
欧美另类变人与禽xxxxx|
色一情一乱一乱一91av|
一区在线观看视频|
中文字幕一区二区三区不卡|
精品日韩欧美在线|
欧美日韩一区二区不卡|
国产中文一区二区三区|
成人精品gif动图一区|
免费在线观看一区二区三区|
亚洲成人免费在线观看|
蜜臀av性久久久久蜜臀aⅴ|
国产毛片精品视频|
色综合网站在线|
国产日韩精品一区二区三区在线|
色综合久久久网|
国产精品污www在线观看|
日本一区二区动态图|
中文字幕字幕中文在线中不卡视频|
欧美变态口味重另类|
国产精品国产三级国产普通话蜜臀|
亚洲欧美在线视频|
亚洲一区二区视频在线|
久久精品国产一区二区三
|
欧美影视一区二区三区|
亚洲精品一区在线观看|
国产精品免费视频网站|
亚洲成人免费看|
91麻豆精品一区二区三区|
欧美大片一区二区三区|
www久久精品|
亚洲成人免费影院|
色综合av在线|
亚洲国产高清aⅴ视频|
中日韩免费视频中文字幕|
免费在线看成人av|
精品视频在线免费看|
欧美日韩国产不卡|
国产精品午夜久久|
粉嫩绯色av一区二区在线观看
|
亚洲日本电影在线|
91福利国产精品|
午夜精品视频在线观看|
欧美精品日日鲁夜夜添|
欧美经典三级视频一区二区三区|
国产精品久久久久久久久免费相片
|
精品少妇一区二区三区在线视频|
欧美不卡一区二区三区四区|
国产精品区一区二区三|
久久国产精品99久久人人澡|
粉嫩av一区二区三区粉嫩|
欧美三级日本三级少妇99|
884aa四虎影成人精品一区|
久久久精品欧美丰满|
成人sese在线|
美女网站色91|
欧美xxxxx牲另类人与|
国产成人精品免费一区二区|
国产精品久久久久国产精品日日|
在线欧美一区二区|
成人免费观看视频|
激情六月婷婷综合|
亚洲国产精品久久不卡毛片|
国产日韩欧美不卡|
久久九九全国免费|
亚洲国产精品传媒在线观看|
成人午夜伦理影院|
亚洲黄网站在线观看|
亚洲色图欧美在线|
日韩不卡免费视频|
欧美成人伊人久久综合网|
91国产福利在线|
91麻豆精品秘密|
thepron国产精品|
成人免费视频视频|
av午夜一区麻豆|
99久久亚洲一区二区三区青草|
亚洲国产欧美日韩另类综合|
午夜视频一区二区|
免费视频一区二区|
日韩激情在线观看|
国产福利一区在线观看|
91视频免费观看|
久久免费偷拍视频|
夜色激情一区二区|
国产精品91一区二区|
欧美日韩国产片|
色网综合在线观看|
26uuu久久综合|
在线不卡免费欧美|
成人app下载|
国产精品丝袜91|
国产精品久久久久桃色tv|
中文成人综合网|
亚洲一区二区三区中文字幕|
美女久久久精品|
欧美一区二区三区四区视频|
亚洲一区二区视频|
高清不卡在线观看|
日韩一区二区影院|
亚洲精品欧美二区三区中文字幕|
成人亚洲一区二区一|
久久久久国产精品免费免费搜索|
六月丁香婷婷久久|
国产精品私房写真福利视频|
国产精品一区专区|
中文字幕一区二区三区精华液
|
av一区二区三区黑人|
91精品国产色综合久久ai换脸|
欧美欧美欧美欧美首页|
精品福利一二区|
91在线观看免费视频|
麻豆精品久久久|
国产日韩欧美不卡|
色哟哟国产精品免费观看|
国产乱人伦偷精品视频免下载|
欧美体内she精高潮|
蜜臀av亚洲一区中文字幕|
亚洲少妇30p|
日韩亚洲欧美综合|
日韩有码一区二区三区|
国产人成一区二区三区影院|
一区二区欧美国产|
亚洲国产精品成人久久综合一区|
成人激情图片网|
国产99久久久国产精品潘金
|
亚洲自拍都市欧美小说|
日韩视频在线观看一区二区|
欧美精品九九99久久|
不卡大黄网站免费看|
色悠久久久久综合欧美99|
国产乱一区二区|
国产成人精品免费网站|
国产欧美va欧美不卡在线|
不卡一区二区中文字幕|
成人午夜电影久久影院|
欧美一区二区三区日韩|
91麻豆免费观看|
精品在线播放免费|
亚洲成av人影院在线观看网|
亚洲免费av在线|
久久电影网站中文字幕|
成人激情小说网站|
欧美无人高清视频在线观看|
91精品国产免费|
欧美曰成人黄网|
欧美www视频|
最新国产精品久久精品|
香蕉乱码成人久久天堂爱免费|
亚洲猫色日本管|
亚洲a一区二区|
午夜视频一区二区|
国产美女一区二区|
日韩欧美自拍偷拍|
青青草原综合久久大伊人精品优势|
成人av动漫网站|
91在线观看污|
国产精品456|
欧美精品一区在线观看|
国产精品久久久久久久久免费相片
|
精品国产乱码久久久久久免费|
国产日韩精品一区|
久久国产精品99精品国产|
欧美日韩的一区二区|
亚洲高清中文字幕|
欧美午夜精品久久久久久孕妇
|
8v天堂国产在线一区二区|
性做久久久久久免费观看|
一本色道久久综合亚洲精品按摩|
最好看的中文字幕久久|
亚洲成人福利片|
精品区一区二区|
波多野结衣91|
中文字幕欧美一区|
91精品午夜视频|
成人一级片网址|
美女一区二区三区|
久久综合一区二区|
亚洲一二三级电影|
日本一区二区三区四区|
在线看国产一区二区|
久久成人综合网|