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()
    
    # Базовий endpoint
    @app.get("/")
    async def read_root():
        return {"message": "Ласкаво просимо до нашого мінімального застосунку!"}
    

    Зберігаємо файл і запускаємо застосунок через Uvicorn:

    uvicorn main:app --reload

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

  3. Додаємо параметри запиту (Query Parameters)

    Тепер зробимо застосунок трішки цікавішим. Нехай він зможе персоналізувати привітання за допомогою імені, переданого в параметрі запиту.

    Оновимо наш endpoint:

    
    @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, і там ти побачиш інтерфейс, де можна протестувати свої endpoint-и через зручний графічний інтерфейс.

  5. Додаємо додатковий endpoint: перевіримо магію JSON

    Для демонстрації роботи з трохи складнішими відповідями додамо новий endpoint, який повертає інформацію у вигляді списку:

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

    Endpoint 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. Додавання нових endpoint-ів, підключення баз даних і зовнішніх сервісів починається з таких кроків.
  2. Співбесіди: уміння швидко створити мінімальний застосунок демонструє твої навички в веб-розробці.
  3. Swagger UI: наявність документації "з коробки" економить час і вражає колег.

А ще... FastAPI допомагає тримати твій проєкт у чистоті, а це вже половина успіху.

3
Опитування
Концепція ендпоінтів, рівень 1, лекція 9
Недоступний
Концепція ендпоінтів
Концепція ендпоінтів
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ