FastAPI framework web mới cho Python để tạo ra các API nhanh chóng

FastAPI là một framework web mới cho Python, được thiết kế để tạo ra các API nhanh chóng và hiệu quả. Nó được phát triển bởi Sebastián Ramírez và được biết đến với tốc độ nhanh và khả năng dễ sử dụng. Trong bài viết này, chúng ta sẽ tìm hiểu về FastAPI, cách cài đặt và sử dụng cơ bản.

Giới thiệu về FastAPI

FastAPI nổi bật với các đặc điểm sau:

  1. Hiệu suất cao: FastAPI được xây dựng trên Starlette cho web framework và Pydantic cho validation, giúp nó nhanh hơn so với nhiều framework khác.
  2. Tự động tạo tài liệu API: FastAPI tự động tạo ra tài liệu API dựa trên OpenAPI và JSON Schema.
  3. Dễ học và sử dụng: Với cú pháp rõ ràng và dễ hiểu, FastAPI giúp việc tạo ra các API trở nên dễ dàng hơn, ngay cả với những người mới bắt đầu.
  4. Type hints: FastAPI tận dụng Python type hints để cung cấp các tính năng tự động hoàn thiện, kiểm tra type, và tài liệu API.

Cài đặt FastAPI

Để cài đặt FastAPI, bạn cần có Python 3.7 trở lên. Bạn cũng cần cài đặt uvicorn, một ASGI server để chạy ứng dụng FastAPI. Dưới đây là cách cài đặt FastAPI và uvicorn:

pip install fastapi
pip install uvicorn[standard]

Tạo ứng dụng FastAPI đầu tiên

Chúng ta sẽ bắt đầu với một ví dụ cơ bản về ứng dụng FastAPI.

  1. Tạo một tệp main.py với nội dung sau:
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def read_root():
    return {"Hello": "World"}

@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
    return {"item_id": item_id, "q": q}
  1. Chạy ứng dụng với uvicorn:
uvicorn main:app --reload

Lệnh trên sẽ chạy ứng dụng FastAPI và bạn có thể truy cập vào API tại địa chỉ http://127.0.0.1:8000.

Tạo tài liệu API tự động

Một trong những tính năng mạnh mẽ của FastAPI là khả năng tự động tạo tài liệu API. Bạn có thể truy cập vào tài liệu API tại các URL sau:

  • Swagger UI: http://127.0.0.1:8000/docs
  • ReDoc: http://127.0.0.1:8000/redoc

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

Xử lý yêu cầu và phản hồi

FastAPI cho phép bạn dễ dàng xử lý các yêu cầu và phản hồi với validation tự động bằng Pydantic. Dưới đây là một ví dụ:

from typing import Optional

from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    description: Optional[str] = None
    price: float
    tax: Optional[float] = None

@app.post("/items/")
def create_item(item: Item):
    return item

Sử dụng Dependency Injection

FastAPI hỗ trợ Dependency Injection để quản lý các dependencies của bạn một cách hiệu quả. Ví dụ:

from fastapi import Depends, FastAPI

app = FastAPI()

def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
    return {"q": q, "skip": skip, "limit": limit}

@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
    return commons

@app.get("/users/")
def read_users(commons: dict = Depends(common_parameters)):
    return commons

Bảo mật với OAuth2

FastAPI cung cấp hỗ trợ tích hợp cho OAuth2. Dưới đây là một ví dụ cơ bản:

from fastapi import Depends, FastAPI, HTTPException, status
from fastapi.security import OAuth2PasswordBearer

app = FastAPI()

oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")

@app.post("/token")
async def token():
    return {"access_token": "fake_token", "token_type": "bearer"}

@app.get("/users/me")
async def read_users_me(token: str = Depends(oauth2_scheme)):
    if token != "fake_token":
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="Invalid authentication credentials",
            headers={"WWW-Authenticate": "Bearer"},
        )
    return {"username": "fake_current_user"}

Kết luận

FastAPI là một framework mạnh mẽ và linh hoạt cho việc xây dựng các API với Python. Với hiệu suất cao và cú pháp dễ hiểu, nó là một lựa chọn tuyệt vời cho các dự án web hiện đại. Hy vọng bài viết này đã giúp bạn có cái nhìn tổng quan về FastAPI và cách sử dụng cơ bản của nó. Bạn có thể khám phá thêm các tính năng và tài liệu chi tiết tại FastAPI GitHub repository.

Xem thêm GitHub - tiangolo/full-stack-fastapi-template: Full stack, modern web application template. Using FastAPI, React, SQLModel, PostgreSQL, Docker, GitHub Actions, automatic HTTPS and more.