Створіть один API-ендпойнт

Розробка ПЗ з Claude Code

Dani Zysman

AI Curriculum Manager @ DataCamp

Від запиту до API

recraft: half: Розробник за столом, асистент Claude AI допомагає будувати API, на екрані код із підключенням до бази даних

  • Попереднє відео: Інтерактивні запити до бази даних
  • Зараз: Додайте ендпойнт до Music Analytics API
    • Один промпт, робочий ендпойнт, реальний код Python
Розробка ПЗ з Claude Code

Проєкт на цей момент

music-analytics-api/
  app.py             # Наявний API (оновлено для реєстрації db_routes)
  routes.py          # Наявні маршрути
  models.py          # Моделі Artist/Album
  db_routes.py       # <- Новий Blueprint з підключенням до БД
  chinook.db
  test_routes.py
  CLAUDE.md
Розробка ПЗ з Claude Code

Попросіть Claude побудувати це

> Create a new db_routes.py blueprint with an endpoint at 
/artists/<artist_id>/albums that returns all albums by 
a specific artist as JSON from chinook,db. Register it with @app.py
1. db_routes py - Новий Flask Blueprint із:
    - хелпером get_db_connection() для підключення до chinook.db
    - доданим ендпойнтом, що робить запит до бази даних для всіх альбомів конкретного виконавця
    - повертає JSON з полями AlbumId, Title та ArtistId
2. Оновлено app.py 
    - зареєстровано blueprint, тож новий ендпойнт активний

Ендпойнт поверне 404, якщо виконавця не існує,
а також повертає альбоми, відсортовані за назвою, у форматі JSON.
Розробка ПЗ з Claude Code

Згенерований код

@app.route("/artists/<int:artist_id>/albums")
def get_artist_albums(artist_id):
    conn = get_db()
    artist = conn.execute("SELECT ... WHERE ArtistId = ?", ...)
    albums = conn.execute("SELECT ... WHERE ArtistId = ?", ...)
    conn.close()
    return jsonify({"artist": ..., "albums": [...]})
Розробка ПЗ з Claude Code

Протестуйте локально

$ python app.py & PID=$! && sleep 3 && curl http://127.0.0.1:5000/artists/1/albums
&& kill $PID
127.0.0.1 "GET /artists/1/albums HTTP/1.1" 200
[
    {
     "album_id": 1,
     "artist_id": 1,
     "title": "For Those About To Rock We Salute You"
    },
    {
     "album_id": 4,
     "artist_id": 1,
     "title": "Let There Be Rock"
    }
]
Розробка ПЗ з Claude Code

Оброблення крайових випадків

  • Що, якщо...
    • ID виконавця не існує?
    • У виконавця немає альбомів?
    • Некоректний формат ID?
    • Поточний код повертає порожній {"albums": []}
  • Кращі відповіді:
    • 404 із чітким повідомленням
    • Валідація структури відповіді
    • Коректне оброблення помилок
Розробка ПЗ з Claude Code

Додайте валідацію з Pydantic

from pydantic import BaseModel
from typing import List

class Album(BaseModel):
    id: int
    title: str

class ArtistAlbums(BaseModel):
    artist_id: int
    albums: List[Album]
  • Pydantic надає:
    • Перевірку типів
    • Автоматичну серіалізацію
    • Чіткі повідомлення про помилки
    • Самодокументовані схеми
Розробка ПЗ з Claude Code

Попросіть Claude додати валідацію

> Add Pydantic validation to @db_routes.py. Return 404 with a message if the 
artist doesn't exist or has no albums.
Готово! Додано валідацію Pydantic до db_routes.py:
Зміни:
- Додано модель Album (album_id, title, artist_id)
- Повертає 404 "Artist not found", якщо виконавця не існує
- Повертає 404 "Artist has no albums", якщо у виконавця немає альбомів
- Перевіряє кожен альбом на відповідність моделі Album перед поверненням
- Повертає 400 у разі помилок валідації
Відповіді:
- 404 "Artist not found"
- 404 "Artist has no albums"  
- 200 із валідованими даними альбомів
Розробка ПЗ з Claude Code

Давайте потренуємось!

Розробка ПЗ з Claude Code

Preparing Video For Download...