FastAPI ile Hızlı API Geliştirme: 42 Derste Ustalığa Yolculuk
Modern web geliştirme dünyasında, API’ler (Uygulama Programlama Arayüzleri) uygulamalar arasındaki iletişimi sağlayan temel taşlardır. Hızlı, güvenilir ve ölçeklenebilir API’ler oluşturmak, başarılı bir projenin olmazsa olmazıdır. İşte tam bu noktada FastAPI devreye giriyor. FastAPI, Python ile yüksek performanslı API’ler oluşturmak için modern, hızlı (yüksek performanslı) bir web framework’üdür. Bu makale serisinde, 42 derste FastAPI’nin derinliklerine inecek ve pratik örneklerle ustalaşmanızı sağlayacağız.
İçindekiler
- FastAPI Nedir? Temel Kavramlar
- Neden FastAPI? Avantajları ve Dezavantajları
- Kurulum ve Ortam Hazırlığı
- İlk API’mizi Oluşturma: ‘Hello World’
- Veri Serileştirme ve Doğrulama (Pydantic)
- Request Body Kullanımı ve Validasyonu
- Path Parametreleri ve Sorgu Parametreleri
- HTTP Durum Kodları ve İstisnalar
- Bağımlılık Yönetimi (Dependency Injection)
- Güvenlik ve Kimliklendirme (Authentication & Authorization)
- Test Yazma ve Uygulama
- Otomatik API Dokümantasyonu (Swagger UI ve ReDoc)
- Middleware Kullanımı
- CORS (Cross-Origin Resource Sharing)
- Statik Dosyalar ve Şablonlar
- Veritabanı Entegrasyonu (SQLAlchemy ve AsyncORM)
- Asenkron Programlama (async/await)
- Gelişmiş Bağımlılıklar ve Örnekler
- Arka Plan Görevleri
- Olay Yöneticisi (Events)
- WebSockets Entegrasyonu
- GraphQL ile Entegrasyon
- Gelişmiş Güvenlik Stratejileri
- Rate Limiting (Hız Sınırlaması)
- Caching Mekanizmaları
- Monitorleme ve Loglama
- API Versiyonlama
- Dokümantasyon Özelleştirme
- Performans Optimizasyonu İpuçları
- Dağıtım Yöntemleri (Docker, Heroku, AWS vb.)
- Container Orkestrasyonu (Kubernetes)
- Mikroservis Mimarisi ve FastAPI
- CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım)
- API Geçitleri (API Gateways)
- Serverless Mimariler ve FastAPI
- Gerçek Dünya Projeleri ile Pratik Uygulamalar
- FastAPI Topluluğu ve Kaynakları
- API Geliştirmede Güncel Trendler
- Sık Sorulan Sorular (SSS)
- Karşılaşılan Sorunlar ve Çözüm Önerileri
- Sonuç: FastAPI ile API Geliştirmenin Gücü
- Ek Kaynaklar
1. FastAPI Nedir? Temel Kavramlar
FastAPI, Python 3.6+ tabanlı, modern ve hızlı bir web framework’üdür. Temel amacı, geliştiricilerin hızlı, güvenilir ve ölçeklenebilir API’ler oluşturmasına yardımcı olmaktır. FastAPI, ASGI (Asynchronous Server Gateway Interface) standardını kullanarak asenkron programlama desteği sunar, bu da performansı önemli ölçüde artırır. Ayrıca, otomatik veri doğrulama, serileştirme ve interaktif API dokümantasyonu gibi özellikler sunar.
2. Neden FastAPI? Avantajları ve Dezavantajları
FastAPI’nin sunduğu avantajlar şunlardır:
- Hız: ASGI sayesinde yüksek performans ve eş zamanlılık.
- Kolay Kullanım: Basit ve sezgisel sözdizimi, hızlı öğrenme eğrisi.
- Otomatik Dokümantasyon: Swagger UI ve ReDoc ile otomatik API dokümantasyonu.
- Veri Doğrulama: Pydantic ile otomatik veri doğrulama ve serileştirme.
- Bağımlılık Yönetimi: Gelişmiş bağımlılık yönetimi sistemi.
- Standardizasyon: OpenAPI ve JSON Schema standartlarına uyum.
Dezavantajları ise şunlar olabilir:
- Yeni Teknoloji: Diğer popüler framework’lere göre daha yeni olması, topluluk desteğinin henüz tam olgunlaşmaması.
- Öğrenme Eğrisi: Asenkron programlama ve Pydantic gibi kavramlara aşina olmayanlar için başlangıçta zorlayıcı olabilir.
3. Kurulum ve Ortam Hazırlığı
FastAPI’yi kullanmaya başlamak için öncelikle Python 3.6 veya üzeri bir sürümün kurulu olduğundan emin olun. Ardından, aşağıdaki komutları kullanarak gerekli paketleri yükleyin:
pip install fastapi uvicorn
fastapi
, FastAPI framework’ünün kendisidir. uvicorn
ise ASGI sunucusudur ve FastAPI uygulamalarını çalıştırmak için gereklidir.
4. İlk API’mizi Oluşturma: ‘Hello World’
Aşağıdaki kodu main.py
adlı bir dosyaya kaydedin:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
Ardından, aşağıdaki komutu kullanarak uygulamayı çalıştırın:
uvicorn main:app --reload
Bu komut, uygulamayı 8000 portunda başlatacaktır. Tarayıcınızda http://localhost:8000 adresine giderek API’nizi test edebilirsiniz. “{\”Hello\”: \”World\”}” çıktısını görmelisiniz.
5. Veri Serileştirme ve Doğrulama (Pydantic)
Pydantic, Python’da veri doğrulama ve serileştirme için kullanılan bir kütüphanedir. FastAPI, Pydantic ile entegre çalışarak API’lerinizde veri girişlerini ve çıktılarını kolayca doğrulamanızı sağlar.
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: str | None = None
price: float
tax: float | None = None
@app.post("/items/")
async def create_item(item: Item):
return item
Bu örnekte, Item
adlı bir Pydantic modeli tanımladık. Bu model, API’ye gönderilen verilerin name
, description
, price
ve tax
alanlarını içermesini bekler. FastAPI, bu modeli kullanarak gelen verileri otomatik olarak doğrulayacak ve hatalı verileri reddedecektir.
6. Request Body Kullanımı ve Validasyonu
Önceki örnekte Item
modeli kullanarak request body’sini nasıl doğrulayacağımızı gördük. FastAPI, request body’sindeki verilerin doğru formatta olduğundan emin olmak için Pydantic modellerini kullanır.
7. Path Parametreleri ve Sorgu Parametreleri
Path parametreleri, URL’nin bir parçası olarak gönderilen parametrelerdir. Sorgu parametreleri ise URL’nin sonuna eklenen parametrelerdir.
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str | None = None):
return {"item_id": item_id, "q": q}
Bu örnekte, item_id
bir path parametresidir ve URL’nin bir parçası olarak gönderilir. q
ise bir sorgu parametresidir ve URL’nin sonuna ?q=değer
şeklinde eklenir.
8. HTTP Durum Kodları ve İstisnalar
HTTP durum kodları, sunucunun isteğe nasıl yanıt verdiğini gösteren kodlardır. FastAPI, HTTP durum kodlarını kolayca yönetmenizi ve özel istisnalar oluşturmanızı sağlar.
from fastapi import FastAPI, HTTPException
app = FastAPI()
items = {"foo": "The Foo Wrestlers"}
@app.get("/items/{item_id}")
async def read_item(item_id: str):
if item_id not in items:
raise HTTPException(status_code=404, detail="Item not found")
return {"item": items[item_id]}
Bu örnekte, eğer item_id
listede yoksa, 404 HTTP durum kodu ile bir HTTPException
oluşturulur.
9. Bağımlılık Yönetimi (Dependency Injection)
FastAPI, gelişmiş bir bağımlılık yönetimi sistemine sahiptir. Bağımlılık yönetimi, kodunuzun daha modüler, test edilebilir ve bakımı kolay olmasını sağlar.
from fastapi import FastAPI, Depends
app = FastAPI()
async def common_parameters(q: str | None = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
async def read_items(commons: dict = Depends(common_parameters)):
return commons
Bu örnekte, common_parameters
adlı bir bağımlılık tanımladık. Bu bağımlılık, read_items
fonksiyonuna enjekte edilir. Bu sayede, read_items
fonksiyonu, q
, skip
ve limit
parametrelerine kolayca erişebilir.
10. Güvenlik ve Kimliklendirme (Authentication & Authorization)
FastAPI, API’lerinizi güvenli hale getirmek için çeşitli kimliklendirme ve yetkilendirme yöntemlerini destekler. Örneğin, OAuth2, JWT (JSON Web Token) ve API anahtarları gibi yöntemleri kullanabilirsiniz.
11. Test Yazma ve Uygulama
Test yazmak, uygulamanızın doğru çalıştığından emin olmanın en iyi yoludur. FastAPI, test yazmayı kolaylaştırmak için çeşitli araçlar ve yöntemler sunar. Örneğin, pytest
ve httpx
gibi kütüphaneleri kullanarak testlerinizi yazabilirsiniz.
12. Otomatik API Dokümantasyonu (Swagger UI ve ReDoc)
FastAPI, otomatik olarak interaktif API dokümantasyonu oluşturur. Swagger UI ve ReDoc, API’nizi keşfetmek ve test etmek için kullanabileceğiniz iki farklı arayüz sunar.
Uygulamanızı çalıştırdıktan sonra, tarayıcınızda http://localhost:8000/docs adresine giderek Swagger UI’yi ve http://localhost:8000/redoc adresine giderek ReDoc’u görüntüleyebilirsiniz.
13. Middleware Kullanımı
Middleware, gelen ve giden isteklere müdahale etmek için kullanılan bileşenlerdir. FastAPI, middleware’leri kolayca tanımlamanızı ve uygulamanıza entegre etmenizi sağlar. Örneğin, her isteği loglamak veya kimlik doğrulama işlemlerini gerçekleştirmek için middleware kullanabilirsiniz.
14. CORS (Cross-Origin Resource Sharing)
CORS, web tarayıcılarının farklı kaynaklardan gelen isteklere izin verme veya reddetme mekanizmasıdır. FastAPI, CORS ayarlarını kolayca yapılandırmanızı sağlar.
15. Statik Dosyalar ve Şablonlar
FastAPI, statik dosyaları (örneğin, CSS, JavaScript, resimler) ve şablonları (örneğin, HTML) sunmanızı sağlar. Bu sayede, API’nizle birlikte statik içerikleri de kolayca yönetebilirsiniz.
16. Veritabanı Entegrasyonu (SQLAlchemy ve AsyncORM)
FastAPI, SQLAlchemy ve AsyncORM gibi popüler veritabanı araçlarıyla entegre çalışır. Bu sayede, veritabanı işlemlerinizi kolayca yönetebilir ve verilerinizi güvenli bir şekilde saklayabilirsiniz.
17. Asenkron Programlama (async/await)
FastAPI, asenkron programlama desteği sunar. async
ve await
anahtar kelimelerini kullanarak, uzun süren işlemleri (örneğin, veritabanı sorguları, ağ istekleri) bloklamadan gerçekleştirebilirsiniz. Bu, uygulamanızın performansını önemli ölçüde artırır.
18. Gelişmiş Bağımlılıklar ve Örnekler
FastAPI’nin bağımlılık yönetimi sistemi, daha karmaşık senaryoları da destekler. Örneğin, bağımlılıkları zincirleme bağlayabilir veya koşullu bağımlılıklar tanımlayabilirsiniz.
19. Arka Plan Görevleri
FastAPI, arka planda çalıştırılması gereken görevleri kolayca yönetmenizi sağlar. Örneğin, e-posta gönderme, veri işleme veya loglama gibi işlemleri arka plan görevleri olarak tanımlayabilirsiniz.
20. Olay Yöneticisi (Events)
FastAPI, olay yöneticisi kullanarak uygulamanızdaki olaylara tepki vermenizi sağlar. Örneğin, bir kullanıcı oluşturulduğunda veya bir dosya yüklendiğinde belirli işlemleri tetikleyebilirsiniz.
21. WebSockets Entegrasyonu
FastAPI, WebSockets protokolünü destekler. WebSockets, gerçek zamanlı iletişim gerektiren uygulamalar için idealdir (örneğin, sohbet uygulamaları, oyunlar). FastAPI ile WebSockets entegrasyonu oldukça kolaydır.
22. GraphQL ile Entegrasyon
FastAPI, GraphQL ile entegre edilebilir. GraphQL, API’nizden hangi verileri istediğinizi belirtmenizi sağlayan bir sorgu dilidir. Bu, gereksiz veri transferini önler ve performansı artırır.
23. Gelişmiş Güvenlik Stratejileri
FastAPI, API’lerinizi daha güvenli hale getirmek için çeşitli güvenlik stratejileri sunar. Örneğin, CORS, CSRF (Cross-Site Request Forgery) ve XSS (Cross-Site Scripting) gibi saldırılara karşı önlemler alabilirsiniz.
24. Rate Limiting (Hız Sınırlaması)
Rate limiting, API’nize yapılan istek sayısını sınırlamanızı sağlar. Bu, kötü niyetli kullanıcılardan veya aşırı kullanımdan kaynaklanan performansı düşüşlerini önler.
25. Caching Mekanizmaları
Caching, sık erişilen verileri geçici olarak saklayarak API’nizin performansını artırmanıza yardımcı olur. FastAPI, çeşitli caching mekanizmalarını destekler.
26. Monitorleme ve Loglama
Uygulamanızın performansını izlemek ve hataları tespit etmek için monitorleme ve loglama önemlidir. FastAPI, çeşitli monitorleme ve loglama araçlarıyla entegre edilebilir.
27. API Versiyonlama
API’nizde değişiklikler yaptığınızda, eski sürümleri desteklemek ve yeni sürümleri yayınlamak için API versiyonlama kullanmanız gerekebilir. FastAPI, API versiyonlamayı kolayca yönetmenizi sağlar.
28. Dokümantasyon Özelleştirme
FastAPI’nin otomatik olarak oluşturduğu API dokümantasyonunu özelleştirebilirsiniz. Örneğin, açıklamalar ekleyebilir, örnek istekler ve yanıtlar sağlayabilir veya dokümantasyonun görünümünü değiştirebilirsiniz.
29. Performans Optimizasyonu İpuçları
FastAPI uygulamanızın performansını artırmak için çeşitli optimizasyon ipuçları ve teknikleri kullanabilirsiniz. Örneğin, veritabanı sorgularını optimize edebilir, caching kullanabilir veya asenkron programlamayı etkin bir şekilde kullanabilirsiniz.
30. Dağıtım Yöntemleri (Docker, Heroku, AWS vb.)
FastAPI uygulamanızı çeşitli platformlarda dağıtabilirsiniz. Örneğin, Docker kullanarak konteynerize edebilir, Heroku’da veya AWS’de barındırabilirsiniz.
31. Container Orkestrasyonu (Kubernetes)
Container orkestrasyonu, konteynerize edilmiş uygulamaların dağıtımını, ölçeklenmesini ve yönetimini kolaylaştırır. Kubernetes, en popüler container orkestrasyon platformlarından biridir. FastAPI uygulamanızı Kubernetes üzerinde kolayca çalıştırabilirsiniz.
32. Mikroservis Mimarisi ve FastAPI
Mikroservis mimarisi, bir uygulamayı küçük, bağımsız hizmetlere bölmeyi amaçlar. FastAPI, mikroservisler oluşturmak için ideal bir framework’tür.
33. CI/CD (Sürekli Entegrasyon/Sürekli Dağıtım)
CI/CD, kod değişikliklerinizi otomatik olarak test etme, entegre etme ve dağıtma sürecidir. FastAPI uygulamanız için CI/CD pipeline’ları oluşturarak, yazılım geliştirme sürecinizi hızlandırabilir ve kalitesini artırabilirsiniz.
34. API Geçitleri (API Gateways)
API geçitleri, API’nizin önünde duran ve istekleri yönlendiren, kimlik doğrulayan, rate limiting uygulayan ve diğer çeşitli görevleri gerçekleştiren bir bileşendir.
35. Serverless Mimariler ve FastAPI
Serverless mimariler, sunucu yönetimini ortadan kaldırır ve sadece kullandığınız kaynaklar için ödeme yapmanızı sağlar. FastAPI, serverless fonksiyonlar olarak çalıştırılabilir.
36. Gerçek Dünya Projeleri ile Pratik Uygulamalar
FastAPI’yi kullanarak çeşitli gerçek dünya projeleri geliştirebilirsiniz. Örneğin, bir e-ticaret API’si, bir blog API’si veya bir sosyal medya API’si oluşturabilirsiniz.
37. FastAPI Topluluğu ve Kaynakları
FastAPI’nin geniş ve aktif bir topluluğu vardır. Sorularınızı sormak, yardım almak veya katkıda bulunmak için çeşitli topluluk kaynaklarını kullanabilirsiniz (örneğin, GitHub, Stack Overflow, Discord).
38. API Geliştirmede Güncel Trendler
API geliştirme dünyası sürekli değişiyor ve gelişiyor. Güncel trendleri takip ederek, API’lerinizi daha modern, güvenli ve performanslı hale getirebilirsiniz.
39. Sık Sorulan Sorular (SSS)
FastAPI ile ilgili sık sorulan soruların cevaplarını bulabileceğiniz bir bölüm.
40. Karşılaşılan Sorunlar ve Çözüm Önerileri
FastAPI kullanırken karşılaşabileceğiniz sorunlar ve bu sorunlara yönelik çözüm önerileri.
41. Sonuç: FastAPI ile API Geliştirmenin Gücü
FastAPI’nin sunduğu avantajlar ve API geliştirme sürecine katkıları özetlenir.
42. Ek Kaynaklar
FastAPI hakkında daha fazla bilgi edinmek için kullanabileceğiniz ek kaynaklar (örneğin, resmi dokümantasyon, blog yazıları, video eğitimleri).