Основы FastAPI: Полное руководство для начинающих
Автор: Javohir Abdullayev · · Python

Что такое FastAPI и почему именно он?
В современной веб-разработке создание бэкенд API является одной из ключевых задач. Хотя в мире Python долгие годы лидировали Django и Flask, в последнее время FastAPI приобрел беспрецедентную популярность. FastAPI — это современный веб-фреймворк с поддержкой асинхронности (asyncio), построенный на основе подсказок типов (type hints) в Python 3.8+ и обладающий высокой скоростью работы.
Его ключевые преимущества:
- Высокая скорость: производительность на уровне NodeJS и Go (работает на базе Starlette и Pydantic).
- Автоматическая документация: генерирует интерактивную документацию API через Swagger UI и ReDoc без необходимости писать её вручную.
- Мощная валидация: автоматически проверяет входящие данные с помощью Pydantic и наглядно отображает ошибки.
- Простота разработки: сокращает объем кода и повышает продуктивность разработчика.
1. Настройка рабочего окружения и установка
Чтобы начать работу с FastAPI, сначала создадим виртуальное окружение (virtualenv) и установим необходимые библиотеки. Нам понадобятся сам фреймворк FastAPI и ASGI-сервер uvicorn для запуска проекта.
# Создание и активация виртуального окружения
python -m venv venv
source venv/bin/activate # Linux / MacOS
# venv\Scripts\activate # Windows
# Установка библиотек
pip install fastapi uvicorn[standard]2. Написание первого API эндпоинта
В папке проекта создадим файл main.py и напишем наш первый простой API:
from fastapi import FastAPI
app = FastAPI(
title="Mening Birinchi API Loyiham",
description="FastAPI asoslarini o'rganish uchun qo'llanma",
version="1.0.0"
)
@app.get("/")
def root():
return {"xabar": "Salom, PyCoder.uz o'quvchilari! FastAPI ga xush kelibsiz!"}
@app.get("/salom/{ism}")
def salom_ber(ism: str):
return {"natija": f"Salom, {ism.capitalize()}! Siz muvaffaqiyatli API yaratdingiz."}
Чтобы запустить проект, выполните в терминале следующую команду:
uvicorn main:app --reloadОткрыв в браузере адрес http://127.0.0.1:8000/salom/javohir, вы увидите ответ в формате JSON. Флаг --reload автоматически перезапускает сервер при изменении кода.
3. Автоматическая интерактивная документация API
Одна из лучших особенностей FastAPI — это интерактивная документация, доступная «из коробки» без сторонних плагинов. При работающем сервере откройте в браузере следующие адреса:
- Swagger UI:
http://127.0.0.1:8000/docs— возможность тестировать API эндпоинты прямо из браузера. - ReDoc:
http://127.0.0.1:8000/redoc— красиво оформленная и удобная техническая документация.
4. Работа с Path и Query параметрами
При разработке API передавать данные через URL можно двумя способами: с помощью Path Parameters (параметры пути) и Query Parameters (параметры запроса).
@app.get("/kitoblar/{kitob_id}")
def kitob_tafsiloti(kitob_id: int, sahifa: int = 1, chop_etilganmi: bool = True):
return {
"kitob_id": kitob_id,
"sahifa": sahifa,
"chop_etilganmi": chop_etilganmi,
"status": "Kitob ma'lumotlari topildi"
}
Здесь kitob_id — обязательное целое число (int), а sahifa и chop_etilganmi — необязательные query-параметры со значениями по умолчанию. Если пользователь передаст строку вместо числа в kitob_id, FastAPI автоматически вернет ошибку 422 Unprocessable Entity.
5. Валидация данных с помощью Pydantic (POST-запросы)
Для получения новых данных от пользователя (например, при регистрации или добавлении товара) используется метод HTTP POST и модели Pydantic.
from pydantic import BaseModel, Field
from typing import Optional
class Mahsulot(BaseModel):
nomi: str = Field(..., min_length=2, max_length=100)
narxi: float = Field(..., gt=0, description="Narx noldan katta bo'lishi shart")
mavjudmi: bool = True
tavsif: Optional[str] = None
# Имитация базы данных (в памяти)
mahsulotlar_royxati = []
@app.post("/mahsulotlar/", status_code=201)
def mahsulot_yarat(mahsulot: Mahsulot):
mahsulot_dict = mahsulot.model_dump()
mahsulot_dict["id"] = len(mahsulotlar_royxati) + 1
mahsulotlar_royxati.append(mahsulot_dict)
return {"xabar": "Mahsulot muvaffaqiyatli saqlandi", "data": mahsulot_dict}
С помощью модели Pydantic строго проверяются тип каждого поля и установленные ограничения (длина, минимальное значение). При некорректных данных бэкенд возвращает понятный JSON-ответ с описанием ошибки без необходимости писать дополнительный код обработки.
6. Завершение мини-проекта CRUD
Теперь объединим всё изученное и добавим эндпоинты для получения и удаления товаров:
from fastapi import HTTPException
@app.get("/mahsulotlar/")
def mahsulotlarni_olish():
return {"jami": len(mahsulotlar_royxati), "natijalar": mahsulotlar_royxati}
@app.delete("/mahsulotlar/{mahsulot_id}")
def mahsulot_ochir(mahsulot_id: int):
for index, item in enumerate(mahsulotlar_royxati):
if item["id"] == mahsulot_id:
ochirilgan = mahsulotlar_royxati.pop(index)
return {"xabar": "Mahsulot o'chirildi", "ochirilgan": ochirilgan}
raise HTTPException(status_code=404, detail="Bunday ID ga ega mahsulot topilmadi")
Советы для начинающих разработчиков
- Всегда используйте Type Hinting: аннотации типов в Python делают код понятным и полностью раскрывают потенциал FastAPI.
- Активно пользуйтесь Swagger (/docs): тестируйте ваши API-эндпоинты прямо на месте без необходимости открывать Postman.
- Асинхронные функции: если вы обращаетесь к базе данных асинхронно, используйте
async def. Для обычных синхронных задач достаточноdef. - Соблюдайте модульность: по мере роста проекта разделяйте эндпоинты по отдельным файлам с помощью
APIRouter.
Заключение
FastAPI — отличный инструмент в мире бэкенда, сочетающий высокую производительность, простоту и удобство. Если вы хотите писать современные REST API на Python, FastAPI — один из лучших вариантов. В следующих уроках мы рассмотрим подключение этого API к базе данных PostgreSQL с использованием SQLAlchemy ORM.
Теги: #FastAPI #Python #REST API #Backend #Pydantic