Apidog

Nền tảng phát triển API hợp tác tất cả trong một

Thiết kế API

Tài liệu API

Gỡ lỗi API

Giả lập API

Kiểm thử API tự động

Xây dựng API mạnh mẽ với FastAPI và MongoDB

Tìm hiểu cách xây dựng API nhanh chóng và hiệu quả bằng FastAPI và MongoDB. Hướng dẫn toàn diện này bao gồm mọi thứ từ thiết lập môi trường đến tạo và kiểm tra các điểm cuối, đảm bảo bạn có thể phát triển các ứng dụng vững chắc và có khả năng mở rộng.

Minh Triết

Minh Triết

Updated on tháng 11 29, 2024

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.

Framework FastAPI, hiệu suất cao, dễ học, nhanh chóng lập trình, sẵn sàng cho sản xuất

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.

website chính thức mongoDB

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

  1. Nhấn "Processors Operation" trong API và chọn "Database Operations".
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.

Nhấn "Quản lý Kết nối Cơ sở dữ liệu"

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

Chọn loại cơ sở dữ liệu MongoDB
💡
Apidog rất coi trọng sự bảo mật dữ liệu của bạn. Địa chỉ cơ sở dữ liệu, Cổng, Tên người dùng, Mật khẩu, Tên cơ sở dữ liệu chỉ được lưu trữ cục bộ trên khách hàng và sẽ không được đồng bộ hóa lên đám mây. Ngay cả trong cùng một nhóm, thông tin kết nối cho cơ sở dữ liệu sẽ không được đồng bộ hóa giữa các thành viên. Mỗi thành viên trong nhóm cần tự tay thiết lập kết nối cơ sở dữ liệu.

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".

 viết nội dung tương ứng trong JSON trong "Điều kiện Truy vấn" trong Apidog

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.

Chạy các lệnh cơ sở dữ liệu

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:

  1. Tạo một Dự án Mới: Mở Apidog Client và Tạo một dự án mới trong Apidog.
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.

Thêm Các Endpoint trong Apidog

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.

Gửi Yêu cầu trong Apidog

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.

Xác thực Phản hồi trong Apidog

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!