Dersin öğretmen rehberi
FastAPI ile ML Modeli REST API Olarak Sunma dersinde isteğin veya verinin backend içinde hangi adımlardan geçtiğini, her kod parçasının görevini ve gözlenebilir çıktıyı birlikte inceleyeceğiz.
Bu dersin hedefleri- Ders başlığındaki backend kavramını çalışan kodun girdisi ve çıktısıyla ilişkilendirmek.
- Bir satırın önceki adımdan aldığı veriyi ve sonraki adıma hazırladığı sonucu takip etmek.
- Hata ayıklama, test ve temel güvenlik kontrollerini akışın doğal parçası olarak uygulamak.
FastAPI ile ML Modeli REST API Olarak Sunma
beginner 25 dk çalışma
Bu dersin ana sorusu: FastAPI ile ML Modeli REST API Olarak Sunma konusunu çalışan bir backend örneği üzerinden anlamak.
Öğrenme özeti: FastAPI ile ML Modeli REST API Olarak Sunma dersinin temel fikri, backend kodunu yalnızca çalıştırmak değil; girdinin nasıl işlendiğini, neden o sıranın seçildiğini ve sonucun nasıl doğrulandığını görebilmektir.
Öğrenme rotası ve transfer görevi
- Problemi tanı: Backend örneğinin girdisini, görevini ve beklenen çıktısını bir cümleyle yazın.
- Akışı izle: Kodun veriyi hangi sırayla aldığını, dönüştürdüğünü ve döndürdüğünü satır satır takip edin.
- Güvenli değiştir: Küçük bir değişiklik yapın; normal, hatalı ve sınır girdilerle sonucu test edin.
Kendin dene: Örneğin ana akışını bozmadan yeni bir girdi alanı veya hata senaryosu ekleyin. Değişen satırları, beklenen sonucu ve güvenlik kontrolünü yazılı olarak açıklayın.
Kavram sözlüğü ve sık karıştırılanlar
- Request: İstemcinin backend sunucusundan bir işlem veya veri istediği iletişimdir.
- Response: Backendin isteğe karşı döndürdüğü durum, başlık ve veri sonucudur.
- Validation: Girdinin beklenen türde, biçimde ve iş kuralına uygun olup olmadığını kontrol etmektir.
- Log: Çalışma sırasında ne olduğunu izlemek için kaydedilen tanı bilgisidir.
Sık karıştırılanlar: Backend kodu yalnızca ekrana çıktı basmaz; veri alır, iş kuralı uygular, hata yönetir ve istemciyle sözleşme kurar. 200 veya başarılı görünen bir yanıt, iş kuralının doğru uygulandığını tek başına kanıtlamaz.
Nasıl çalışacağız: Önce backend örneğinin hangi girdiyi aldığını belirleyin. Sonra kodun veriyi hangi sırayla işlediğini, hangi noktada karar verdiğini ve istemciye/terminale ne döndürdüğünü satır satır takip edin.
Hata ayıklama: Hatayı yeniden üretin; istek girdisini, logu, dosya-satır bilgisini ve beklenen çıktıyı kaydedin. Akışı küçük parçalara ayırıp tek değişiklikle tekrar deneyin.
Test yaklaşımı: Normal verinin yanında boş, hatalı biçimli, sınır ve yetkisiz girdileri de deneyin. Hem status/çıktıyı hem de veri değişikliğini doğrulayın.
Güvenlik: Kullanıcı girdisini doğrulayın, parametreli sorgu kullanın, kimlik doğrulama ve yetkilendirmeyi ayırın; parola, token ve kişisel verileri koda veya loga yazmayın.
Sürdürülebilirlik: İş kurallarını controller, servis ve veri erişimi gibi sorumluluklara ayırın; anlamlı isimler, küçük fonksiyonlar, ortak hata yanıtı ve test edilebilir sınırlar kullanın.
Ders özeti: FastAPI ile ML Modeli REST API Olarak Sunma konusunu; girdi, backend işlemi, veri akışı, hata durumu, güvenlik kontrolü ve çıktı arasındaki ilişkiyle kendi cümlelerinizle açıklayın.
1
from
fastapi
import
FastAPI
;
app
=
FastAPI
(
)
;
@
app
post
(
"/predict"
)
def
predict
(
features
:
list
[
float
]
)
:
return
{
"class"
:
int
(
model
predict
(
[
features
]
)
[
0
]
)
}
FastAPI POST endpoint
— sonuç/hata dönüşü backend kodunun bir parçasıdır; ilgili girdiyi alır, dönüştürür ve sonraki adıma aktarır.
Öğretmen açıklaması
Bu adımı hiç bilmeyen biri için okuyalım: sonuç/hata dönüşü, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması içinde bu örneğin ilgili görevini üstlenir. Satırın rolü: sonuç/hata dönüşü satırının backend görevi. Sözdizimi açısından sonuç/hata dönüşü backend kodunun bir parçasıdır; ilgili girdiyi alır, dönüştürür ve sonraki adıma aktarır. Çalışma sırasında backend çalışma zamanı bu kod parçasını işler ve sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması için sonraki adıma taşınacak ara sonucu üretir. Gözlenebilir ara sonuç şudur: Bu adımın sonunda sonuç/hata dönüşü için gerekli ara durum oluşur; işlenmiş veri, terminal çıktısı veya istemciye dönen backend yanıtı gözlemlenebilir hale gelir. Bir sonraki satır bu sonucu kullanır. Kod parçaları: from fastapi import FastAPI; app = FastAPI(); @app.post("/predict") def predict(features: list[float]): return {"class": int(model.predict([features])[0])}: Bu satır backend akışının bir parçasını yürütür. Bu satırın neden burada olduğunu anlamak için girdiyi ve bir sonraki satıra taşınan değeri birlikte kontrol edin.
- Önce sonuç/hata dönüşü parçasının hangi girdiyi aldığını ve FastAPI ile ML Modeli REST API Olarak Sunma içindeki görevini söyleyin.
- Sonra sözdizimini parçalara ayırın; hangi anahtar kelime, değişken veya parametrenin neyi belirlediğini gösterin.
- Çalışma zamanında verinin bu satırdan önceki ve sonraki halini karşılaştırın; terminal/response sonucunu kontrol edin.
- Aynı fikri boş, hatalı veya farklı bir değerle deneyin; hata oluşursa mesajı okuyup tek değişiklikle yeniden test edin.
Yaygın hata: Bu adımda en yaygın hata, sonuç/hata dönüşü parçasını FastAPI ile ML Modeli REST API Olarak Sunma bağlamından koparıp yalnızca ezberlemektir. Önce girdiyi doğrulayın, sonra beklenen çıktıyı küçük bir testle karşılaştırın.
Şimdi sen dene: sonuç/hata dönüşü üzerinde küçük bir değişiklik yapın; sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması akışında hangi çıktının değişmesini beklediğinizi yazın, sonra normal ve hatalı bir girdiye karşı çalıştırın.
Zihinsel model ve benzetme
Zihninde canlandır: Başka bir araç kutusu bu dosyaya taşındı; içindeki araçlar isimleriyle kullanılabilir.
Günlük hayattan: def, "define" kelimesinin kısaltmasıdır: tarifi yazdığın satır.
İşaretlerin anlamı
def
Fonksiyon tarifini başlatır (define kısaltması).
import
Hazır bir modülü bu dosyaya dahil eder.
return
Fonksiyonun ürettiği sonucu çağıran yere verir.
:
Bir bloğun başladığını bildirir; Python blokları süslü parantezle değil girintiyle kurulur.
=
Sağdaki değeri soldaki isme bağlar.
.
Modülün/nesnenin içindeki araca ulaşır.
İleride bağlanacak
Bu modülün getirdiği araçlar sonraki satırlarda isimleriyle kullanılacak.
Sık yapılan hata
def satırının sonundaki iki nokta (:) unutulur Belirti: SyntaxError: expected ':' — dosya hiç çalışmaz.
Neden: Python blokları : ile açılır ve girintiyle kurulur.
Çözüm: def, if, for, while, class satırlarının : ile bittiğini kontrol et.
Bu satırı hiç bilmeyen biri için parçalayalım
Satırın görevi: sonuç/hata dönüşü satırının backend görevi
Kavram: FastAPI ile ML Modeli REST API Olarak Sunma
sonuç/hata dönüşü satırını yalnızca sözdizimiyle değil, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması içindeki göreviyle okuyun.
Blok kapsamı: sonuç/hata dönüşü satırının bulunduğu backend akışındaki kapsamı ve sonraki adıma taşıdığı sonucu belirler.
Neden şimdi: Bu parça, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması akışında sonraki adımın ihtiyaç duyduğu girdiyi hazırlamak için şimdi kuruluyor.
Kod etiketlerini tek tek incele
from fastapi import FastAPI; app = FastAPI(); @app.post("/predict") def predict(features: list[float]): return {"class": int(model.predict([features])[0])}
kod parçası
Ne yapar? Bu satır backend akışının bir parçasını yürütür.
Neden burada? Önceki girdiyi sonraki adıma taşımak için bu konumda bulunur.
Silinirse: İlgili ara sonuç veya çıktı oluşmaz.
Amaç
sonuç/hata dönüşü, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması içinde bu örneğin ilgili görevini üstlenir.
Nasıl Çalışır
backend çalışma zamanı bu kod parçasını işler ve sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması için sonraki adıma taşınacak ara sonucu üretir.
Akış Şeması (Flowchart)
AST (Abstract Syntax Tree)
{
"type": "Module",
"body": []
}
Değişiklikler (Diff)
+ Eklendi:
+ from fastapi import FastAPI; app = FastAPI(); @app.post("/predict") def predict(features: list[float]): return {"class": int(model.predict([features])[0])}
Yaygın Hata
Girdiyi doğrulamadan bu satırın ürettiği sonucu doğru kabul etmek.
Ek Açıklama
/predict endpointi hazir. Artik herhangi bir client (web, mobile, IoT) bu API'dan tahmin alabilir.
2
import
joblib
;
model
=
joblib
load
(
"model.pkl"
)
;
@
app
get
(
"/health"
)
def
health
(
)
:
return
{
"status"
:
"ok"
,
"model_loaded"
:
model
is
not
None
}
joblib.load + health endpoint
— sonuç/hata dönüşü backend kodunun bir parçasıdır; ilgili girdiyi alır, dönüştürür ve sonraki adıma aktarır.
Öğretmen açıklaması
Bu adımı hiç bilmeyen biri için okuyalım: sonuç/hata dönüşü, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması içinde bu örneğin ilgili görevini üstlenir. Satırın rolü: sonuç/hata dönüşü satırının backend görevi. Sözdizimi açısından sonuç/hata dönüşü backend kodunun bir parçasıdır; ilgili girdiyi alır, dönüştürür ve sonraki adıma aktarır. Çalışma sırasında backend çalışma zamanı bu kod parçasını işler ve sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması için sonraki adıma taşınacak ara sonucu üretir. Gözlenebilir ara sonuç şudur: Bu adımın sonunda sonuç/hata dönüşü için gerekli ara durum oluşur; işlenmiş veri, terminal çıktısı veya istemciye dönen backend yanıtı gözlemlenebilir hale gelir. Bir sonraki satır bu sonucu kullanır. Kod parçaları: import joblib; model = joblib.load("model.pkl"); @app.get("/health") def health(): return {"status":"ok","model_loaded": model is not None}: Bu satır backend akışının bir parçasını yürütür. Bu satırın neden burada olduğunu anlamak için girdiyi ve bir sonraki satıra taşınan değeri birlikte kontrol edin.
- Önce sonuç/hata dönüşü parçasının hangi girdiyi aldığını ve FastAPI ile ML Modeli REST API Olarak Sunma içindeki görevini söyleyin.
- Sonra sözdizimini parçalara ayırın; hangi anahtar kelime, değişken veya parametrenin neyi belirlediğini gösterin.
- Çalışma zamanında verinin bu satırdan önceki ve sonraki halini karşılaştırın; terminal/response sonucunu kontrol edin.
- Aynı fikri boş, hatalı veya farklı bir değerle deneyin; hata oluşursa mesajı okuyup tek değişiklikle yeniden test edin.
Yaygın hata: Bu adımda en yaygın hata, sonuç/hata dönüşü parçasını FastAPI ile ML Modeli REST API Olarak Sunma bağlamından koparıp yalnızca ezberlemektir. Önce girdiyi doğrulayın, sonra beklenen çıktıyı küçük bir testle karşılaştırın.
Şimdi sen dene: sonuç/hata dönüşü üzerinde küçük bir değişiklik yapın; sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması akışında hangi çıktının değişmesini beklediğinizi yazın, sonra normal ve hatalı bir girdiye karşı çalıştırın.
Zihinsel model ve benzetme
Zihninde canlandır: Başka bir araç kutusu bu dosyaya taşındı; içindeki araçlar isimleriyle kullanılabilir.
Günlük hayattan: def, "define" kelimesinin kısaltmasıdır: tarifi yazdığın satır.
İşaretlerin anlamı
def
Fonksiyon tarifini başlatır (define kısaltması).
import
Hazır bir modülü bu dosyaya dahil eder.
return
Fonksiyonun ürettiği sonucu çağıran yere verir.
:
Bir bloğun başladığını bildirir; Python blokları süslü parantezle değil girintiyle kurulur.
=
Sağdaki değeri soldaki isme bağlar.
.
Modülün/nesnenin içindeki araca ulaşır.
İleride bağlanacak
Bu modülün getirdiği araçlar sonraki satırlarda isimleriyle kullanılacak.
Sık yapılan hata
def satırının sonundaki iki nokta (:) unutulur Belirti: SyntaxError: expected ':' — dosya hiç çalışmaz.
Neden: Python blokları : ile açılır ve girintiyle kurulur.
Çözüm: def, if, for, while, class satırlarının : ile bittiğini kontrol et.
Bu satırı hiç bilmeyen biri için parçalayalım
Satırın görevi: sonuç/hata dönüşü satırının backend görevi
Kavram: FastAPI ile ML Modeli REST API Olarak Sunma
sonuç/hata dönüşü satırını yalnızca sözdizimiyle değil, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması içindeki göreviyle okuyun.
Blok kapsamı: sonuç/hata dönüşü satırının bulunduğu backend akışındaki kapsamı ve sonraki adıma taşıdığı sonucu belirler.
Neden şimdi: Bu parça, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması akışında sonraki adımın ihtiyaç duyduğu girdiyi hazırlamak için şimdi kuruluyor.
Kod etiketlerini tek tek incele
import joblib; model = joblib.load("model.pkl"); @app.get("/health") def health(): return {"status":"ok","model_loaded": model is not None}
kod parçası
Ne yapar? Bu satır backend akışının bir parçasını yürütür.
Neden burada? Önceki girdiyi sonraki adıma taşımak için bu konumda bulunur.
Silinirse: İlgili ara sonuç veya çıktı oluşmaz.
Amaç
sonuç/hata dönüşü, sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması içinde bu örneğin ilgili görevini üstlenir.
Nasıl Çalışır
backend çalışma zamanı bu kod parçasını işler ve sunucu tarafı kodun girdiyi işlemesi, doğru çıktıyı üretmesi ve güvenli biçimde çalışması için sonraki adıma taşınacak ara sonucu üretir.
Akış Şeması (Flowchart)
AST (Abstract Syntax Tree)
{
"type": "Module",
"body": []
}
Değişiklikler (Diff)
+ Eklendi:
+ import joblib; model = joblib.load("model.pkl"); @app.get("/health") def health(): return {"status":"ok","model_loaded": model is not None}
Yaygın Hata
Girdiyi doğrulamadan bu satırın ürettiği sonucu doğru kabul etmek.
Ek Açıklama
Health check endpointi. Bu endpoint Docker/K8s health probe olarak kullanilabilir.