ПроКодинг - Откроем для вас мир IT!

Вы только что написали свой первый скрипт на Python и теперь хотите сделать настоящий API. Не сайт. Не веб-приложение. Просто API - чистый, быстрый, без лишнего. Но что взять? Django? Flask? FastAPI? Нужно ли использовать PostgreSQL? Нужен ли Docker? Сколько всего этого должно быть, чтобы просто заработать на первом API? Всё, что вам нужно - это минимум. Не больше. Ни одного лишнего инструмента. Ни одной лишней зависимости.

Ядро: Python 3.12

Начните с самого простого. Python - это язык, на котором пишут большинство API, потому что он прост в изучении и работает быстро. Версия 3.12 - это то, что стоит использовать в 2026 году. Она быстрее, чем 3.10, стабильнее, чем 3.11, и поддерживается официально до 2028 года. Никаких экспериментов с альтернативами вроде PyPy или Rust. Вы не пишете драйвер для графической карты. Вы пишете API. Python - идеальный выбор.

Установите его через pyenv (если на Linux/macOS) или скачайте с python.org (если на Windows). Потом создайте виртуальное окружение: python -m venv api_env. Активируйте его. Теперь всё, что вы установите, будет изолировано. Никаких конфликтов с другими проектами.

Фреймворк: FastAPI

Вы могли бы взять Flask - и это было бы нормально. Но FastAPI - это следующий шаг. Он не просто легковесный. Он автоматически генерирует документацию API на основе типов данных. Написали def get_user(id: int): - и у вас сразу есть интерактивная документация по адресу /docs. Никаких рукописных Swagger-файлов. Никаких отдельных инструментов для тестирования. Вы пишете код - и сразу видите, как он работает.

FastAPI использует ASGI - это значит, что он может обрабатывать одновременно тысячи запросов. Он не медленнее Flask, но работает быстрее в продакшене. Установите его одной командой: pip install fastapi uvicorn. Уверен, вы уже знаете, что такое uvicorn? Это сервер, который запускает ваш FastAPI-код. Без него API не запустится. Две зависимости - и всё.

Хранение данных: SQLite

Да, вы можете использовать PostgreSQL. Или MySQL. Или MongoDB. Но зачем? Вы делаете первый API. Это не Instagram. Это не сервис с миллионами пользователей. Вам нужен простой способ хранить данные - и всё.

SQLite - это файл. Да, просто файл. Он хранит всё: таблицы, индексы, данные. Никаких серверов. Никаких паролей. Никаких подключений. Установите sqlite3 - он уже есть в Python. Никаких дополнительных пакетов. Создайте файл database.db - и начните работать. Никто не узнает, что вы используете SQLite, пока не посмотрит в код. Это не «непрофессионально». Это - разумно.

Для работы с базой используйте sqlite3 из стандартной библиотеки. Не нужно ORM вроде SQLAlchemy. Вы не пишете сложное приложение с десятками моделей. Вы пишете простой API. Простые запросы. Простые таблицы. Это работает.

Linux-сервер с отображением systemd-файла службы и командой запуска API без Docker или Nginx.

Проверка данных: Pydantic

FastAPI использует Pydantic - это не просто библиотека. Это система проверки и приведения данных. Когда вы пишете class User(BaseModel): name: str; age: int - Pydantic автоматически проверяет, что имя - это строка, а возраст - число. Если приходит строка вместо числа - он сразу отвечает ошибкой 422. Без лишнего кода. Без кучи if.

Это не опционально. Это часть FastAPI. Вы не устанавливаете его отдельно - он уже входит в состав. Но вы должны его использовать. Без него вы рискуете принимать битые данные. Без него вы не получите автоматическую документацию. Это не «дополнительно». Это основа.

Деплой: uvicorn + systemd (Linux)

Вы написали API. Потестировали. Теперь нужно запустить его на сервере. Не на вашем ноутбуке. Не в Docker-контейнере. Просто на VPS.

Запускать uvicorn main:app --host 0.0.0.0 --port 8000 - это не продакшен. Это тест. Настоящий способ - это systemd. Это системный менеджер сервисов в Linux. Вы создаёте файл /etc/systemd/system/api.service с описанием, где лежит ваш код, какой пользователь запускает, какие переменные окружения нужны. Потом включаете сервис: sudo systemctl enable api и sudo systemctl start api. Сервер перезагрузится - и ваш API останется живым. Никаких Docker, никаких Nginx, никаких reverse-proxy. Просто uvicorn + systemd. Это работает на любом дистрибутиве Linux: Ubuntu, Debian, CentOS - неважно.

Логи и мониторинг: файлы и curl

Вы не нужны Prometheus. Не нужны Grafana. Не нужны Sentry. Вы делаете первый API. Вам нужно знать: работает ли он? Отвечает ли? Есть ли ошибки?

Запишите логи в файл. Просто добавьте в команду запуска: uvicorn main:app --host 0.0.0.0 --port 8000 >> /var/log/api.log 2>&1. Теперь все ошибки и запросы пишутся в /var/log/api.log. Потом просто смотрите: tail -f /var/log/api.log. Если что-то сломалось - вы увидите это сразу.

Тестируйте через curl: curl http://localhost:8000/users. Это проще, чем Postman. Это быстрее, чем Swagger UI. Это работает на любом сервере. Это - ваш инструмент.

Интерактивная документация FastAPI в виде голографического интерфейса с запросом к SQLite-базе данных.

Что не нужно: Docker, Nginx, Redis, PostgreSQL

Вы можете услышать: «Docker - это стандарт». Но он не нужен, если вы не развертываете 10 сервисов. Вы не делаете микросервисы. Вы делаете один API. Docker добавляет сложность. Он требует знаний о сетях, портах, volumes. Это перебор.

Nginx? Он нужен, если вы делаете HTTPS, балансировку или кэширование. Вы не делаете это. У вас один API. FastAPI и systemd - это всё, что вам нужно.

Redis? Нужен для кэширования. Вы не кэшируете. PostgreSQL? Нужен для больших данных. У вас - десятки записей. SQLite хватит на год. Даже на два.

Вы не должны усложнять. Вы должны просто запустить. И сделать так, чтобы это работало. Без лишнего.

Пример: как выглядит ваш первый API

Вот всё, что вам нужно в файле main.py:

from fastapi import FastAPI
from pydantic import BaseModel
import sqlite3

app = FastAPI()

class User(BaseModel):
    name: str
    age: int

@app.get("/users")
def get_users():
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    cursor.execute("SELECT name, age FROM users")
    rows = cursor.fetchall()
    conn.close()
    return [{"name": row[0], "age": row[1]} for row in rows]

@app.post("/users")
def create_user(user: User):
    conn = sqlite3.connect("database.db")
    cursor = conn.cursor()
    cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", (user.name, user.age))
    conn.commit()
    conn.close()
    return {"message": "User created"}

Создайте базу: sqlite3 database.db "CREATE TABLE IF NOT EXISTS users (name TEXT, age INTEGER)"

Запустите: uvicorn main:app --host 0.0.0.0 --port 8000

Откройте http://localhost:8000/docs - и вы увидите интерактивную документацию. Протестируйте через кнопки. Потом запустите на сервере через systemd. И всё. Ваш первый API работает. Без лишнего.

Что дальше?

Когда вы начнёте получать больше трафика - тогда подумайте о Nginx, о HTTPS, о Redis. Когда вы начнёте хранить миллионы записей - тогда перейдите на PostgreSQL. Когда вы начнёте масштабироваться - тогда придет Docker. Но пока вы просто начинаете - всё, что вам нужно, - это Python, FastAPI, SQLite и systemd.

Не пытайтесь сделать всё идеально. Сделайте просто. Сделайте рабочим. Сделайте - и потом улучшайте. Это и есть настоящий путь разработчика.

Можно ли использовать Django вместо FastAPI для первого API?

Можно, но это не оптимально. Django - это полноценный фреймворк для веб-сайтов с админкой, шаблонами, формами и ORM. Для API он тяжеловат. FastAPI проще, быстрее и даёт автоматическую документацию. Если вы делаете чистый API - FastAPI лучше. Django лучше, если вы делаете сайт с интерфейсом. Для первого API - выбирайте FastAPI.

Почему не использовать PostgreSQL сразу?

PostgreSQL требует отдельного сервера, настройки пользователей, паролей, резервного копирования и мониторинга. SQLite - это один файл. Вы можете скопировать его, залить на GitHub, перенести на другой сервер - и всё работает. Для первого API с десятками или сотнями записей SQLite надёжнее и проще. PostgreSQL - это когда у вас уже есть нагрузка, а не когда вы только начинаете.

Нужен ли Docker для деплоя?

Нет. Docker добавляет слой абстракции, который не нужен, когда вы управляете одним сервисом. systemd на Linux - это стандартный, надёжный и проверенный способ запуска Python-приложений. Docker полезен, когда вы разворачиваете несколько сервисов (база, кэш, API, веб-интерфейс). Для одного API - это перебор. Учитесь сначала работать с базовыми инструментами, прежде чем переходить к контейнерам.

Как протестировать API без Postman?

FastAPI автоматически генерирует интерактивную документацию по адресу /docs. Там вы можете отправлять запросы прямо из браузера. Альтернатива - curl в терминале. Например: curl -X POST http://localhost:8000/users -H "Content-Type: application/json" -d '{"name":"Иван","age":25}'. Это быстрее, чем Postman, и работает на любом сервере. Postman - это удобно, но не обязательно.

Что делать, если API перестал работать после перезагрузки сервера?

Если вы используете systemd, то сервис автоматически запускается при загрузке системы. Если он не запустился - проверьте логи: sudo journalctl -u api. Там вы увидите, почему процесс не запустился: ошибка в пути к файлу, отсутствие виртуального окружения, неправильные права. systemd не «сломался» - он просто не смог запустить приложение. Ищите причину в логах - и исправляйте. Это нормальная часть разработки.