- Bağımsız veritabanı modelleri ve doğrulama şemaları kullanılarak ayrıştırılmış bir mimarinin uygulanması.
- PostgreSQL ile üretim ortamları için eşzamansız oturumların yapılandırılması ve bağlantı yönetiminin optimize edilmesi.
- Bulutta API istikrarını sağlamak için sürekli dağıtım stratejileri ve bağımlılık yönetimi.
API geliştirme dünyasına adım atıyorsanız, doğru araç kombinasyonunu seçmenin işin yarısı olduğunu muhtemelen fark etmişsinizdir. Sağlam bir arka uç oluşturmak, sunucu ve veritabanı arasında sorunsuz bir iletişim gerektirir ve işte burada FastAPI, PostgreSQL ve SQLAlchemy üçlüsü devreye giriyor; bu kombinasyon, gücü ve esnekliğiyle standart haline gelmiştir.
Bazen, işe başlarken, tam olarak anlamadığımız daha az gelişmiş kütüphaneleri veya şablonları kullanma hatasına düşeriz; bu da geçişlerle ilgili baş ağrılarına veya garip bağlantı hatalarına yol açar. Bu nedenle, SQLAlchemy'ye odaklanmak güvenli bir tercihtir, çünkü her küçük işlem için saf SQL yazarak kendinizi yormadan verileri yönetmenizi sağlayan, kendini kanıtlamış bir ORM'dir.
Ekosistemi Anlamak: SQLAlchemy ve SQLModel

İşlemi basitleştirmek isteyenler için, FastAPI'nin aynı yazarı tarafından oluşturulan SQLModel adlı bir kütüphane mevcuttur. SQLModel'in başarısı, SQLAlchemy ve Pydantic'i tek bir araçta birleştirmesinde yatmaktadır. Bu, hem veritabanında tablo oluşturmak hem de API aracılığıyla alınan verileri doğrulamak için kullanılan bir sınıf tanımlayabileceğiniz ve böylece aynı modeli iki kez yazmaktan kaçınabileceğiniz anlamına gelir.
Bağlantı motorunu yapılandırırken, şunları anlamak çok önemlidir: motor Veritabanına giden köprüyü ayakta tutan kalptir. Hızlı testler için SQLite kullanıyorsanız, etkinleştirmeyi unutmayın. check_same_thread=FalseAncak ciddi projeler için ideal olan doğrudan şuna geçmektir: PostgreSQL Eş zamanlılık ve sağlamlık özelliklerinden yararlanmak için.
Model mimarisi: Kaostan kaçınmak

Çok sık yapılan bir hata, tüm işi tek bir sınıfa yaptırmaya çalışmaktır. Projenin büyüdükçe dağılmasını önlemenin anahtarı, sorumlulukları ayırmaktır . Disk üzerindeki tabloyu temsil eden model, kullanıcının hangi verileri gönderebileceğini veya yanıtta hangi verileri döndürmek istediğimizi tanımlayan şema ile aynı değildir.
- Tablo Modelleri: Etiketi taşıyanlar onlar.
table=TrueBirincil anahtarları, indeksleri ve SQL sütun türlerini tanımlayın. - Veri Modelleri (Şemalar): Pydantic tabanlı olarak doğrulama işlemini gerçekleştiriyorlar. Örneğin, bir model
CreateModel gizli bir alan gerektirebilir.PublicKişisel gizliliğini korumak için bunu saklıyor. - Modelleri Güncelle: İdeal olarak, tüm alanlar isteğe bağlı olmalı ve müşterinin seçim yapmasına olanak sağlamalıdır. YAMA Yalnızca değiştirmek istediğiniz verilerle.
Bunu verimli bir şekilde yönetmek için sınıf kalıtımını kullanmanız önerilir . Ortak alanlara sahip bir temel oluşturup ardından oluşturma, okuma veya güncelleme gibi belirli durumlar için bunu genişletmek, kod satırlarını azaltır ve yazım hatalarını önler.
Asenkron oturum ve bağımlılık yönetimi
FastAPI'de veritabanını yönetmenin en iyi yolu şudur: bağımlılıklarAşağıdakilerle bir fonksiyon oluşturun: yield Bu özellik, her isteğin kendi veritabanı oturumuna sahip olmasını sağlar ve yanıt tamamlandığında bu oturum otomatik olarak kapatılır. Bu, bellek sızıntılarını ve veritabanı kilitlenmelerini önler.
Modern, eşzamansız bir yaklaşımı tercih ederseniz, şunları kullanmanız gerekecektir: AsyncSession ve sürücü eşzamansızBu, API'nizin veritabanı yanıtı beklerken donmasını önleyerek performansı önemli ölçüde artırır. Ancak, Supabase gibi servisler kullanıyorsanız dikkatli olun; PgBouncer Bu durum, önceden hazırlanmış sorgularla çakışmalara neden olabilir; bu çakışmalar, SQLAlchemy motor ayarlarını sorgu önbelleklemesini devre dışı bırakacak şekilde ayarlayarak çözülebilir.
CRUD ve iş mantığının uygulanması

Kodun temiz kalması için en akıllıca yöntem, veri erişim mantığını bir dosyaya devretmektir. crud.pyBu şekilde, rotalarınız main.py Sadece HTTP protokolünü yönetiyorlar ve başka bir şey yapmayı bilmiyorlar. select o un commit veritabanında.
Kayıt oluştururken bu yöntemi kullanmak şarttır. model_dump() Pydantic'ten gelen kod, girdi verilerini SQLAlchemy'nin işleyebileceği bir sözlüğe dönüştürür. Okuma işlemleri için ise şunu kullanın: skalerler() y Seçme() Bu özellik, sonuçları verimli bir şekilde filtrelemenize ve sayfalara ayırmanıza olanak tanır ve tablonun binlerce kayda ulaşması durumunda API'nin çökmemesini sağlar.
Profesyonel dağıtım ve üretim ortamı

Uygulamanızı buluta taşımak zihniyet değişikliği gerektirir. Geliştirme sunucusu artık yeterli değil; Uvicorn ile birlikte çalışan Gunicorn gibi bir süreç yöneticisine ihtiyacınız var . Bu ikili rakipsizdir: Gunicorn süreçleri (çalışanları) yönetir ve Uvicorn, FastAPI'nin ASGI yürütülmesini üstlenir.
Railway gibi platformlar , başlatma komutunun belirtildiği bir Procfile kullanarak süreci büyük ölçüde basitleştirir . Burada kritik nokta, veritabanı URL'si için ortam değişkenlerini yönetmektir; kimlik bilgilerinizi asla GitHub deposuna yüklememelisiniz. Bunun yerine, sağlayıcınızın kontrol panelini kullanarak DATABASE_URL'yi güvenli bir şekilde ekleyin.
Veritabanı geçişlerine gelince, Tortoise ORM için Aerich gibi araçlar mevcut olsa da, sektör olgunluğu nedeniyle SQLAlchemy için Alembic'i tercih etmektedir. Alembic, veritabanı şemasındaki her değişikliği izlemeye olanak tanıyarak, üretim ortamına sorunsuz ve veri kaybı olmadan geçişi kolaylaştırır.
Doğru model ayrımı, eşzamansız oturumların kullanımı ve konteyner tabanlı dağıtımın birleşimi, uygulamanızın ölçeklenebilir olmasını sağlar. Doğrulama şemalarını tablo modelleriyle karıştırmaktan kaçınarak ve ASGI sunucusunu doğru şekilde yapılandırarak, bir hobi projesini, bağlantı hataları veya darboğazlar olmadan gerçek dünya trafiğini yönetebilen profesyonel bir araca dönüştürürsünüz.