Как создать простой API с FastAPI и базами данных за 25 минут

Как создать простой API с FastAPI и базами данных за 25 минут

я покажу минимальный, но полностью рабочий пример API с двумя эндпоинтами:

  • GET /items/{item_id} — получение данных
  • POST /items/ — создание элемента (с валидацией)

Для хранения данных используем SQLite + Pydantic модели. Никаких сложных настроек не понадобится.

Что понадобится

  • Python 3.8+
  • fastapi
  • uvicorn (асинхронный сервер)
  • sqlalchemy (для работы с базой)
  • pydantic

Установите всё одной командой:

Bash

from pydantic import BaseModel from sqlalchemy import Column, Integer, String, create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker Base = declarative_base() class Item(Base): __tablename__ = "items" id = Column(Integer, primary_key=True, index=True) name = Column(String, index=True) description = Column(String, nullable=True) # Создаём таблицу в памяти (SQLite) engine = create_engine("sqlite:///./test.db", connect_args={"check_same_thread": False}) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def init_db(): Base.metadata.create_all(bind=engine)

файл

from pydantic import BaseModel from typing import Optional class ItemCreate(BaseModel): name: str description: Optional[str] = None class ItemResponse(ItemCreate): id: int class Config: from_attributes = True

основа

from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.orm import Session from .models import Item, SessionLocal, init_db from .schemas import ItemCreate, ItemResponse app = FastAPI( title="Мой простой API", description="Только GET и POST на SQLite", version="1.0.0" ) # Инициализация базы init_db() # Dependency для сессии def get_db(): db = SessionLocal() try: yield db finally: db.close() # Эндпоинт 1: получение всех элементов @app.get("/items/", response_model=list[ItemResponse]) async def get_items(db: Session = Depends(get_db)): return db.query(Item).all() # Эндпоинт 2: создание элемента @app.post("/items/", response_model=ItemResponse) async def create_item(item: ItemCreate, db: Session = Depends(get_db)): db_item = Item(name=item.name, description=item.description) db.add(db_item) db.commit() db.refresh(db_item) return db_item # Запуск if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000, reload=True)

После выполнения запроса вы увидите id: 1, name: Котёнок и т.д.

Как сохранить данные

  • База хранится в файле test.db в папке проекта.
  • Можно легко заменить SQLite на PostgreSQL, MySQL или MongoDB за 2 минуты (просто поменяйте строку подключения).

Дополнительные улучшения (по желанию)

  • Добавить аутентификацию (OAuth2 + JWT)
  • Зашифровать API ключом (FastAPI поддерживает api_key)
  • Перейти на PostgreSQL с Alembic для миграций
  • Добавить WebSocket для реального времени
  • Использовать Docker для контейнеризации

Это уже полноценный REST API, который можно сразу деплоить на Railway, Render, Fly.io или даже на свой VPS. Код получился чистым, с валидацией, автогенерируемой документацией и SQLite-хранилищем.

Как создать простой API с FastAPI и базами данных за 25 минут
1
Начать дискуссию