Trong thế giới công nghệ ngày nay, xây dựng các API nhanh chóng, hiệu quả và có thể mở rộng là điều rất quan trọng đối với các nhà phát triển. Một sự kết hợp mạnh mẽ đang trở nên phổ biến là sử dụng FastAPI với MongoDB. FastAPI, như tên gọi, là một framework web hiện đại, hiệu suất cao để xây dựng API bằng Python 3.7+ mà nhanh chóng để lập trình và chạy. Trong khi đó, MongoDB là một cơ sở dữ liệu NoSQL nổi tiếng với khả năng mở rộng và linh hoạt. Cùng nhau, chúng cung cấp một giải pháp vững chắc để tạo ra các API có thể xử lý bất kỳ từ một dự án nhỏ đến một ứng dụng quy mô lớn.
Vậy, tại sao bạn nên cân nhắc cặp đôi này cho dự án tiếp theo của mình? Hãy cùng khám phá!
Bắt đầu: Thiết lập Môi trường của Bạn
Trước khi chúng ta bắt đầu xây dựng API của mình, hãy thiết lập môi trường của chúng ta. Bạn sẽ cần cài đặt Python trên hệ thống của mình, cùng với pip để quản lý các gói.

Bước 1: Cài đặt FastAPI và Uvicorn
Đầu tiên, hãy cài đặt FastAPI. Mở terminal của bạn và chạy lệnh sau:
pip install fastapi
Tiếp theo, chúng ta sẽ cài đặt Uvicorn, một implementation máy chủ ASGI cho Python, sẽ phục vụ cho ứng dụng FastAPI của chúng ta:
pip install uvicorn
Bước 2: Cài đặt Motor
Motor là driver không đồng bộ cho MongoDB hoạt động liền mạch với FastAPI. Để cài đặt nó, hãy chạy:
pip install motor
Tuyệt vời! Bây giờ chúng ta đã có mọi thứ cần thiết để bắt đầu lập trình.
Tạo ứng dụng FastAPI đầu tiên của bạn
Bây giờ, hãy tạo một ứng dụng FastAPI cơ bản và kết nối nó với MongoDB.
Bước 1: Khởi tạo Ứng dụng FastAPI
Tạo một tệp Python mới (hãy đặt tên là main.py
) và bắt đầu bằng cách nhập FastAPI và khởi tạo ứng dụng:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"message": "Chào mừng bạn đến với hướng dẫn FastAPI với MongoDB!"}
Mã này thiết lập một ứng dụng FastAPI cơ bản với một endpoint duy nhất.

Bước 2: Kết nối với MongoDB
Tiếp theo, hãy kết nối ứng dụng FastAPI của chúng ta với MongoDB bằng cách sử dụng Motor. Chúng tôi sẽ tạo một tệp mới gọi là database.py
để quản lý kết nối cơ sở dữ liệu của chúng tôi.
from motor.motor_asyncio import AsyncIOMotorClient
MONGO_DETAILS = "mongodb://localhost:27017"
client = AsyncIOMotorClient(MONGO_DETAILS)
database = client.mydatabase
Trong ví dụ này, chúng ta kết nối với một instance MongoDB đang chạy cục bộ. Hãy đảm bảo rằng MongoDB đã được cài đặt và đang chạy trên hệ thống của bạn.
Bước 3: Định nghĩa Mô hình Pydantic
Các mô hình Pydantic là một cách tuyệt vời để định nghĩa các cấu trúc dữ liệu và đảm bảo việc xác thực dữ liệu trong FastAPI. Tạo một tệp models.py
:
from pydantic import BaseModel
class Item(BaseModel):
name: str
description: str
price: float
available: bool = True
Mô hình này định nghĩa cấu trúc của một món hàng trong kho của chúng tôi.

Tạo các Endpoint API
Với cấu hình cơ bản đã xong, hãy tạo một số endpoint API để tương tác với cơ sở dữ liệu MongoDB của chúng ta.
Bước 1: Tạo bộ sưu tập Món hàng
Đầu tiên, chúng ta cần một bộ sưu tập trong cơ sở dữ liệu MongoDB của mình để lưu trữ các món hàng. Trong main.py
, hãy tạo một endpoint để thêm các món hàng mới vào cơ sở dữ liệu:
from fastapi import FastAPI, HTTPException
from database import database
from models import Item
from bson import ObjectId
app = FastAPI()
@app.post("/items/")
async def create_item(item: Item):
item_dict = item.dict()
result = await database["items"].insert_one(item_dict)
item_dict["_id"] = str(result.inserted_id)
return item_dict
Endpoint này cho phép chúng ta tạo các món hàng mới trong bộ sưu tập MongoDB. Lưu ý cách chúng ta chuyển đổi ID được chèn thành chuỗi để dễ đọc hơn.
Bước 2: Lấy các Món hàng
Tiếp theo, chúng ta sẽ tạo một endpoint để lấy tất cả các món hàng từ cơ sở dữ liệu:
@app.get("/items/")
async def get_items():
items = await database["items"].find().to_list(1000)
for item in items:
item["_id"] = str(item["_id"])
return items
Endpoint này lấy tất cả các món hàng từ bộ sưu tập items
và chuyển đổi ID của chúng thành chuỗi.
Bước 3: Lấy một Món hàng Đơn lẻ
Để lấy một món hàng đơn lẻ theo ID của nó, chúng ta sẽ thêm một endpoint nữa:
@app.get("/items/{item_id}")
async def get_item(item_id: str):
item = await database["items"].find_one({"_id": ObjectId(item_id)})
if item:
item["_id"] = str(item["_id"])
return item
raise HTTPException(status_code=404, detail="Không tìm thấy món hàng")
Endpoint này lấy một món hàng theo ID của nó và trả lại, hoặc phát sinh lỗi 404 nếu không tìm thấy món hàng.
Bước 4: Cập nhật một Món hàng
Cập nhật một món hàng là điều đơn giản với FastAPI và Motor. Thêm mã dưới đây để cập nhật một món hàng theo ID của nó:
@app.put("/items/{item_id}")
async def update_item(item_id: str, item: Item):
result = await database["items"].update_one(
{"_id": ObjectId(item_id)}, {"$set": item.dict()}
)
if result.modified_count == 1:
updated_item = await database["items"].find_one({"_id": ObjectId(item_id)})
updated_item["_id"] = str(updated_item["_id"])
return updated_item
raise HTTPException(status_code=404, detail="Không tìm thấy món hàng")
Endpoint này cập nhật một món hàng theo ID của nó và trả lại món hàng đã cập nhật.
Bước 5: Xóa một Món hàng
Cuối cùng, hãy thêm một endpoint để xóa một món hàng theo ID của nó:
@app.delete("/items/{item_id}")
async def delete_item(item_id: str):
result = await database["items"].delete_one({"_id": ObjectId(item_id)})
if result.deleted_count == 1:
return {"message": "Món hàng đã được xóa"}
raise HTTPException(status_code=404, detail="Không tìm thấy món hàng")
Endpoint này xóa một món hàng và trả về thông báo thành công hoặc lỗi 404 nếu không tìm thấy món hàng.
Cách kết nối với cơ sở dữ liệu MongoDB đến Apidog
- Nhấn "Processors Operation" trong API và chọn "Database Operations".

2. Nhấn "Quản lý Kết nối Cơ sở dữ liệu" trong hộp thả xuống dưới "Kết nối Cơ sở dữ liệu", sau đó nhấn nút "Mới" ở góc trên bên phải.

3. Chọn loại cơ sở dữ liệu MongoDB, sau đó điền thông tin kết nối tương ứng.

Vận hành cơ sở dữ liệu MongoDB
MongoDB lưu trữ dữ liệu ở định dạng tài liệu BSON. Để thuận tiện cho thói quen sử dụng của hầu hết người dùng, khi chỉnh sửa cơ sở dữ liệu MongoDB trong Apidog, hãy nộp các tệp định dạng JSON. Hệ thống sẽ tự động ánh xạ từng trường đến kiểu dữ liệu BSON tương ứng dựa trên nội dung thực tế của JSON.
Trong số đó, trường _id
là đặc biệt tương đối. Theo quy định của MongoDB, mỗi tài liệu phải có một trường _id
làm khóa chính và kiểu dữ liệu mặc định của trường này là ObjectId
thay vì String
.
Nếu bạn cần khai báo một trường _id
kiểu ObjectId
, bạn có thể sử dụng định dạng chuỗi thông thường. Nếu nội dung chuỗi phù hợp với định dạng ObjectId
, Apidog sẽ tự động ánh xạ nó sang kiểu ObjectId
trong BSON.
Giả sử hiện có một tài liệu BSON như vậy trong MongoDB:
{ _id: ObjectId('6569a36afcf5ee79c08d2f94'), name: "Apidog"}
Vậy khi sử dụng Apidog để truy vấn tài liệu qua _id
, giá trị JSON cần nhập trong "Điều kiện Truy vấn" là:
{ "_id": "6569a36afcf5ee79c08d2f94" }
Các thao tác phổ biến
Đối với các thao tác CRUD phổ biến, hỗ trợ thông qua các thao tác API trực quan. Không cần phải viết bất kỳ mã JavaScript nào, chỉ cần chỉ định hành động trong "Loại Hành động", sau đó chỉ định "Tên Bộ sưu tập", và rồi viết nội dung tương ứng trong JSON trong "Điều kiện Truy vấn".
Ví dụ, đối với thao tác truy vấn đã đề cập ở trên, bạn có thể xem tài liệu đã truy vấn trong console sau khi nhập lệnh và bật "Console Log".

Các lệnh nâng cao
Nếu bạn cần các thao tác nâng cao hơn, bạn cũng có thể trực tiếp chạy các lệnh cơ sở dữ liệu. Trong "Loại Hành động", chọn "Chạy lệnh cơ sở dữ liệu" và sau đó nhập lệnh cơ sở dữ liệu ở định dạng JSON. Lưu ý rằng lệnh cơ sở dữ liệu không đề cập đến các lệnh gọi phương thức như db.collection.findOne()
, mà là dữ liệu JSON ở định dạng cụ thể.
Ví dụ, để truy vấn số lượng tài liệu trong bộ sưu tập người dùng, bạn có thể sử dụng lệnh cơ sở dữ liệu count
:
{ "count": "users"}
Sau khi nhập lệnh, bạn có thể xem kết quả trong console.

Kiểm tra API của bạn
Để kiểm tra API của bạn, bạn có thể sử dụng các công cụ như Postman hoặc Apidog. Những công cụ này cho phép bạn gửi yêu cầu đến các endpoint của bạn và xem các phản hồi, giúp dễ dàng gỡ lỗi và đảm bảo mọi thứ hoạt động chính xác.
Sử dụng Apidog để Kiểm tra
Apidog là một công cụ phát triển và kiểm tra API mạnh mẽ giúp đơn giản hóa quy trình tạo, kiểm tra và quản lý API. Dưới đây là cách bạn có thể sử dụng Apidog để kiểm tra ứng dụng FastAPI MongoDB của bạn:
- Tạo một Dự án Mới: Mở Apidog Client và Tạo một dự án mới trong Apidog.

2. Thêm Các Endpoint: Thêm các endpoint bạn đã tạo (/items/
, /items/{item_id}
, v.v.) vào dự án.

3. Gửi Yêu cầu: Sử dụng công cụ để gửi các yêu cầu GET, POST, PUT và DELETE đến các endpoint của bạn và quan sát các phản hồi.

4. Xác thực Phản hồi: Đảm bảo rằng các phản hồi khớp với các đầu ra mong đợi, và sử dụng các thông báo lỗi chi tiết để sửa bất kỳ vấn đề nào.

Kết luận
Trong hướng dẫn này, chúng ta đã đề cập đến những điều cơ bản của việc thiết lập một ứng dụng FastAPI với MongoDB. Chúng ta đã tạo một API kho đơn giản cho phép bạn tạo, lấy, cập nhật và xóa các món hàng. Tốc độ và sự dễ sử dụng của FastAPI, cùng với tính linh hoạt và khả năng mở rộng của MongoDB, khiến chúng trở thành một cặp đôi hoàn hảo để xây dựng các API vững chắc.
Bằng cách tận dụng các công cụ như Apidog, bạn có thể làm đơn giản hóa quy trình phát triển và kiểm tra, đảm bảo rằng các API của bạn đáng tin cậy và hoạt động hiệu quả.
Vậy bạn còn chờ gì nữa? Hãy dấn thân vào FastAPI và MongoDB, và bắt đầu xây dựng các API tuyệt vời ngay hôm nay!