Sınıf Tabanlı ve Yield Bağımlılıkları
Sınıfları kullanarak daha karmaşık bağımlılıklar oluşturmayı ve kurulum ile kaynak serbest bırakma mantığı için `yield` ile kaynakları yönetmeyi öğrenin.
Sınıf Tabanlı ve Yield Bağımlılıkları, CoddyKit'te ücretsiz bir FastAPI Backend Development Bootcamp dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, FastAPI Backend Development Bootcamp öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
Beyond Simple Function Dependencies
Önceki derslerde, FastAPI'deki temel fonksiyon tabanlı bağımlılıkları öğrendik. Bunlar, doğrulama veya ortak değerlerin enjekte edilmesi gibi basit görevler için harikadır.
Peki ya bağımlılığınızın durum yönetmesi, yapılandırma kabul etmesi veya hem kurulum hem de temizleme gerektiren kaynakları yönetmesi gerekirse? İşte bu noktada sınıf tabanlı ve yield bağımlılıkları devreye girer!
Why Use Class-Based Dependencies?
Sınıf tabanlı bağımlılıklar, daha karmaşık senaryolar için çeşitli avantajlar sunar:
- Organizasyon: İlgili mantığı ve veriyi bir sınıf içinde kapsüller.
- Durum (State): Sınıflar, dahili durumu tutabilir; bu yararlı olabilir (ancak istek izolasyonuna dikkat edilmelidir).
- Yapılandırma: Bağımlılığı örnekleme sırasında parametreleri kolayca aktarmanıza olanak tanır.
- Test Edilebilirlik: Test amacıyla belirli sınıf örneklerini taklit etmek (mock) veya enjekte etmek daha kolaydır.
Defining a Class Dependency
Sınıf tabanlı bir bağımlılık oluşturmak için bir Python sınıfı tanımlarsınız. FastAPI daha sonra bu sınıfın bir örneğini kullanabilir. Eğer sınıfınız bir __call__ metoduna sahipse, FastAPI bağımlılığın değerini almak için bu metodu çağıracaktır.
Basit bir örneğe bakalım:
class MyService:
def __init__(self):
self.message = "Welcome from MyService!"
def __call__(self):
# This method is called by FastAPI to get the value
return self.message
# Simulate FastAPI's usage:
# FastAPI would instantiate MyService() once or per request
service_instance = MyService()
# It then calls the __call__ method to get the value
dependency_value = service_instance()
print(dependency_value)How FastAPI Handles Class Dependencies
Depends(MyClass) kullandığınızda, FastAPI şunları yapacaktır:
MyClass'ın bir örneğini oluşturacaktır.- Eğer
MyClassbir__call__metoduna sahipse, bu metodu çağıracak ve dönen değeri bağımlılık olarak kullanacaktır. - Aksi takdirde,
MyClass'ın örneğini doğrudan bağımlılık olarak kullanacaktır.
Eğer Depends(MyClass()) kullanırsanız, halihazırda oluşturulmuş bir nesneyi iletiyorsunuz demektir ve FastAPI bu nesneyi (varsa __call__ metodu ile birlikte) doğrudan kullanacaktır.
Class Dependencies with Parameters
Sınıf tabanlı bağımlılıkların en büyük avantajlarından biri, kurucularına parametre geçebilme yeteneğidir. Bu, yapılandırmaları veya diğer bağımlılıkları hizmet sınıfınıza enjekte etmek için mükemmeldir.
Bir API anahtarına ihtiyaç duyan bir hizmet hayal edin:
class ExternalApiService:
def __init__(self, api_key: str):
self.api_key = api_key
self.base_url = "https://api.external.com"
def __call__(self):
return f"API Service configured with key: {self.api_key}"
# In a real FastAPI app, the api_key might come from
# an environment variable or another dependency.
# Here, we simulate instantiation with different keys.
prod_api = ExternalApiService(api_key="prod_secret_123")
dev_api = ExternalApiService(api_key="dev_test_abc")
print(prod_api())
print(dev_api())Introducing Yield Dependencies
Veritabanı bağlantıları veya dosya işleyicileri gibi bazı kaynakların sadece kurulumunun yapılması değil, aynı zamanda sonrasında düzgün bir şekilde temizlenmesi de gerekir. İşte yield bağımlılıklarının (yield dependencies) devreye girdiği yer tam da burasıdır!
Bir yield bağımlılığı, endpoint çalıştırılmadan önce (kurulum) ve yanıt gönderildikten sonra (kapanış) kod çalıştırmanıza olanak tanıyan bir üreteç (generator) fonksiyonudur.
Yield for Resource Setup
Bağımlılık fonksiyonunuzdaki yield ifadesinden önceki kod, kurulum mantığı olarak çalıştırılır. yield edilen değer, uç nokta fonksiyonunuzun bağımlılık olarak alacağı değerdir.
def get_database_session():
print("DB: Establishing connection...") # Setup logic
db_session = {"id": 1, "status": "active"} # Simulate a session
yield db_session # This value is passed to the dependent function
# Teardown logic (after yield) would go here
# Simulate a function that uses the dependency
def process_data(session):
print(f"Endpoint: Processing data with session ID: {session['id']}")
# How FastAPI conceptually uses it:
# 1. Calls get_database_session()
# 2. Takes the yielded value
# 3. Passes it to process_data()
session_generator = get_database_session()
active_session = next(session_generator) # Runs setup, gets yielded value
process_data(active_session)
# FastAPI would then ensure the generator is closed, triggering teardown.Yield for Resource Teardown
yield bağımlılıklarının gücü, temizleme işlemlerini gerçekleştirme yeteneklerinden gelir. yield ifadesinden sonra yerleştirilen herhangi bir kod, istek tamamlanıp yanıt gönderildikten sonra çalışacaktır.
Bu işlem genellikle, hatalar oluşsa dahi temizliği garanti altına almak için bir try...finally bloğu içerisinde yapılır.
def get_file_handle():
print("File: Opening 'log.txt'...")
file_handle = open("log.txt", "w") # Simulate opening a file
try:
yield file_handle # Provide the file handle
finally:
print("File: Closing 'log.txt'.")
file_handle.close() # Teardown logic: close the file
# Simulate a function using the dependency
def write_log(f_handle):
f_handle.write("Lesson content generated.\n")
print("Endpoint: Wrote to log file.")
# Manual simulation of FastAPI's lifecycle:
file_generator = get_file_handle()
current_file = next(file_generator) # Setup runs
write_log(current_file)
# This step would be handled by FastAPI to trigger teardown
try:
next(file_generator) # Continues generator, runs finally block
except StopIteration:
print("Generator exhausted, teardown complete.")Combining Class-based & Yield Dependencies
Sınıf tabanlı bağımlılıkları ve yield bağımlılıklarını birlikte kullanabilirsiniz! Örneğin, sınıf tabanlı bir bağımlılık veritabanı için yapılandırma sağlarken, bir yield bağımlılığı da bu yapılandırmayı kullanarak bir veritabanı bağlantısı kurabilir ve kapatabilir.
Bu, FastAPI uygulamanız içinde son derece modüler ve sağlam bir kaynak yönetimine olanak tanır.
Quick Check
Gelişmiş bağımlılık enjeksiyonu modellerinin faydalarını ve kullanım durumlarını değerlendirin.
Lesson Summary
Harika iş çıkardın! Bu derste, FastAPI bağımlılıkları konusundaki anlayışını bir üst seviyeye taşıdın.
- Sınıf tabanlı bağımlılıklar, karmaşık mantığı düzenlemeye, durumu korumaya ve yapılandırma kabul etmeye yardımcı olur.
- Yield bağımlılıkları (üreteç fonksiyonları), hem kurulum (
yieldöncesi) hem de garantili temizlik (yieldsonrası, genellikle birfinallybloğunda) gerektiren kaynakları yönetmek için oldukça güçlüdür.
Bu kalıplar, FastAPI uygulamalarını daha sağlam, sürdürülebilir ve test edilmesi daha kolay hale getirir.
Sıkça Sorulan Sorular
“Sınıf Tabanlı ve Yield Bağımlılıkları” dersi ücretsiz mi?
Evet — “Sınıf Tabanlı ve Yield Bağımlılıkları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve FastAPI Backend Development Bootcamp kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. FastAPI Backend Development Bootcamp kursu toplamda 4 dersten oluşur.
“Sınıf Tabanlı ve Yield Bağımlılıkları” dersinde ne öğreneceğim?
Sınıfları kullanarak daha karmaşık bağımlılıklar oluşturmayı ve kurulum ile kaynak serbest bırakma mantığı için `yield` ile kaynakları yönetmeyi öğrenin. FastAPI Backend Development Bootcamp ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
FastAPI Backend Development Bootcamp öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te FastAPI Backend Development Bootcamp, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Sınıf Tabanlı ve Yield Bağımlılıkları” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu FastAPI Backend Development Bootcamp dersinde kod yazıp çalıştırabilir miyim?
Evet. Her FastAPI Backend Development Bootcamp dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- FastAPI'de Bağımlılıkları Anlama
- Yaygın Bağımlılıkları Ekleme
- Sınıf Tabanlı ve Yield Bağımlılıkları
- Genel Bağımlılıklar ve Alt Bağımlılıklar