Appearance
FastAPI — основы
FastAPI — это мощный инструмент для создания современных и высокопроизводительных API. Он сочетает в себе простоту использования, скорость разработки и гибкость. Благодаря поддержке аннотаций типов и автоматической документации разработчики могут значительно ускорить процесс создания API, минимизируя количество ошибок.
FastAPI подходит как для небольших проектов, так и для крупных систем, требующих высокой производительности.
Что такое FastAPI?
FastAPI — это асинхронный веб-фреймворк, созданный на базе Starlette (веб-фреймворка) и Pydantic (библиотеки для валидации данных). Он предлагает множество удобных инструментов для разработки API, таких как автоматическая документация, встроенная валидация данных и высокая производительность благодаря использованию асинхронных вызовов.
Основные преимущества FastAPI
Высокая производительность
FastAPI работает на основе асинхронного веб-сервера ASGI, что делает его одним из самых быстрых Python-фреймворков.Аннотации типов
Использование типов в Python (например,str,int,List) позволяетFastAPIавтоматически проверять значения запросов и генерировать документацию.Автоматическая документация
FastAPIавтоматически создаёт документациюAPIс помощьюSwagger UIиReDoc. Это упрощает тестирование и работу сAPI.Простота использования
Несмотря на свою мощь,FastAPIостаётся интуитивно понятным и легко изучаемым.Асинхронность
Поддержка асинхронных функций позволяет обрабатывать множество запросов одновременно, улучшая производительность.
Установка FastAPI в виртуальное окружение:
Устанавливать пакет лучше используя виртуальное окружение это позволяет:
- создать изоляцию зависимостей проекта от глобальных пакетов.
- предотвращение конфликтов версий.
- позволяет легко управлять разными версиями FastAPI для разных проектов.
Из минусов только требует дополнительных шагов для создания и активации окружения.
Создать виртуальное окружение:
shellpy -3.13 -m venv .venvАктивировать виртуальное окружение:
shellsource .venv/bin/activate (Linux/macOS) .venv\Scripts\activate (Windows)Установить
FastAPI:shellpip install fastapi[all]pip install fastapi[all]: устанавливаетFastAPIи все рекомендуемые зависимости, включая:uvicorn:ASGI-сервер для запуска приложения.pydantic: для валидации данных.httpx: для выполненияHTTP-запросов.starlette: основа FastAPI.- и другие полезные пакеты.
Пример простого приложения
Создадим простое веб-приложение с использованием FastAPI. В корневой папке проекта, создать файл main.py:
python
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def get_main_page() -> str:
return "The main page of the local FastAPI!"
@app.get("/new_page/")
def get_new_page() -> str:
return "The new page of the local FastAPI!"app = FastAPI(): Создает экземпляр приложения FastAPI. app теперь является объектом, который будет обрабатывать входящие HTTP-запросы.
@app.get("/"): Это декоратор. Декораторы в Python - это способ обернуть функцию и добавить ей дополнительную функциональность. В данном случае, @app.get("/") регистрирует функцию get_main_page для обработки HTTP GET запросов, направленных на корневой путь /. "/" – Это путь (path) или маршрут (route). Он указывает, по какому URL адресу должна быть доступна эта функция. В данном случае, это корневой путь, то есть, когда пользователь заходит на локальный сайт (например, http://localhost:8000 или http://127.0.0.1:8000), он вызывает эту функцию.
@app.get("/new_page/"): Регистрирует функцию для обработки GET запросов к /new_page/. В данном случае, когда пользователь заходит на локальный сайт (например, http://localhost:8000/new_page/), он вызывает эту функцию.
Результат полученный в браузере:

Запуск приложения
Для запуска приложения в консоли/терминале используется сервер Uvicorn:
bash
uvicorn main:app --reloadmain— относительный путь к файлу (без.py), начиная с корневой папки проекта.app— объект приложения FastAPI.--reload— автоматическая перезагрузка при изменении кода (удобно для разработки).
После запуска приложение будет доступно по адресу: http://127.0.0.1:8000.
Результат вывода главной страницы полученный в браузере по адресу http://127.0.0.1:8000:

Результат вывода другой страницы полученный в браузере по адресу http://127.0.0.1:8000/new_page/:

Если задать неверный адрес, не существующий андрес (в возможно в результате ошибки), приложение отобразит следующее содержимое:

Отображение в терминале
FastApi содержит модуль логирования для отображения изменений и работы приложения. Отображение в терминале при запуске FastAPI с Uvicorn и опцией --reload показывает следующее:
1. Запуск Uvicorn и настройка отслеживания изменений:
(.venv) PS C:\fast_api_base> uvicorn main:app --reload:- Эта команда запускает
Uvicorn,ASGI-сервер, который будет обслуживать ваше FastAPI-приложение. main:appуказывает, что Uvicorn должен искать экземпляр FastAPI приложения (app) в файлеmain.py.--reloadактивирует автоматическую перезагрузку сервера при обнаружении изменений в коде.
- Эта команда запускает
INFO: Will watch for changes in these directories: ['C:\\fast_api_base']: Uvicorn сообщает, какие каталоги он будет отслеживать на предмет изменений файлов. В данном случае, это текущий рабочий каталог.INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit): Uvicorn сообщает, на каком адресе и порту запущен сервер.127.0.0.1(localhost) означает, что сервер доступен только с вашего компьютера.8000- это порт по умолчанию, но его можно изменить. Также сообщается, что остановить сервер можно нажать сочетание клавишCTRL+C.INFO: Started reloader process [20644] using WatchFiles: Запускается процесс автоматической перезагрузки (reloader), который использует библиотекуWatchFilesдля отслеживания изменений файлов. Номер в квадратных скобках – это ID процесса.INFO: Started server process [20736]: Запускается основной процесс Uvicorn-сервера. Номер в квадратных скобках – это ID процесса.INFO: Waiting for application startup.: Uvicorn ожидает завершения процедуры запуска приложения. Если в вашем FastAPI-приложении есть код, который должен быть выполнен при запуске (например, подключение к базе данных), Uvicorn будет ждать его завершения.INFO: Application startup complete.: Uvicorn сообщает об успешном завершении запуска приложения.
2. Обработка HTTP-запросов:
Обращение к главной странице:
INFO: 127.0.0.1:3423 - "GET / HTTP/1.1" 200 OK: Сервер получил GET-запрос по адресу/.200 OKозначает, что запрос был успешно обработан и сервер вернул успешный ответ. Это говорит о том, что после перезагрузки вы добавили обработчик для корневого пути.
Обращение к новой странице, со слешем / в конце:
INFO: 127.0.0.1:3466 - "GET /new_page/ HTTP/1.1" 200 OK: Сервер получил GET-запрос по адресу/new_page/.200 OKозначает, что запрос был успешно обработан и сервер вернул успешный ответ.
Обращение к новой странице, без слеша / в конце:
INFO: 127.0.0.1:3466 - "GET /new_page HTTP/1.1" 307 Temporary Redirect: Сервер получил GET-запрос по адресу/new_page.307 Temporary Redirectозначает, что сервер временно перенаправляет запрос на другой адрес. FastAPI автоматически добавляет слеш в конце пути, если он отсутствует, и перенаправляет на путь со слешем.INFO: 127.0.0.1получает GET-запрос по адресу/new_page/` (уже со слешем) и успешно его обрабатывает.
Обращение к не существующему адресу страницы:
INFO: 127.0.0.1:3520 - "GET /no_page/ HTTP/1.1" 404 Not Found: Сервер получил GET-запрос по адресу/no_page/.404 Not Foundозначает, что по этому адресу не найдено никакого обработчика в вашем FastAPI-приложении.:3466 - "GET /new_page/ HTTP/1.1" 200 OK`: После перенаправления, сервер
3. Перезагрузка сервера (из-за изменения кода):
FastAPI поддерживает автоматическую перезагрузку сервера при изменении кода, что делает разработку более удобной и быстрой. Эта функция называется hot reload и включается по умолчанию при запуске приложения в режиме разработки. Т.е. при изменении или написании нового кода не нужно останавливать сервер и запускать сервер заново.
Сообщения выводимые в терминале при изменении в коде:
WARNING: WatchFiles detected changes in 'main.py'. Reloading...:WatchFiles, используемый Uvicorn, обнаружил изменения в файлеmain.py(где находится ваше FastAPI приложение). Это запускает процесс перезагрузки сервера.INFO: Shutting down: Uvicorn начинает процесс остановки текущего экземпляра сервера.INFO: Waiting for application shutdown.: Uvicorn ожидает завершения процедуры остановки приложения. Если в вашем FastAPI-приложении есть код, который должен быть выполнен при остановке (например, закрытие соединения с базой данных), Uvicorn будет ждать его завершения.INFO: Application shutdown complete.: Uvicorn сообщает об успешном завершении остановки приложения.INFO: Finished server process [20736]: Завершен процесс Uvicorn-сервера со старым ID.INFO: Started server process [18328]: Запускается новый процесс Uvicorn-сервера (с новым ID).INFO: Waiting for application startup.: Uvicorn ожидает завершения процедуры запуска приложения.INFO: Application startup complete.: Uvicorn сообщает об успешном завершении запуска приложения.
Ключевые моменты:
INFO: Информационные сообщения.WARNING: Предупреждения.127.0.0.1: Локальный адрес вашего компьютера.8000: Порт, на котором работает сервер.GET: HTTP-метод (в данном случае, получение данных)./: Корневой путь (root path).404 Not Found: HTTP-статус код, означающий, что запрошенный ресурс не найден.200 OK: HTTP-статус код, означающий, что запрос был успешно обработан.307 Temporary Redirect: HTTP-статус код, означающий временное перенаправление.--reload: Флаг, который включает автоматическую перезагрузку сервера при изменении кода.
Понимание этих сообщений помогает отлаживать ваше FastAPI-приложение и следить за работой.
Автоматическая документация
FastAPI автоматически генерирует документацию API. После запуска приложения вы можете открыть:
Swagger UI— доступен по адресуhttp://127.0.0.1:8000/docs. Это интерактивный интерфейс для тестированияAPI.ReDoc— доступен по адресуhttp://127.0.0.1:8000/redoc. Это статическая документацияAPI.
Проверка работы
Откройте браузер на http://127.0.0.1:8000/.
Вы увидите следующий текст:
Добро пожаловать в локальный FastAPI!Откройте браузер на http://127.0.0.1:8000/items/5?q=somequery.
Вы увидите следующий JSON ответ:
json
{"item_id": 5, "q": "somequery"}Вы уже создали API, который:
Получает HTTP-запросы по путям / и /items/{item_id}.
И первый и второй путь используют GET операции (также известные как HTTP методы).
- путь
/items/{item_id}имеет параметр путиitem_id, который должен бытьint. - путь
/items/{item_id}имеет необязательныйstrпараметр запросаq.
Работа с параметрами запросов
Параметры пути указываются в фигурных скобках {}. Например:
python
@app.get("/users/{user_id}")
def get_user(user_id: int):
return {"user_id": user_id}В данном случае user_id будет автоматически преобразован в int, а если тип не совпадает, FastAPI вернёт ошибку.