FastAPI
| Тип | Web framework |
|---|---|
| Автор | Sebastián Ramírezd |
| Розробник | Себастіан Рамірез |
| Перший випуск | 5 грудня 2018[1] |
| Стабільний випуск | reference (P348) |
| Мова програмування | Python |
| Ліцензія | MIT |
| Репозиторій | github.com/tiangolo/fastapi |
| Вебсайт | fastapi.tiangolo.com |
FastAPI — це веб-фреймворк для створення API на основі HTTP для Python 3.8+. [2] Він використовує Pydantic та анотування типів для валідації, серіалізації та десеріалізації даних. FastAPI також автоматично генерує документацію OpenAPI для АРІ, створених на ньому[3]. Перший випуск фреймворка відбувся у 2018 році.
Pydantic — це бібліотека для валідації даних для Python. Під час написання коду в IDE Pydantic надає підказки щодо типів на основі анотацій[4]. FastAPI широко використовує моделі Pydantic для валідації даних, серіалізації та автоматичного документування API. Ці моделі використовують стандартні анотації типів Python, що забезпечує декларативний спосіб визначення структури та типів даних для вхідних запитів (наприклад, тіл HTTP-запитів) та вихідних відповідей[5].
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: bool | None = None
@app.post("/items/")
def create_item(item: Item):
# Обʼєкт 'item' вже провалідований і має правильний тип
return {"message": "Item received", "item_name": item.name}
Starlette — це легкий ASGI-фреймворк для підтримки асинхронної функціональності в Python. [6]
Uvicorn — це мінімальний низькорівневий веб/прикланий сервер для асинхронних фреймворків, що реалізує специфікацію ASGI . Технічно він реалізує багатопроцесну модель з одним головним процесом, який відповідає за управління пулом робочих процесів та розподіл вхідних HTTP-запитів до них. Кількість робочих процесів попередньо налаштовується, але кількість процесів можна збільшити або зменшити під час виконання. [7]
FastAPI автоматично генерує документацію OpenAPI для створених API. Ця документація включає як Swagger UI, так і ReDoc, які надають інтерактивну документацію API. Таку документацію можна використовувати для дослідження та тестування кінцевих точок у режимі реального часу. Це особливо корисно для розробки, тестування та обміну API з іншими розробниками або користувачами. Swagger UI доступний за замовчуванням за маршрутом /docs, а ReDoc – за маршрутом /redoc . [8]
Архітектура FastAPI підтримує асинхронне програмування . Така конструкція дозволяє однопотоковому циклу подій ефективно обробляти велику кількість одночасних запитів, особливо під час роботи з операціями вводу/виводу, такими як запити до бази даних або виклики до зовнішніх служб або API. Для довідки див. шаблон async/await .
FastAPI включає систему впровадження залежностей (DI) для додавання вказівників на сервіси та залежності у код кінцевих точок HTTP. Цей механізм дозволяє розробникам оголошувати такі компоненти, як сеанси бази даних або логіку автентифікації, у вигляді параметрів функцій. FastAPI автоматично додає ці залежності до кожного запиту. [9]
from fastapi import Depends, HTTPException, status
from db import DbSession
# --- Впровадження сесії БД ---
def get_db():
db = DbSession()
try:
yield db
finally:
db.close()
@app.post("/items/", status_code=status.HTTP_201_CREATED)
def create_item(name: str, description: str, db: DbSession = Depends(get_db)):
new_item = Item(name=name, description=description)
db.add(new_item)
db.commit()
db.refresh(new_item)
return {"message": "Додано успішно!", "item": new_item}
@app.get("/items/{item_id}")
def read_item(item_id: int, db: DbSession = Depends(get_db)):
item = db.query(Item).filter(Item.id == item_id).first()
if item is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="Item not found")
return item
Стандарт WebSockets дозволяє дуплексний зв'язок між клієнтом і сервером. Ця можливість є фундаментальною для програм, що потребують безперервного обміну даними, таких як платформи миттєвого обміну повідомленнями, панелі керування даними в реальному часі або багатокористувацькі онлайн-ігри. FastAPI використовує базову реалізацію Starlette, що дозволяє ефективно керувати з'єднаннями та обробкою повідомлень. [10]
# У вас має бути встановлено пакет 'websockets'
from fastapi import WebSocket
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Текст повідомлення: {data}")
FastAPI дозволяє виконувати фонові завдання і після того, як клієнту буде надіслано HTTP-відповідь. Це дозволяє API негайно відповідати на запити користувачів, одночасно обробляючи некритичні або трудомісткі операції у фоновому режимі. Типові випадки застосування включають у себе надсилання електронних листів, оновлення кешів або виконання пост-обробки даних. [11]
import time
import shutil
from fastapi import BackgroundTasks, UploadFile, File
from utils import generate_thumbnail
@app.post("/upload-image/")
async def upload_image(
image: UploadFile = File(...),
background_tasks: BackgroundTasks
):
file_location = f"uploaded_images/{image.filename}"
# Зберігаємо отримане зображення
with open(image_path, "wb") as f:
contents = await file.read()
f.write(contents)
# Додаємо генерацію мініатюри як фонове завдання
background_tasks.add_task(generate_thumbnail, file_location, "200x200")
return {"message": f"Image '{image.filename}' uploaded. Thumbnail generation started in background."}
Ось простий вебзастосунок, який повертає клієнту текст "Hello, World!" під час відвідування URL:
# Імпортуємо основний клас FastAPIз пакету fastapi
from fastapi import FastAPI
# Створюємо екземпляр класу FastAPI
app = FastAPI()
# Визначаємо маошрут за методом GET для кореневої URL ("/")
@app.get("/")
async def read_root() -> str:
# Повертаємо текстове повідомлення
return "Hello, World!"
- Django (веб-фреймворк)
- Flask (веб-фреймворк)
- Проект Pylons
- Web2py
- Tornado (веб-сервер)
- REST
- Python (мова програмування)
- ↑ fastapi repo. GitHub. 5 грудня 2018.
- ↑ FastAPI. fastapi.tiangolo.com. Процитовано 10 квітня 2024.
- ↑ Lubanovic, Bill (6 листопада 2019). Introducing Python: Modern Computing in Simple Packages (вид. 2nd). O'Reilly Media, Inc. с. 397, 418. ISBN 9781492051367.
- ↑ Why use Pydantic - Pydantic. docs.pydantic.dev. Процитовано 21 вересня 2023.
- ↑ Request Body - FastAPI. fastapi.tiangolo.com (англ.). Процитовано 30 червня 2025.
- ↑ Starlette. www.starlette.io. Процитовано 21 вересня 2023.
- ↑ Restarting 'uvicorn' Workers with the 'SIGHUP' Signal. bugfactory.io. Процитовано 17 червня 2024.
- ↑ OpenAPI docs - FastAPI.
- ↑ Dependencies. Процитовано 30 червня 2025.
- ↑ WebSockets - FastAPI. fastapi.tiangolo.com (англ.). Процитовано 30 червня 2025.
- ↑ Background Tasks - FastAPI. fastapi.tiangolo.com (англ.). Процитовано 30 червня 2025.
