Xây dựng REST API với FastAPI: Hướng dẫn Toàn diện

0 0 0

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

Theo Viblo Asia

FastAPI là một framework web hiện đại, hiệu năng cao để xây dựng API với Python 3.7+ dựa trên các type hint tiêu chuẩn của Python. Nó được xây dựng trên nền tảng Starlette (cho phần web) và Pydantic (cho phần dữ liệu). FastAPI được thiết kế để dễ sử dụng và mang lại hiệu suất cao, khiến nó trở thành lựa chọn phổ biến cho các nhà phát triển muốn xây dựng RESTful API nhanh chóng và hiệu quả.

Trong bài viết này, chúng ta sẽ tìm hiểu các tính năng cốt lõi của FastAPI, thực hành cách xây dựng một REST API đơn giản và khám phá một số chức năng nâng cao. Sau khi đọc xong, bạn sẽ nắm vững cách tận dụng FastAPI để tạo ra các API mạnh mẽ và dễ mở rộng.

Bắt đầu với FastAPI

Để bắt đầu sử dụng FastAPI, trước tiên bạn cần cài đặt nó. FastAPI cũng yêu cầu một ASGI server, chẳng hạn như Uvicorn, để chạy ứng dụng của bạn. Bạn có thể cài đặt cả hai bằng pip:

pip install fastapi uvicorn

Sau khi cài đặt, bạn có thể tạo một ứng dụng FastAPI đơn giản. Hãy tạo một API “Hello, World!” cơ bản:

from fastapi import FastAPI app = FastAPI() @app.get("/")
async def read_root(): return {"Hello": "World"}

Giải thích:

  • Đối tượng FastAPI: Chúng ta tạo một instance của lớp FastAPI. Đây sẽ là điểm vào chính của ứng dụng.
  • Trình trang trí (Decorator) định nghĩa đường dẫn: @app.get("/") định nghĩa một endpoint xử lý yêu cầu GET gửi đến URL gốc (/).
  • Hàm bất đồng bộ: async def read_root khai báo một endpoint bất đồng bộ. Đây là tính năng quan trọng của FastAPI cho phép xử lý không chặn.

Định nghĩa các Endpoint API

FastAPI cho phép bạn dễ dàng định nghĩa các phương thức HTTP khác nhau và endpoint với rất ít công sức. Hãy xây dựng một API phức tạp hơn để quản lý các mặt hàng trong kho.

from fastapi import FastAPI
from pydantic import BaseModel
from typing import Optional app = FastAPI() class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None @app.post("/items/")
async def create_item(item: Item): return item @app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None): return {"item_id": item_id, "q": q}

Giải thích:

  • Model dữ liệu: Chúng ta định nghĩa lớp Item dựa trên BaseModel của Pydantic. Model này sẽ dùng để kiểm tra và tuần tự hóa (serialize) payload JSON.
  • Endpoint POST: @app.post("/items/") định nghĩa một endpoint POST để tạo mới item. Nó nhận một đối tượng Item và trả lại nó trong phản hồi.
  • Endpoint GET: @app.get("/items/{item_id}") định nghĩa endpoint GET để lấy thông tin một item theo ID. Nó cũng hỗ trợ tham số query tùy chọn q.

Các tính năng nâng cao

FastAPI cung cấp nhiều tính năng nâng cao như dependency injection, background tasks, và middleware. Hãy tìm hiểu cách sử dụng dependency để xác thực người dùng.

from fastapi import Depends, FastAPI, HTTPException, Security
from fastapi.security import OAuth2PasswordBearer app = FastAPI() oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") async def get_current_user(token: str = Depends(oauth2_scheme)): if token != "fake-super-secret-token": raise HTTPException(status_code=401, detail="Invalid authentication credentials") return {"username": "john_doe"} @app.get("/users/me")
async def read_users_me(current_user: dict = Depends(get_current_user)): return current_user

Giải thích:

  • OAuth2 Password Flow: Sử dụng OAuth2PasswordBearer để khai báo schema bảo mật yêu cầu token để xác thực.
  • Dependency Injection: Hàm Depends được dùng để khai báo dependency. Ở đây, get_current_user là dependency của endpoint /users/me.
  • Logic xác thực: Trong get_current_user, token được kiểm tra. Nếu token không hợp lệ, một ngoại lệ HTTP được ném ra.

Kết luận

FastAPI là một framework hiện đại, mạnh mẽ, giúp các nhà phát triển xây dựng API hiệu năng cao và đáng tin cậy với lượng mã nguồn tối thiểu. Tính dễ sử dụng, khả năng tự động kiểm tra dữ liệu và tài liệu tương tác khiến nó trở thành lựa chọn tuyệt vời cho cả người mới bắt đầu lẫn các lập trình viên giàu kinh nghiệm.

Bằng cách tận dụng các tính năng của FastAPI, bạn có thể tập trung phát triển logic cốt lõi của ứng dụng, trong khi framework sẽ giúp bạn xử lý hầu hết các vấn đề thường gặp.

Dù bạn đang xây dựng một microservice đơn giản hay một API phức tạp, FastAPI đều cung cấp công cụ và sự linh hoạt cần thiết để thành công.

Bình luận

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

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

The Twelve-Factor App, cẩm nang gối đầu giường trong xây dựng application (Phần 1)

Giới thiệu. Ngày nay các phần mềm được triển khai dưới dạng các dịch vụ, chúng được gọi là các web apps hay software-as-a-service (SaaS).

0 0 46

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

8 Sai lầm phổ biến khi lập trình Android

1. Hard code.

0 0 207

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

Popular interview question: What is the difference between Process and Thread? 10 seconds a day

Video được đăng tại channel Tips Javascript

0 0 44

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

Thuật toán và ứng dụng - P1

Mục đích series. . Những bài toán gắn liền với thực tế. Từ đó thấy được tầm quan trọng của thuật toán trong lập trình.

0 0 47

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

Tác dụng của Docker trong quá trình học tập

Docker bây giờ gần như là kiến thức bắt buộc đối với các anh em Dev và Devops, nhưng mà đối với sinh viên IT nói chung vẫn còn khá mơ hồ và không biết tác dụng thực tế của nó. Hôm nay mình sẽ chia sẻ

0 0 53

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

Làm giàu trong ngành IT

Hầu như mọi người đều đi làm để kiếm tiền, ít người đi làm vì thấy cái nghề đó thú vị lắm. Bây giờ vất cho mình 100 tỷ bảo mình bỏ nghề thì mình cũng bỏ thôi.

0 0 57