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 --reload
main
— относительный путь к файлу (без.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
вернёт ошибку.