
FastAPI: современный фреймворк для API
Читайте также:
FastAPI — это современный, быстрый (high-performance) веб-фреймворк для создания API на Python 3.7+ на основе стандартов OpenAPI и JSON Schema. Он позволяет быстро разрабатывать надёжные и масштабируемые RESTful-сервисы с минимальным количеством кода. Благодаря строгой типизации, автоматической генерации документации и поддержке асинхронности, FastAPI становится всё более популярным выбором среди разработчиков.
1. Преимущества FastAPI
FastAPI выделяется на фоне других Python-фреймворков благодаря ряду ключевых особенностей:
- Высокая производительность — сопоставима с NodeJS и Go благодаря использованию Starlette (асинхронный веб-сервер) и Pydantic (валидация и сериализация данных).
- Автоматическая документация — Swagger UI и ReDoc доступны "из коробки". Это значит, что вы сразу получаете красивую и интерактивную документацию для вашего API без дополнительной настройки.
- Валидация данных — строгая типизация и автоматическая проверка входных данных на основе аннотаций типов Python.
- Асинхронность — поддержка async/await позволяет строить высоконагруженные приложения, эффективно обрабатывающие множество одновременных запросов.
- Простота и лаконичность — минимум шаблонного кода, высокая читаемость и простота поддержки.
Эти преимущества делают FastAPI отличным выбором как для небольших pet-проектов, так и для крупных промышленных решений.
2. Установка FastAPI и Uvicorn
Для запуска FastAPI-приложения потребуется ASGI-сервер, например, Uvicorn. Установка производится одной командой:
pip install fastapi uvicorn
fastapi
— основной фреймворк для создания API.uvicorn
— быстрый ASGI-сервер, который будет запускать ваше приложение.
3. Пример простого API на FastAPI
Рассмотрим базовый пример приложения на FastAPI. Создайте файл main.py
со следующим содержимым:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Добро пожаловать в FastAPI!"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
Пояснения к коду:
from fastapi import FastAPI
— импортируем основной класс приложения.app = FastAPI()
— создаём экземпляр приложения.- Декоратор
@app.get("/")
регистрирует обработчик GET-запроса по корневому адресу (/
). Функция возвращает словарь, который автоматически преобразуется в JSON. - Второй обработчик
@app.get("/items/{item_id}")
демонстрирует работу с параметрами пути (item_id
) и необязательным query-параметром (q
). Типизация параметров позволяет FastAPI автоматически валидировать входные данные и генерировать документацию.
Чтобы запустить приложение, выполните команду:
uvicorn main:app --reload
main:app
— указывает, что приложение находится в файлеmain.py
и называетсяapp
.- Флаг
--reload
позволяет автоматически перезапускать сервер при изменении кода (удобно для разработки).
После запуска вы можете открыть в браузере:
- http://127.0.0.1:8000/docs — автоматически сгенерированная Swagger UI документация.
- http://127.0.0.1:8000/redoc — альтернативная документация в стиле ReDoc.
4. Валидация и сериализация данных
Одно из главных преимуществ FastAPI — строгая валидация входных данных с помощью Pydantic. Рассмотрим пример POST-запроса с передачей данных в формате JSON:
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
def create_item(item: Item):
return item
Пояснения к коду:
BaseModel
из Pydantic используется для описания схемы данных. КлассItem
определяет структуру объекта: обязательные поляname
(строка),price
(число с плавающей точкой) и необязательное булево полеis_offer
.- В обработчике
create_item
параметрitem
автоматически валидируется и преобразуется из JSON-запроса в экземпляр классаItem
. - Если клиент отправит некорректные данные (например, строку вместо числа), FastAPI вернёт подробную ошибку с описанием проблемы.
- Ответ также будет сериализован в JSON согласно описанной схеме.
Это позволяет легко создавать надёжные API с минимальными усилиями по обработке ошибок и валидации.
5. Асинхронные обработчики
FastAPI изначально поддерживает асинхронные функции-обработчики, что особенно важно для высоконагруженных приложений, работающих с внешними сервисами или базами данных.
@app.get("/async-endpoint")
async def async_endpoint():
return {"message": "Асинхронный обработчик работает!"}
Пояснения к коду:
- Ключевое слово
async
позволяет выполнять неблокирующие операции внутри обработчика (например, асинхронные запросы к БД или сторонним API). - FastAPI автоматически определяет, является ли функция асинхронной, и корректно её вызывает.
6. Сравнение с другими фреймворками
Ниже приведено сравнение популярных Python-фреймворков для создания API:
- FastAPI: высокая производительность, отличная документация, поддержка асинхронности и строгая валидация данных.
- Flask: хорошая производительность и документация, но нет асинхронности и строгой валидации "из коробки".
- Django REST Framework: мощный инструмент для крупных проектов, поддерживает асинхронность и валидацию, но уступает FastAPI по скорости и лаконичности кода.
7. Полезные ссылки
Заключение
FastAPI — отличный выбор для создания современных, быстрых и надёжных API на Python. Благодаря автоматической документации, строгой типизации и поддержке асинхронности, он подходит как для небольших проектов, так и для крупных высоконагруженных систем. Даже если вы только начинаете знакомство с веб-разработкой на Python, FastAPI позволит быстро получить рабочий результат и понять современные подходы к созданию API.