FastAPI ile Uvicorn’u Çalıştırma: Detaylı Rehber
Modern web geliştirme dünyasında, hızlı ve verimli API’ler oluşturmak her zamankinden daha önemli hale geldi. Python ekosisteminde bu ihtiyaca cevap veren popüler araçlardan biri FastAPI’dir. FastAPI, modern standartlara uygun, yüksek performanslı ve kolay kullanımlı API’ler oluşturmak için tasarlanmıştır. Ancak, FastAPI’nin gücünden tam olarak yararlanmak için onu doğru bir şekilde çalıştırmak ve yönetmek gerekir. İşte bu noktada Uvicorn devreye giriyor.
İçindekiler
- FastAPI Nedir?
- Uvicorn Nedir?
- Uvicorn ve FastAPI Entegrasyonu
- Uvicorn Kurulumu
- Basit bir FastAPI Uygulaması Oluşturma
- Uvicorn ile FastAPI Uygulamasını Çalıştırma
- Gelişmiş Uvicorn Konfigürasyonu
- Uvicorn ile Performans Optimizasyonu
- Uvicorn Hatalarını Giderme
- Uvicorn Alternatifleri
- Sonuç
1. FastAPI Nedir?
FastAPI, Python 3.7+ üzerinde, standart Python tipi ipuçlarını kullanarak API’ler oluşturmak için modern, hızlı (yüksek performanslı), web çerçevesidir. Temel özellikleri şunlardır:
- Hızlı: Yüksek performanslı, NodeJS ve Go ile yarışabilir.
- Kod Yazımı Kolaylığı: Geliştirici verimliliğini artırır, hata oranını azaltır.
- Standartlara Uygun: OpenAPI ve JSON Schema gibi açık standartları destekler.
- Otomatik Dokümantasyon: Swagger UI ve ReDoc ile otomatik API dokümantasyonu sağlar.
2. Uvicorn Nedir?
Uvicorn, ASGI (Asynchronous Server Gateway Interface) uyumlu, yıldırım hızında bir web sunucusudur. ASGI, asenkron Python web uygulamaları için standart bir arayüz sağlar. Uvicorn, asyncio ve uvloop kütüphanelerini kullanarak yüksek performans ve eşzamanlılık sunar.
3. Uvicorn ve FastAPI Entegrasyonu
FastAPI, ASGI uyumlu olduğundan, Uvicorn ile mükemmel bir şekilde entegre olur. Uvicorn, FastAPI uygulamalarını çalıştırmak için önerilen web sunucusudur. Bu ikili, yüksek performanslı ve ölçeklenebilir API’ler oluşturmak için ideal bir kombinasyon sunar.
4. Uvicorn Kurulumu
Uvicorn’u kurmak oldukça basittir. Pip paket yöneticisini kullanarak kolayca kurabilirsiniz:
pip install uvicorn
5. Basit bir FastAPI Uygulaması Oluşturma
Öncelikle FastAPI’yi kurmanız gerekecek:
pip install fastapi
Ardından, basit bir FastAPI uygulaması oluşturabilirsiniz. Aşağıdaki kodu main.py
dosyasına kaydedin:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
6. Uvicorn ile FastAPI Uygulamasını Çalıştırma
Uygulamayı çalıştırmak için aşağıdaki komutu kullanın:
uvicorn main:app --reload
Burada:
main
: FastAPI uygulamasının bulunduğu Python dosyasının adıdır (main.py
).app
: FastAPI uygulamasının adıdır (app = FastAPI()
).--reload
: Kodda değişiklik yapıldığında sunucuyu otomatik olarak yeniden başlatır. Geliştirme ortamı için kullanışlıdır.
Bu komut çalıştırıldığında, Uvicorn sunucusu 8000 portunda (varsayılan) çalışmaya başlayacaktır. Tarayıcınızda http://localhost:8000 adresine giderek uygulamayı test edebilirsiniz.
7. Gelişmiş Uvicorn Konfigürasyonu
Uvicorn, çeşitli konfigürasyon seçenekleri sunar. Bunlardan bazıları şunlardır:
--host
: Sunucunun dinleyeceği IP adresi.--port
: Sunucunun dinleyeceği port numarası.--workers
: Çalıştırılacak worker (işçi) sayısı. Çok çekirdekli işlemcilerde performansı artırabilir.--log-level
: Loglama seviyesi (info
,debug
,warning
,error
,critical
).--ssl-keyfile
: SSL anahtar dosyasının yolu. HTTPS için gereklidir.--ssl-certfile
: SSL sertifika dosyasının yolu. HTTPS için gereklidir.
Örneğin, sunucuyu 8080 portunda ve 4 worker ile çalıştırmak için aşağıdaki komutu kullanabilirsiniz:
uvicorn main:app --port 8080 --workers 4
8. Uvicorn ile Performans Optimizasyonu
Uvicorn’un performansını artırmak için aşağıdaki ipuçlarını göz önünde bulundurabilirsiniz:
- Worker Sayısını Ayarlayın: İşlemcinizin çekirdek sayısına uygun bir worker sayısı belirleyin. Genellikle çekirdek sayısı + 1 iyi bir başlangıç noktasıdır.
- uvloop Kullanın: uvloop, asyncio için daha hızlı bir event loop implementasyonudur. Uvicorn varsayılan olarak asyncio kullanır, ancak uvloop’u manuel olarak etkinleştirebilirsiniz.
- Gzip Sıkıştırmasını Etkinleştirin: Gzip sıkıştırması, sunucudan istemciye gönderilen verilerin boyutunu azaltarak performansı artırır.
- Statik Dosyaları Servis Etmek için CDN Kullanın: Statik dosyaları (resimler, CSS, JavaScript) bir CDN üzerinden servis etmek, sunucunuz üzerindeki yükü azaltır ve performansı artırır.
9. Uvicorn Hatalarını Giderme
Uvicorn kullanırken karşılaşabileceğiniz bazı yaygın hatalar ve çözümleri şunlardır:
- “ModuleNotFoundError: No module named ‘main'” Hatası: Bu hata, Uvicorn’un belirttiğiniz Python dosyasını bulamadığı anlamına gelir. Dosya adını ve yolunu doğru yazdığınızdan emin olun.
- “AttributeError: ‘FastAPI’ object has no attribute ‘…'” Hatası: Bu hata, FastAPI uygulamanızda bir hata olduğu anlamına gelir. Hata mesajını dikkatlice inceleyin ve kodunuzdaki hataları düzeltin.
- “Address already in use” Hatası: Bu hata, belirtilen portun başka bir uygulama tarafından kullanıldığı anlamına gelir. Farklı bir port numarası kullanmayı deneyin veya mevcut uygulamayı kapatın.
10. Uvicorn Alternatifleri
Uvicorn, FastAPI uygulamalarını çalıştırmak için en popüler seçenek olsa da, bazı alternatifler de mevcuttur:
- Gunicorn: Gunicorn, WSGI uyumlu bir web sunucusudur. FastAPI uygulamalarını çalıştırmak için kullanılabilir, ancak Uvicorn kadar performanslı değildir.
- Hypercorn: Hypercorn, ASGI uyumlu bir web sunucusudur. Uvicorn’a benzer özellikler sunar ve FastAPI uygulamaları için kullanılabilir.
11. Sonuç
FastAPI ve Uvicorn, modern web geliştirme için güçlü bir kombinasyon sunar. FastAPI, hızlı ve kolay bir şekilde API’ler oluşturmanıza olanak tanırken, Uvicorn bu API’leri yüksek performansla çalıştırmanızı sağlar. Bu rehberde, Uvicorn’u kurmayı, FastAPI uygulamalarını çalıştırmayı, gelişmiş konfigürasyon seçeneklerini kullanmayı ve performansı optimize etmeyi öğrendiniz. Artık bu bilgileri kullanarak kendi yüksek performanslı API’lerinizi oluşturmaya başlayabilirsiniz.