1. Основы FastAPI: установка, создание первого приложения и работа с параметрами запросов
Основы FastAPI: установка, создание первого приложения и работа с параметрами запросов
Добро пожаловать в курс FastAPI: Разработка современных веб-API. Это первая статья, с которой начнется ваше погружение в один из самых быстрых и удобных фреймворков для создания веб-сервисов на языке Python.
В последние годы Python укрепил свои позиции в веб-разработке, и FastAPI сыграл в этом ключевую роль. Если раньше стандартом считались Django или Flask, то сегодня для создания микросервисов и API разработчики всё чаще выбирают FastAPI. Почему? Ответ кроется в названии: он действительно быстрый, но не только в плане производительности кода, но и в скорости разработки.
В этой статье мы разберем фундамент: подготовим рабочее окружение, напишем наше первое приложение «Hello World», научимся запускать сервер и разберемся, как передавать данные через URL.
Что такое FastAPI и зачем он нужен?
FastAPI — это современный веб-фреймворк для создания API на Python 3.8+, основанный на стандартных подсказках типов (type hints).
Ключевые особенности, которые делают его уникальным:
* Скорость: Он сопоставим по производительности с NodeJS и Go (благодаря Starlette и Pydantic).
* Простота: Интуитивно понятный синтаксис, снижающий вероятность ошибок.
* Автоматическая документация: Одна из самых любимых функций разработчиков. Вы пишете код, а FastAPI сам генерирует интерактивную документацию (Swagger UI).
* Асинхронность: Встроенная поддержка async и await.
Установка и подготовка окружения
Прежде чем писать код, необходимо подготовить почву. Хорошей практикой в Python является использование виртуальных окружений. Это позволяет изолировать зависимости вашего проекта от системных библиотек.
Шаг 1. Создание виртуального окружения
Откройте терминал (командную строку) и выполните следующие команды:
Для Windows:
Для macOS и Linux:
После активации вы увидите префикс (venv) в командной строке.
Шаг 2. Установка библиотек
Нам понадобятся два основных компонента:
Выполните команду:
> Мы устанавливаем uvicorn[standard], чтобы получить рекомендованные зависимости (включая uvloop для высокой производительности), которые используются в продакшене.
Создание первого приложения
Создайте файл с именем main.py. Это будет точка входа в наше приложение. Откройте его в любимом редакторе кода (VS Code, PyCharm или Sublime Text) и напишите следующий код:
Давайте разберем этот код построчно:
from fastapi import FastAPI: Импортируем класс FastAPI.app = FastAPI(): Создаем экземпляр этого класса. Переменная app будет основным объектом нашего приложения.@app.get("/"): Это декоратор операции пути. @app обращается к нашему приложению.
* .get говорит о том, что функция будет обрабатывать HTTP-запросы метода GET.
* ("/") указывает путь (маршрут), по которому будет доступна функция. В данном случае это корень сайта.
async def root(): Асинхронная функция Python. FastAPI отлично работает и с обычными def, но использование async позволяет реализовать асинхронную обработку запросов.return {"message": "Hello World"}: Мы возвращаем словарь (dict). FastAPI автоматически преобразует его в формат JSON.Запуск сервера
Теперь, когда код написан, нужно запустить сервер. Вернитесь в терминал и выполните команду:
Разбор команды:
* main: имя файла Python (модуля) без расширения .py.
* app: имя переменной, в которой создан экземпляр FastAPI внутри файла main.py.
* --reload: флаг, который заставляет сервер автоматически перезагружаться при изменении кода. Очень удобно при разработке, но не используйте его в продакшене.
Если все прошло успешно, вы увидите вывод, похожий на этот:
Откройте браузер и перейдите по адресу http://127.0.0.1:8000. Вы увидите JSON-ответ:
Интерактивная документация
Теперь перейдите по адресу http://127.0.0.1:8000/docs.
Вы увидите Swagger UI — интерактивную документацию, которая позволяет тестировать ваши API прямо из браузера. Это одна из «киллер-фич» FastAPI. Вам не нужно писать документацию вручную; фреймворк делает это за вас, анализируя типы данных в функциях.
Также доступна альтернативная документация по адресу /redoc.
Работа с параметрами пути (Path Parameters)
Часто нам нужно передавать данные прямо в URL, например, ID пользователя или название товара. В FastAPI это делается очень просто.
Добавьте следующий код в main.py:
Обратите внимание на фигурные скобки {item_id} в декораторе и аргумент item_id: int в функции.
!Разбор структуры URL: отличие параметров пути от параметров запроса.
Валидация типов
В примере выше мы указали тип int. Что произойдет, если мы попробуем передать строку?
{"item_id": 5}. Обратите внимание, что число 5 в JSON не в кавычках — FastAPI автоматически преобразовал строку из URL в число int.FastAPI автоматически провел валидацию данных. Это избавляет вас от написания множества проверок if type(item_id) != int... внутри функции.
Работа с параметрами запроса (Query Parameters)
Параметры запроса — это пары ключ-значение, которые идут после знака ? в URL, разделенные амперсандом &. Например: /items/?skip=0&limit=10.
В FastAPI параметры запроса объявляются как аргументы функции, которые не являются частью пути.
Здесь skip и limit — это параметры запроса.
* Поскольку мы задали им значения по умолчанию (= 0 и = 10), они являются необязательными.
* Если вы перейдете на /items/, FastAPI использует значения по умолчанию.
* Если вы перейдете на /items/?skip=1&limit=1, вы получите только второй элемент списка.
Необязательные параметры
Иногда параметр запроса должен быть необязательным, но при этом не иметь значения по умолчанию (быть None). Для этого используется Optional из модуля typing (или Union[str, None] в Python 3.10+).
В этом примере мы объединили всё, что изучили:
user_id и item_id — параметры пути (они есть в строке URL декоратора).q и short — параметры запроса (их нет в строке URL декоратора).q — необязательный строковый параметр (по умолчанию None).short — булевый параметр. FastAPI умеет распознавать true, 1, yes, on как True и false, 0, no, off как False.Попробуйте сделать запрос: /users/1/items/myitem?q=search&short=true.
Заключение
Поздравляю! Вы создали свое первое API на FastAPI. Мы научились: * Устанавливать и запускать FastAPI с Uvicorn. * Создавать простые GET-запросы. * Использовать автоматическую документацию. * Принимать данные через параметры пути и параметры запроса. * Использовать встроенную валидацию типов.
В следующей статье мы углубимся в работу с телом запроса (Request Body) и моделями Pydantic, что позволит нам передавать на сервер сложные структуры данных, а не только строки и числа.