- vừa được xem lúc

FastAPI: API đầu tiên của bạn đạt chuẩn sản xuất

0 0 4

Người đăng: Vinh Phạm

Theo Viblo Asia

Bạn đã từng cảm thấy việc xây dựng API phức tạp hơn mức cần thiết chưa? Bạn không đơn độc đâu! Nhiều lập trình viên phải vật lộn với mã mẫu rườm rà và cấu hình rối rắm. FastAPI ra đời như một framework web hiện đại, hiệu suất cao để xây dựng API bằng Python 3.7+, và quan trọng là nó rất thú vị khi sử dụng. Hướng dẫn này sẽ giúp bạn tạo ra ứng dụng FastAPI đầu tiên đạt chuẩn sản xuất, ngay cả khi bạn là người mới bắt đầu.

Điều gì khiến FastAPI đặc biệt?

Tại sao lại chọn FastAPI thay vì các framework như Flask hoặc Django REST Framework? FastAPI có một số ưu điểm nổi bật:

  • Tốc độ: Dựa trên Starlette và Pydantic, FastAPI mang lại hiệu suất cực cao, tương đương với NodeJS và Go.
  • Tự động kiểm tra dữ liệu: Pydantic đảm nhiệm việc kiểm tra và tuần tự hóa dữ liệu, giảm thiểu lỗi và đơn giản hóa mã nguồn.
  • Tự động tạo tài liệu API: FastAPI tạo tài liệu API tương tác (sử dụng Swagger UI và ReDoc) hoàn toàn tự động, giúp dễ dàng kiểm thử và khám phá API.
  • Type Hints: Tận dụng gợi ý kiểu dữ liệu trong Python để cải thiện khả năng đọc và bảo trì mã.
  • Dependency Injection: Mô hình thiết kế mạnh mẽ tích hợp sẵn, giúp đơn giản hóa việc test và tổ chức mã.

Hãy cùng tạo một API “Việc cần làm” đơn giản để minh họa các tính năng này.

Cài đặt môi trường phát triển

Trước khi viết mã, hãy thiết lập môi trường làm việc. Bạn nên sử dụng môi trường ảo để cô lập các thư viện phụ thuộc của dự án.

1. Tạo môi trường ảo

python3 -m venv venv

2. Kích hoạt môi trường ảo

Trên macOS/Linux:

source venv/bin/activate

Trên Windows:

venv\Scripts\activate

3. Cài đặt FastAPI và Uvicorn

Uvicorn là server ASGI sẽ được dùng để chạy ứng dụng FastAPI.

pip install fastapi uvicorn

✅ Lưu ý: Môi trường ảo giúp cách ly thư viện của dự án, tránh xung đột. Hãy luôn kích hoạt nó trước khi làm việc.

Xây dựng API Endpoint đầu tiên

Giờ là phần thú vị! Hãy tạo một endpoint API đơn giản trả về danh sách các việc cần làm. Tạo file main.py và thêm đoạn mã sau:

from fastapi import FastAPI
from typing import List
from pydantic import BaseModel # Define a data model for a to-do item
class Todo(BaseModel): id: int task: str completed: bool = False # Create a FastAPI app instance
app = FastAPI() # Sample to-do data
todos = [ Todo(id=1, task="Learn FastAPI", completed=True), Todo(id=2, task="Build a to-do API", completed=True), Todo(id=3, task="Deploy the API", completed=False),
] # Define a GET endpoint to retrieve all to-do items
@app.get("/todos", response_model=List[Todo])
async def get_todos(): """Retrieves all to-do items.""" return todos # Define a POST endpoint to create a new to-do item
@app.post("/todos", response_model=Todo)
async def create_todo(todo: Todo): """Creates a new to-do item.""" todos.append(todo) return todo

Giải thích:

  • Import: Nhập FastAPI, List, và BaseModel từ các module tương ứng.
  • Todo Model: Là một model Pydantic để kiểm tra và xác định kiểu dữ liệu.
  • App Instance: Tạo thể hiện ứng dụng FastAPI.
  • Dữ liệu mẫu: Danh sách việc cần làm lưu trữ tạm thời trong bộ nhớ.
  • GET Endpoint: Trả về toàn bộ danh sách.
  • POST Endpoint: Kiểm tra và thêm việc mới vào danh sách.

✅ Mẹo: FastAPI tận dụng type hints để vừa tăng tính rõ ràng trong mã, vừa cho phép kiểm tra dữ liệu tự động và tạo tài liệu API.

Chạy ứng dụng API

Để khởi chạy ứng dụng FastAPI, chạy lệnh sau:

uvicorn main:app --reload

Trong đó:

  • main: tên file (bỏ đuôi .py)
  • app: tên biến ứng dụng FastAPI
  • --reload: tự động restart server khi mã thay đổi (hữu ích trong phát triển)

Truy cập:

  • ➡️ http://127.0.0.1:8000/docs — Swagger UI
  • ➡️ http://127.0.0.1:8000/redoc — ReDoc

✅ Lưu ý: uvicorn dùng để chạy FastAPI. Tham số --reload chỉ nên dùng trong môi trường phát triển, tránh dùng trong production.

Kết luận

Trong hướng dẫn này, bạn đã học cách tạo một API đơn giản nhưng mạnh mẽ với FastAPI. Bạn thấy cách FastAPI tận dụng type hints, Pydantic và hệ thống tài liệu tự động để tối ưu hóa quy trình phát triển.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Flutter - GetX - Using GetConnect to handle API request (Part 4)

Giới thiệu. Xin chào các bạn, lại là mình với series về GetX và Flutter.

0 0 375

- vừa được xem lúc

API vs WebSockets vs WebHooks: What to Choose?

. Khi xây dựng bất kì một ứng dụng nào, chúng ta đều cần phải có một cơ chế đáng tin cậy để giao tiếp giữa các thành phần của nó. Đây là khi APIs, WebSockets và WebHooks được ứng dụng vào.

0 0 111

- vừa được xem lúc

Sử dụng Fast JSON API serialization trong Ruby on Rails

Ở bài viết này chúng ta sẽ thử tạo 1 project API sử dụng gem fast_jsonapi cho serializer. Đầu tiên là tạo một project API mới. $ rails new rails-jsonapi --database=postgresql --skip-action-mailbox --skip-action-text --skip-spring -T --skip-turbolinks --api. .

0 0 146

- vừa được xem lúc

Test thử ba loại API chụp màn hình Windows

Hiện tại, Windows cung cấp khoảng ba cách để chụp màn hình. Thế thì cái nào là nhanh nhất? Tôi muốn test thử từng cái.

0 0 79

- vừa được xem lúc

Ngừng sử dụng REST cho API — GraphQL là cách tốt hơn

Mở đầu. REST đã được nhiều developers sử dụng để gửi dữ liệu qua HTTP trong khi GraphQL thường được trình bày như một công nghệ thay thế các API REST.

0 0 112

- vừa được xem lúc

Quản lý và sử dụng API trong Nuxt bằng cách sử dụng Repository Pattern

Mở đầu năm mới, à nhầm, mở đầu bài viết. Cái tên NuxtJS chắc hẳn cũng không còn xa lạ gì với những bạn yêu thích VueJS nữa, đương nhiên mình cũng là một chàng trai dành tình yêu to lớn cho frameworks này.

0 0 240