JavaRush /Курсы /Модуль 4: FastAPI /Пример минимального приложения FastAPI

Пример минимального приложения FastAPI

Модуль 4: FastAPI
1 уровень , 9 лекция
Открыта

Ну что, друзья, мы подошли к тому моменту, которого ждали с самого начала: создаем наше первое минимальное приложение на FastAPI! Сегодня мы объединим знания из предыдущих лекций, чтобы сделать что-то настоящее, пусть и небольшое. Настало время "приветствовать" HTTP-запросы и отправлять JSON-ответы в ответ на них.

Цель минимального приложения

Перед нами стоит задача — создать минимальное API, которое сделает три вещи:

  1. Поздоровается с пользователем (GET-запрос).
  2. Позволит ему передать имя через Query Parameters и ответить персонализированным приветствием.
  3. Упакует всё это так, чтобы мы могли увидеть результат в Swagger UI и протестировать его.

Начинаем строительство

  1. Создаем проект

    Для начала убедитесь, что у вас есть все нужные инструменты: Python, FastAPI и Uvicorn. Для этого перейдите в папку проекта (или создайте новую) и установите зависимости:

    pip install fastapi uvicorn

    После этого создадём главный файл проекта. По традиции назовем его main.py.

  2. Базовая структура приложения

    В файле main.py мы пишем следующий минимальный код, чтобы начать:

    
    from fastapi import FastAPI
    
    # Создаем экземпляр приложения FastAPI
    app = FastAPI()
    
    # Базовый эндпоинт
    @app.get("/")
    async def read_root():
        return {"message": "Добро пожаловать в наше минимальное приложение!"}
    

    Сохраняем файл и запускаем наше приложение через Uvicorn:

    uvicorn main:app --reload

    Открываем браузер и заходим на http://127.0.0.1:8000/. Ура, мы видим приветственное сообщение! Маленький шаг для кода, но огромный для нашего API.

  3. Добавляем параметры запроса (Query Parameters)

    Теперь сделаем наше приложение чуточку интереснее. Пусть оно сможет персонализировать приветствие с помощью имени, переданного в параметре запроса.

    Обновим наш эндпоинт:

    
    @app.get("/greet/")
    async def greet_user(name: str = "гость"):
        return {"message": f"Привет, {name}!"}
    

    Снова запускаем приложение и проверяем: заходим на http://127.0.0.1:8000/greet/?name=Иван. Мы видим сообщение: {"message": "Привет, Иван!"}. Если убрать параметр name, то получите универсальное приветствие: {"message": "Привет, гость!"}. Красота!

  4. Генерация документации (Swagger UI)

    Не забываем, что FastAPI автоматически генерирует документацию. Нам ничего не нужно делать отдельно — Swagger UI уже подключен. Просто перейдите по адресу http://127.0.0.1:8000/docs, и там вы увидите интерфейс, где можно протестировать ваши эндпоинты через удобный графический интерфейс.

  5. Добавим дополнительный эндпоинт: проверим магию JSON

    Для демонстрации работы с немного более сложными ответами добавим новый эндпоинт, который возвращает информацию в виде списка:

    
    @app.get("/items/")
    async def get_items():
        return {"items": ["яблоко", "банан", "апельсин"]}
    

    Эндпоинт http://127.0.0.1:8000/items/ теперь вернет JSON-массив предметов.

  6. Организация кода

    Чтобы не захламлять main.py, мы можем заранее подумать об организации кода (это хорошая привычка). Давайте создадим папку app и разделим наш файл на два: один для маршрутов, другой для инициализации приложения:

    Структура проекта:

    
    project/
    ├── app/
    │   ├── __init__.py
    │   ├── main.py
    │   └── routes.py
    

    routes.py:

    
    from fastapi import APIRouter
    
    router = APIRouter()
    
    @router.get("/")
    async def read_root():
        return {"message": "Добро пожаловать в наше минимальное приложение!"}
    
    @router.get("/greet/")
    async def greet_user(name: str = "гость"):
        return {"message": f"Привет, {name}!"}
    
    @router.get("/items/")
    async def get_items():
        return {"items": ["яблоко", "банан", "апельсин"]}
    

    main.py:

    
    from fastapi import FastAPI
    from .routes import router
    
    app = FastAPI()
    
    app.include_router(router)
    

    Это поможет сохранять код чистым и читаемым, особенно по мере роста приложения.

  7. Обработка ошибок и настройка ответов

    FastAPI позволяет нам возвращать специфические HTTP-статусы и обрабатывать ошибки. Например, давайте добавим простую обработку ошибки, если пользователь передал слишком длинное имя в greet_user:

    
    @app.get("/greet/")
    async def greet_user(name: str = "гость"):
        if len(name) > 10:
            return {"error": "Имя слишком длинное!"}, 400
        return {"message": f"Привет, {name}!"}
    

    Теперь, если вы попробуете передать name=СупердлинноеИмя, API вежливо сообщит о вашей ошибке и вернет код 400.

  8. Полный код минимального приложения

    Итак, вот минимальное приложение в одном файле:

    
    from fastapi import FastAPI
    
    app = FastAPI()
    
    @app.get("/")
    async def read_root():
        return {"message": "Добро пожаловать в наше минимальное приложение!"}
    
    @app.get("/greet/")
    async def greet_user(name: str = "гость"):
        if len(name) > 10:
            return {"error": "Имя слишком длинное!"}
        return {"message": f"Привет, {name}!"}
    
    @app.get("/items/")
    async def get_items():
        return {"items": ["яблоко", "банан", "апельсин"]}
    

Чем полезно минимальное приложение?

  1. Реальные проекты: минимальное приложение — основа для настоящих API. Добавление новых эндпоинтов, подключения баз данных и внешних сервисов начинается с таких шагов.
  2. Собеседования: умение быстро создать минимальное приложение демонстрирует ваши навыки в веб-разработке.
  3. Swagger UI: наличие документации из коробки экономит время и впечатляет коллег.

А ещё... Ещё FastAPI помогает держать ваш проект в чистоте, а это уже половина успеха.

1
Задача
Модуль 4: FastAPI, 1 уровень, 9 лекция
Недоступна
Эндпоинт с Query Parameters
Эндпоинт с Query Parameters
1
Задача
Модуль 4: FastAPI, 1 уровень, 9 лекция
Недоступна
Эндпоинт со списком данных
Эндпоинт со списком данных
3
Опрос
Концепция эндпоинтов, 1 уровень, 9 лекция
Недоступен
Концепция эндпоинтов
Концепция эндпоинтов
Комментарии
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ