Giới thiệu
Trong bài viết này, chúng ta sẽ khám phá cách xây dựng một web service đơn giản bằng ngôn ngữ lập trình Rust kết hợp với thư viện Axum. Axum là một framework nhẹ và mạnh mẽ giúp tạo ra các ứng dụng HTTP một cách nhanh chóng và hiệu quả.
Mục tiêu bài học
Sau khi hoàn thành bài viết này, bạn sẽ:
- Nắm vững kiến thức cơ bản về ngôn ngữ lập trình Rust.
- Hiểu rõ cách hoạt động của Web Service bao gồm các khái niệm như Request, Response, và Basic API.
- Biết cách kết nối cơ bản với cơ sở dữ liệu, cụ thể là PostgreSQL.
- Sử dụng SeaORM để tương tác với cơ sở dữ liệu một cách dễ dàng từ Rust.
Hướng dẫn Cài đặt Thư viện Cần thiết
Đầu tiên, bạn cần chỉnh sửa file Cargo.toml
trong dự án của mình để thêm các thư viện cần thiết như sau:
toml
[dependencies]
axum = "0.7.5"
bcrypt = "0.15.1"
chrono = { version = "0.4.38", features = ["serde"] }
dotenv = "0.15.0"
serde_json = "1.0.117"
axum-macros = "0.4.1"
jwt = "9.3.0"
serde = { version = "1.0.202", features = ["derive"] }
tokio = { version = "1.37.0", features = ["full"] }
Giải thích các Thư viện:
- axum: Framework web để phát triển API server.
- axum-macros: Hỗ trợ viết mã gọn hơn cho Axum, giúp quản lý lỗi trong router.
- jsonwebtoken: Xác thực và ủy quyền người dùng thông qua JWT token.
- serde và serde_json: Hỗ trợ cho serialization/deserialization dữ liệu JSON.
- bcrypt: Băm mật khẩu để bảo mật thông tin người dùng.
- dotenv: Quản lý biến môi trường từ file
.env
. - tokio: Runtime cho lập trình bất đồng bộ.
Kết nối với SeaORM
Khái niệm Cơ bản về SeaORM
SeaORM là một Object-Relational Mapper (ORM) cho Rust, giúp tương tác với cơ sở dữ liệu quan hệ dễ dàng hơn. Một số khái niệm cơ bản bạn cần biết:
- Entity: Đại diện cho bảng trong cơ sở dữ liệu.
- Model: Một instance của Entity tương ứng với một hàng dữ liệu.
- Schema: Cấu trúc toàn bộ cơ sở dữ liệu, bao gồm các Entity và mối quan hệ của chúng.
Hướng Dẫn Cài Đặt SeaORM
Bổ sung SeaORM vào Cargo.toml
như sau:
toml
sea-orm = { version = "0.12.15", features = ["sqlx-postgres", "runtime-tokio-rustls", "macros"] }
CLI để Tạo Migration và Entity
Sử dụng CLI để quản lý schema:
bash
sea-orm-cli migrate init
sea-orm-cli migrate generate <tên migration>
sea-orm-cli migrate status
sea-orm-cli migrate refresh
Cấu trúc Dự án
Một cấu trúc dự án MVC điển hình sẽ bao gồm các thư mục như sau:
src
├── controllers
├── helpers
├── main.rs
├── middleware
├── models
├── routers
└── server
Kết nối Server với PostgreSQL
Để kết nối với PostgreSQL, tạo một file .env
chứa các chuỗi kết nối:
dotenv
DATABASE_URL=postgres://username:password@localhost/database
Tiến hành kết nối trong hàm main()
:
rust
#[tokio::main]
async fn main() {
// Kết nối CSDL
}
Tạo Routes với Axum
Sử dụng Axum để định nghĩa các endpoints cho ứng dụng của bạn, bao gồm các chức năng như tạo, đăng nhập, cập nhật, và xóa người dùng.
rust
pub fn user_router(db: Extension<Arc<DatabaseConnection>>) -> Router {
Router::new()
.route("/v1/api/create_user", post(create_user).layer(db.clone()))
.route("/v1/api/login_user", post(login_user).layer(db.clone()))
// Các route khác
}
Kết luận
Trong bài viết này, bạn đã học cách xây dựng một web service đơn giản bằng Rust và Axum, hiểu rõ về các khái niệm liên quan đến web service và cách tương tác với cơ sở dữ liệu thông qua SeaORM.
Hy vọng bài viết sẽ giúp ích cho bạn trong việc phát triển các ứng dụng web bằng Rust.
Cảm ơn bạn đã đọc!
source: viblo