Tek Bir API Endpoint'i Oluştur

Claude Code ile Yazılım Geliştirme

Dani Zysman

AI Curriculum Manager @ DataCamp

Sorgudan API'ye

recraft: half: Bir geliştirici, Claude AI asistanıyla bir API oluşturuyor; ekranda veritabanı bağlantılı kod görünüyor

  • Önceki Video: Veritabanını etkileşimli sorguladık
  • Şimdi: Music Analytics API'ye bir endpoint ekle
    • Tek prompt, çalışan bir endpoint, gerçek Python kodu
Claude Code ile Yazılım Geliştirme

Projede Son Durum

music-analytics-api/
  app.py             # Mevcut API (db_routes kaydıyla güncellendi)
  routes.py          # Mevcut rotalar
  models.py          # Artist/Album modelleri
  db_routes.py       # <- Veritabanı destekli yeni Blueprint
  chinook.db
  test_routes.py
  CLAUDE.md
Claude Code ile Yazılım Geliştirme

Bunu Claude'a Yaptır

> Yeni bir db_routes.py blueprint'i oluştur; 
/artists/<artist_id>/albums endpoint'i tüm albümleri 
belli bir sanatçı için chinook,db'den JSON olarak döndürsün. @app.py ile kaydet
1. db_routes py - Yeni Flask Blueprint:
    - chinook.db'ye bağlanmak için get_db_connection() yardımcı işlevi
    - Belirli bir sanatçının tüm albümlerini sorgulayan endpoint eklendi
    - JSON olarak AlbumId, Title ve ArtistId alanlarını döndürür
2. app.py güncellendi 
    - Blueprint kaydedildi; yeni endpoint aktif

Sanatçı yoksa endpoint 404 döndürür 
ve albümleri başlığa göre sıralı JSON döndürür.
Claude Code ile Yazılım Geliştirme

Üretilen Kod

@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 ile Yazılım Geliştirme

Yerelde Test Et

$ 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 ile Yazılım Geliştirme

Köşe Durumlarını Ele Al

  • Ya şöyleyse...
    • Artist ID yoksa?
    • Sanatçının albümü yoksa?
    • Geçersiz ID biçimi?
    • Mevcut kod boş {"albums": []} döndürüyor
  • Daha iyi yanıtlar:
    • Açık mesajla 404
    • Doğrulanmış yanıt yapısı
    • Doğru hata yönetimi
Claude Code ile Yazılım Geliştirme

Pydantic ile Doğrulama Ekle

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 şunları sağlar:
    • Tür doğrulama
    • Otomatik serileştirme
    • Net hata iletileri
    • Kendi kendini belgeleyen şemalar
Claude Code ile Yazılım Geliştirme

Doğrulamayı Ekletmek için Claude'a Sor

> @db_routes.py'ye Pydantic doğrulaması ekle. Sanatçı yoksa 
ya da albümü yoksa mesajla 404 döndür.
Tamam! db_routes.py'ye Pydantic doğrulaması eklendi:
Değişiklikler:
- Album modeli eklendi (album_id, title, artist_id)
- Sanatçı yoksa 404 "Artist not found" döner
- Sanatçının albümü yoksa 404 "Artist has no albums" döner
- Döndürmeden önce her albümü Album modeliyle doğrular
- Doğrulama hatalarında 400 döner
Yanıtlar:
- 404 "Artist not found"
- 404 "Artist has no albums"  
- 200 doğrulanmış albüm verisiyle
Claude Code ile Yazılım Geliştirme

Hadi pratik yapalım!

Claude Code ile Yazılım Geliştirme

Preparing Video For Download...