Материал подготовлен командой Simple-Server для администраторов VPS и выделенных серверов. Команды и пути проверяйте на тестовой машине перед production.
Для чего используется FastAPI
- Для создания API:
* FastAPI идеально подходит для создания RESTful API, GraphQL API и других типов веб-сервисов.
* Позволяет легко определять эндпоинты, обрабатывать входящие запросы и возвращать ответы.- Для высокопроизводительных приложений:
* FastAPI основан на асинхронной модели работы (`async`/`await`), что делает его одним из самых быстрых фреймворков для Python.
* По скорости он сравним с GoLang.- Для автоматической генерации документации:
* FastAPI автоматически генерирует интерактивную документацию API (через Swagger UI и ReDoc).- Для валидации данных:
* Автоматически проверяет типы данных, поступающих в запросах, и возвращает ошибки, если данные не соответствуют ожидаемым типам.- Для асинхронных задач:
* Поддерживает асинхронные операции (отдает моментальный ответ и далее параллельно выполняем фоновую отложенную задачу).
* Поддержка WebSocket.- Для удобной разработки:
* Имеет простой синтаксис.- Для интеграции с OpenAPI и JSON Schema:
* Фреймворк автоматически генерирует схемы OpenAPI, что позволяет легко интегрировать ваш API со сторонними инструментами.-
FastAPI идеально подходит для создания RESTful API, GraphQL API и других типов веб-сервисов.
-
Позволяет легко определять эндпоинты, обрабатывать входящие запросы и возвращать ответы.
FastAPI идеально подходит для создания RESTful API, GraphQL API и других типов веб-сервисов.
Позволяет легко определять эндпоинты, обрабатывать входящие запросы и возвращать ответы.
Для высокопроизводительных приложений:
-
FastAPI основан на асинхронной модели работы (
async/await), что делает его одним из самых быстрых фреймворков для Python. -
По скорости он сравним с GoLang.
FastAPI основан на асинхронной модели работы (async/await), что делает его одним из самых быстрых фреймворков для Python.
По скорости он сравним с GoLang.
Для автоматической генерации документации:
- FastAPI автоматически генерирует интерактивную документацию API (через Swagger UI и ReDoc).
FastAPI автоматически генерирует интерактивную документацию API (через Swagger UI и ReDoc).
- Автоматически проверяет типы данных, поступающих в запросах, и возвращает ошибки, если данные не соответствуют ожидаемым типам.
Автоматически проверяет типы данных, поступающих в запросах, и возвращает ошибки, если данные не соответствуют ожидаемым типам.
-
Поддерживает асинхронные операции (отдает моментальный ответ и далее параллельно выполняем фоновую отложенную задачу).
-
Поддержка WebSocket.
Поддерживает асинхронные операции (отдает моментальный ответ и далее параллельно выполняем фоновую отложенную задачу).
Для интеграции с OpenAPI и JSON Schema:
- Фреймворк автоматически генерирует схемы OpenAPI, что позволяет легко интегрировать ваш API со сторонними инструментами.
Фреймворк автоматически генерирует схемы OpenAPI, что позволяет легко интегрировать ваш API со сторонними инструментами.
Кейсы: кому и как использовать FastAPI
-
Разработчикам корпоративных систем и персональных сайтов. FastAPI прекрасно подходит для быстрой интеграции с базами данных и сторонними сервисами. Он имеет встроенную поддержку валидации данных и асинхронной обработки запросов.
-
Web-дизайнерам для сайтов с динамическими данными. FastAPI кардинально упрощает разработку backend для таких проектов, сводя настройку к минимуму. К тому же он облегчает получение данных для frontend-части.
-
Разработчикам API и микросервисов. FastAPI создан для работы с асинхронными приложениями и высоконагруженными системами. Он идеально подходит для разработки API и микросервисов.
-
Студентам и начинающим разработчикам. FastAPI крайне прост в освоении и подходит для быстрого создания учебных проектов и прототипов.
Разработчикам корпоративных систем и персональных сайтов. FastAPI прекрасно подходит для быстрой интеграции с базами данных и сторонними сервисами. Он имеет встроенную поддержку валидации данных и асинхронной обработки запросов.
Web-дизайнерам для сайтов с динамическими данными. FastAPI кардинально упрощает разработку backend для таких проектов, сводя настройку к минимуму. К тому же он облегчает получение данных для frontend-части.
Разработчикам API и микросервисов. FastAPI создан для работы с асинхронными приложениями и высоконагруженными системами. Он идеально подходит для разработки API и микросервисов.
Студентам и начинающим разработчикам. FastAPI крайне прост в освоении и подходит для быстрого создания учебных проектов и прототипов.
Для понимания простоты реализации серверов на FastAPI посмотрите пример получения актуальных курсов валют:
from fastapi import FastAPI
import requests
app = FastAPI()
@app.get("/api/kurs/{currency_code}")
def get_currency_rate(currency_code: str):
url = f"https://api.exchangerate-api.com/v4/latest/{currency_code.upper()}"
response = requests.get(url)
if response.status_code == 200:
data = response.json()
return {
"base_currency": data["base"],
"date": data["date"],
"rates": data["rates"]
}
else:
return {"error": "Курсы валют в данное время недоступны"}Как видно из примера, вы создали полезное FastAPI-приложение (микросервис) с путем http://ваш_домен/api/kurs/rub буквально за несколько секунд.
Но мы не будем останавливаться на простых примерах. В этой статье мы создадим собственное приложение — хранилище переменных окружения для серверов (легковесный аналог Vault и AWS Secrets Manager) с небольшой админкой и доступом к переменным через API.
Наш проект будет реализован с использованием HTML + JavaScript + FastAPI. Назовём наш микросервис ENV Cloud Manager.
Давайте потратим 10 минут на развертывание сервера и изучение кода. Если затем вы решите опубликовать приложение в интернете, ознакомьтесь с разделом «Деплой приложения в публичном пространстве».
А теперь посмотрим на интерфейс приложения.
Весь код рассматриваемого приложения доступен в репозитории GitHub.
Разворачиваем готовый сервер FastAPI
Установка Python и необходимых библиотек
Для полноценной разработки нам необходимо Установка Python и pip зависит от операционной системы. Ниже приведены инструкции для различных ОС. В нашем примере использована версия 3.11.
-
Перейдите на официальный сайт Python.
-
В разделе «Downloads» выберите последнюю версию Python для Windows.
-
Скачайте установщик (рекомендуется выбирать версию с «Windows Installer»).
-
В процессе установки обязательно поставьте галочку на пункте «Add Python to PATH» (это добавит Python в системные переменные среды).
-
Нажмите «Install Now» для установки Python и pip.
Откройте командную строку (Win + R, введите cmd и нажмите «Enter»).
Команда выведет установленную версию Python.
Создание виртуального окружения
Для начала давайте создадим проект. Чтобы не засорять ваш компьютер новыми фреймворками, важно правильно организовать его техническую базу. Один из ключевых моментов — создание отдельного пространства для управления зависимостями.
Для этого мы будем использовать встроенный инструмент Python — venv, который создаёт собственную версию интерпретатора Python и набор установленных библиотек. Разделение окружений помогает избежать конфликтов между зависимостями, особенно когда разные проекты требуют разных версий одних и тех же библиотек.
Благодаря такой изоляции вы можете быть уверены, что обновление пакетов в одном проекте не повлияет на работоспособность других. По сути, создается отдельная папка внутри проекта, содержащая Python и все установленные для работы библиотеки.
Как создать виртуальное окружение
Перейдите в директорию вашего проекта:
cd /путь/к/вашему/проектуСоздайте виртуальное окружение:
Активируйте виртуальное окружение:
Устанавливаем FastAPI-приложение (шаблон)
Создайте необходимые директории:
mkdir app && mkdir ./app/static && mkdir ./app/dbСкачайте файл requirements.txt с необходимыми для проекта зависимостями:
wget https://raw.githubusercontent.com/Simple-Server-cloud-tutorials/Simple-Server-fastapi-demo/refs/heads/main/requirements.txt -O requirements.txtПакеты, которые мы установим с помощью requirements.txt (полный список):
| Пакет | Версия | Описание |
|---|---|---|
annotated-types | 0.7.0 | Расширения для аннотированных типов в Python, используются в Pydantic. |
anyio | 4.8.0 | Асинхронная многопоточная библиотека, работает с asyncio, trio, curio. |
cffi | 1.17.1 | Интерфейс для взаимодействия с C-кодом, используется cryptography. |
click | 8.1.8 | Библиотека для создания CLI-приложений на Python. |
cryptography | 44.0.0 | Криптографическая библиотека, предоставляет SSL/TLS, хеширование, шифрование. |
fastapi | 0.115.7 | Современный веб-фреймворк для создания API, основанный на Pydantic и Starlette. |
h11 | 0.14.0 | HTTP/1.1-протокол в виде библиотеки, используется uvicorn. |
idna | 3.10 | Поддержка Internationalized Domain Names (IDN) в Python. |
pycparser | 2.22 | C-парсер на Python, используется cffi. |
pydantic | 2.10.6 | Валидация данных и управление типами, активно применяется в FastAPI. |
pydantic_core | 2.27.2 | Оптимизированное ядро Pydantic, написанное на Rust. |
sniffio | 1.3.1 | Определяет, в каком асинхронном окружении выполняется код (asyncio/trio). |
SQLAlchemy | 2.0.37 | ORM для работы с базами данных в Python. |
starlette | 0.45.3 | ASGI-фреймворк, на котором построен FastAPI. |
typing_extensions | 4.12.2 | Дополнительные аннотации типов для совместимости со старыми версиями Python. |
uvicorn | 0.34.0 | ASGI-сервер для запуска FastAPI и других ASGI-приложений. |
Расширения для аннотированных типов в Python, используются в Pydantic.
Асинхронная многопоточная библиотека, работает с asyncio, trio, curio.
Интерфейс для взаимодействия с C-кодом, используется cryptography.
Библиотека для создания CLI-приложений на Python.
Криптографическая библиотека, предоставляет SSL/TLS, хеширование, шифрование.
Современный веб-фреймворк для создания API, основанный на Pydantic и Starlette.
HTTP/1.1-протокол в виде библиотеки, используется uvicorn.
Поддержка Internationalized Domain Names (IDN) в Python.
C-парсер на Python, используется cffi.
Валидация данных и управление типами, активно применяется в FastAPI.
Оптимизированное ядро Pydantic, написанное на Rust.
Определяет, в каком асинхронном окружении выполняется код (asyncio/trio).
ORM для работы с базами данных в Python.
ASGI-фреймворк, на котором построен FastAPI.
Дополнительные аннотации типов для совместимости со старыми версиями Python.
ASGI-сервер для запуска FastAPI и других ASGI-приложений.
Выполните команду для установки зависимостей:
pip install -r requirements.txtДалее введите в терминале следующие команды:
/app
/db
-пока пусто
/static
-admin.html
-index.html
/venv
- main.py
- requirement.txtКак видите, для реализации проекта нам нужно всего три файла. Админка реализована в admin.html, вся backend-часть — в main.py, а index.html служит простой заглушкой.
При этом весь этот пакет (и фронт, и бэк) работает на FastAPI без каких-либо дополнительных утилит.
Для запуска нашего приложения в качестве фонового сервера воспользуемся пакетом Uvicorn — это быстрый ASGI-сервер для Python, предназначенный для запуска веб-приложений, написанных с использованием асинхронных фреймворков, таких как FastAPI.
Перед запуском настройте собственные значения переменных ALLOWED_IPS, VALID_TOKENS, ADMIN_USERNAME, ADMIN_PASSWORD в файле main.py.
Выполните следующую команду в терминале:
uvicorn main:app --reloadmain:app означает, что мы запускаем файл main.py как приложение-демон, постоянно находящееся в оперативной памяти сервера и принимающее запросы.
Теперь вы можете воспользоваться админкой по адресу: http://127.0.0.1:8000/admin.
Или проверить запросы GET-, POST-, PUT- и DELETE-запросы по адресам:
GET http://127.0.0.1:8000/api/variables/ — получить список переменных
GET http://127.0.0.1:8000/api/variables/{key} — получить значение ключа
PUT http://127.0.0.1:8000/api/variables/{key} — обновить значение ключа
DELETE http://127.0.0.1:8000/api/variables/{key} — удалить ключ
Если вы запускаете приложение на своем публичном облачном сервере, чтобы uvicorn слушал все адреса (0.0.0.0), запустите приложение с флагом --host:
uvicorn main:app --host 0.0.0.0 --port 8000 --reloadТакже проверьте ограничения портов. Если, например, у вас установлен firewall ufw, то запустите в терминале следующую команду:
sudo ufw allow 8000
sudo ufw reloadПри первом запуске вы можете увидеть подобное сообщение:
Это сделано для безопасности. Просто добавьте свой IP-адрес (на картинке 172.17.0.1) в переменную ALLOWED_IPS и обновите страницу.
Вот и всё! Мы всего за 5 минут, с минимальным количеством кода, написали FastAPI-приложение, которое позволяет централизованно хранить настройки для Docker-контейнеров, серверов и т. д., а также раздавать их всем вашим VPS.
Деплой FastAPI-приложения в интернете
Для автоматизированного развертывания статических и динамических веб-приложений, построенных на популярных фреймворках, отлично подходит сервис Simple-Server App Platform. Эта платформа предоставляет удобный функционал для деплоя приложений прямо из Git-репозитория.
После настройки вы получаете уникальный публичный URL, который позволяет быстро получить доступ к вашему приложению. Такой подход значительно экономит время и ресурсы, предлагая надёжное решение для быстрого запуска ваших проектов.
Перед тем как развернуть приложение на проде, не забудьте изменить значения переменных ALLOWED_IPS, VALID_TOKENS, ADMIN_USERNAME, ADMIN_PASSWORD в файле main.py (подробное описание их назначения приведено ниже в разделе «Изучаем код микросервиса»).
Далее загрузите (push) ваше приложение в GitHub. Для этого используйте следующие команды в терминале:
echo "venv/" >> .gitignore
echo "__pycache__/" >> .gitignore
git init
git add .
git rm -r --cached venv __pycache__
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:ВАШ-НИК/НАЗВАНИЕ-РЕПОЗИТОРИЯ.git
git push -u origin mainПерейдите на страницу создания Apps, выберите раздел «Backend» → «FastAPI».
Далее прокрутите страницу вниз до раздела «Репозиторий». Здесь мы подключим ваш GitHub-репозиторий для автоматического деплоя и формирования публичного URL.
Если вы впервые используете Simple-Server App Platform, нажмите кнопку «Добавить аккаунт». Затем авторизуйте наш сервис в GitHub. В процессе подключения GitHub может запросить ввод PIN-кода — это одно из последних обновлений, направленных на повышение безопасности авторизации.
Если ваш Github уже привязан к нашей системе, то просто пропустите первый шаг (стрелка 1) и переходите ко второму.
Укажите ваш GitHub-репозиторий с FastAPI-приложением (стрелка 2) и нажмите кнопку «Запустить деплой» (стрелка 3). Дополнительные настройки деплоя для нашего приложения не требуются.
После этого система развернет сервер, задеплоит приложение в продакшн, создаст публичную ссылку — и вуаля! Ваш микросервис готов. Просто дождитесь завершения процесса деплоя.
Первичный запуск (деплой) сервера может занять 7–10 минут, тогда как все последующие изменения в вашем GitHub-репозитории будут применяться в течение 20–30 секунд.
После первого запуска вы увидите сообщение об ограничении доступа для вашего IP-адреса.
Вам необходимо добавить ваш IP-адрес (в нашем примере 172.17.0.1) в переменную ALLOWED_IPS и выполнить следующие команды в терминале:
git add . # Добавляем все файлы
git commit -m "Добавлен IP"
git push origin mainПосле этого подождите 10-30 секунд, пока платформа Simple-Server App Platform перезапустит проект. Далее обновите страницу /admin и наслаждайтесь приложением.
Изучаем код приложения на FastAPI
Приложение состоит из админки и серверной части. Сначала рассмотрим backend, который как раз и реализован на основе фреймворка FastAPI.
Файл main.py содержит следующие классы и методы:
Variable и UpdateVariable | Эти классы — просто структуры, описывающие поля, которые приходят в запросах. Используются для стандартизации названий и типов полей. |
|---|---|
encrypt_value и decrypt_value | Методы шифруют ваши данные перед записью в БД, а также расшифровывают после получения из БД. |
Variable и UpdateVariable
Эти классы — просто структуры, описывающие поля, которые приходят в запросах. Используются для стандартизации названий и типов полей.
encrypt_value и decrypt_value
Методы шифруют ваши данные перед записью в БД, а также расшифровывают после получения из БД.
Классы, методы и переменные sqlite
DATABASE_URL | Переменная, содержащая путь к SQLite-базе, в которой мы храним данные |
|---|---|
EnvironmentVariable | Класс cодержит модель таблицы SQLite, в которой мы храним данные |
get_db | Метод содержит сессию для работы с базой данных |
Переменная, содержащая путь к SQLite-базе, в которой мы храним данные
Класс cодержит модель таблицы SQLite, в которой мы храним данные
Метод содержит сессию для работы с базой данных
Классы, методы и переменные Fastapi
ALLOWED_IPS и VALID_TOKENS | Переменные содержат список IP-адресов, с которых вы будете обращаться к вашему сервису, а также Bearer-токен, который необходимо передавать в заголовке (header) запроса для предотвращения несанкционированного доступа. |
|---|---|
add_middleware CORS | Метод для ограничения доступа к сервису из JavaScript-запросов. |
IPAndTokenMiddleware -> dispatch | Метод производит проверку доступа к API с разрешенных IP-адресов (в то же время доступ к статическим страницам открыт для всех) |
authenticate | Метод обеспечивает авторизацию в /admin по логину и паролю. |
read_index и read_admin | Методы генерируют статические страницы админки и главной страницы. |
list_variables | Метод отдает по запросу список всех сохраненных в БД ключей без их значений. |
add_variable | Метод принимает запрос на добавление данных в БД. |
update_variable | Метод принимает запрос на изменение значения конкретного ключа в БД. |
delete_variable | Метод принимает запрос на удаление конкретного ключа из БД. |
ALLOWED_IPS и VALID_TOKENS
Переменные содержат список IP-адресов, с которых вы будете обращаться к вашему сервису, а также Bearer-токен, который необходимо передавать в заголовке (header) запроса для предотвращения несанкционированного доступа.
Метод для ограничения доступа к сервису из JavaScript-запросов.
Метод производит проверку доступа к API с разрешенных IP-адресов (в то же время доступ к статическим страницам открыт для всех)
Метод обеспечивает авторизацию в /admin по логину и паролю.
Методы генерируют статические страницы админки и главной страницы.
Метод отдает по запросу список всех сохраненных в БД ключей без их значений.
Метод принимает запрос на добавление данных в БД.
Метод принимает запрос на изменение значения конкретного ключа в БД.
Метод принимает запрос на удаление конкретного ключа из БД.
При обращении к вашему сервису внешним запросом метод add_middleware выполняет проверку:
- Для API-запросов — проверяет, есть ли IP-адрес в списке разрешенных.
- Для HTML-страниц (например, админки или заглушки) — переводит запрос на выдачу статической страницы.
Применение этого метода обеспечивает высокий уровень безопасности вашего приложения:
- Защищенные разделы становятся недоступными для пользователей, не прошедших аутентификацию, а также для запросов с неавторизованных IP-адресов.
- Дополнительная защита реализуется через Bearer-токен, который должен присутствовать во всех запросах к системе.
Такая многоуровневая система безопасности помогает минимизировать риски.
После проверки FastAPI возвращает либо запрошенные данные через API, либо статическую HTML-страницу (например, админку).
Нужен сервер для практики? Арендуйте VPS/VDS в России — root-доступ, NVMe, DDoS-защита и поддержка 24/7.