FastAPI - Framework Python Hiện Đại Cho API Development
FastAPI là một framework web hiện đại, nhanh (high-performance) cho việc xây dựng API với Python 3.7+. Nó được xây dựng dựa trên các tiêu chuẩn Python type hints và cung cấp một cách tiếp cận hiện đại để phát triển API.
Tại Sao Chọn FastAPI?
1. Hiệu Suất Cao
FastAPI là một trong những framework Python nhanh nhất hiện nay:
- Dựa trên Starlette và Pydantic
- Hỗ trợ async/await
- Hiệu suất tương đương với NodeJS và Go
2. Type Safety
FastAPI tận dụng Python type hints để:
- Tự động validate dữ liệu
- Tạo tài liệu API tự động
- Phát hiện lỗi trong quá trình phát triển
3. Tài Liệu Tự Động
FastAPI tự động tạo tài liệu API:
- Swagger UI (/docs)
- ReDoc (/redoc)
- OpenAPI specification
Cài Đặt và Bắt Đầu
1. Cài Đặt
pip install fastapi uvicorn
2. Tạo Ứng Dụng Đầu Tiên
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def root():
return {"message": "Hello World"}
3. Chạy Server
uvicorn main:app --reload
Các Tính Năng Chính
1. Path Parameters
@app.get("/items/{item_id}")
async def read_item(item_id: int):
return {"item_id": item_id}
2. Query Parameters
@app.get("/items/")
async def read_items(skip: int = 0, limit: int = 10):
return {"skip": skip, "limit": limit}
3. Request Body
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
async def create_item(item: Item):
return item
4. Form Data
from fastapi import Form
@app.post("/login/")
async def login(username: str = Form(...), password: str = Form(...)):
return {"username": username}
Dependency Injection
FastAPI có hệ thống dependency injection mạnh mẽ:
from fastapi import Depends
async def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
Bảo Mật
1. OAuth2 với JWT
from fastapi.security import OAuth2PasswordBearer
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
@app.get("/users/me")
async def read_users_me(token: str = Depends(oauth2_scheme)):
return {"token": token}
2. CORS
from fastapi.middleware.cors import CORSMiddleware
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
Testing
FastAPI hỗ trợ testing dễ dàng:
from fastapi.testclient import TestClient
client = TestClient(app)
def test_read_main():
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"message": "Hello World"}
Deployment
1. Uvicorn
uvicorn main:app --host 0.0.0.0 --port 8000
2. Docker
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"]
Kết Luận
FastAPI là một framework hiện đại, mạnh mẽ và dễ sử dụng cho việc phát triển API với Python. Với hiệu suất cao, type safety và tài liệu tự động, FastAPI là lựa chọn tuyệt vời cho các dự án API hiện đại.
Nếu bạn đang tìm kiếm một framework Python hiện đại để xây dựng API, FastAPI chắc chắn là một lựa chọn đáng cân nhắc.