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:
- 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.
- 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.
- 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.
- 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.
- 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}
- 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.