FastAPI, yüksek performansı, otomatik dokümantasyonu ve güçlü tip ipuçları sayesinde Python'da API oluşturmak için hızla öne çıkan bir çerçevedir. Flask'tan geçiş yapıyor veya sıfırdan yeni bir proje başlatıyor olun, FastAPI'nin temel mekaniklerini anlamak sürdürülebilir ve ölçeklenebilir kod yazmak için esastır.
Temel Kavramlar ve Kurulum
Herhangi bir FastAPI uygulamasının temeli, `FastAPI` sınıfı örneğidir. Bu örnek, yönlendirmeleri ve yapılandırmayı yöneten ana uygulama nesnesi olarak hareket eder. Her şey için yoğun şekilde dekoratör kullanan Flask'in aksine, FastAPI istek ve yanıt şemalarını tanımlamak için standart Python tip ipuçlarından yararlanır. Bu yaklaşım, IDE'lerdeki otomatik tamamlama ve otomatik doğrulama dahil olmak üzere daha iyi araç desteği sağlar.
Başlamak için çerçeveyi ve Uvicorn gibi üretim seviyesinde bir sunucuyu kurmanız gerekir. FastAPI, ASGI (Asenkron Sunucu Ağ Geçlisi Arayüzü) uygulamalarının standart bir kütüphanesinden ibarettir ancak eşzamanlı istekleri işlemek için Uvicorn ile sorunsuz bir şekilde çalışır. Gerekli bağımlılıkları pip kullanarak kurabilirsiniz. Kurulumun ardından, HTTP istekleriniz için giriş noktası olarak hizmet verecek temel bir uygulama yapısı oluşturabilirsiniz.
Pydantic ile Veri Doğrulaması Uygulama
FastAPI'nin en büyük güçlerinden biri, Pydantic ile entegrasyonudur. Pydantic, Python tip açıklamalarını kullanarak veri modelleri tanımlamanıza olanak tanır; FastAPI bunları gelen verileri otomatik olarak doğrulamak için kullanır. Bu, bir kullanıcının beklenen bir dize yerine bir tamsayı sağladığını kontrol etmek veya bir e-posta adresinin geçerli olduğundan emin olmak için tekrarlayan kod yazmanıza gerek olmadığı anlamına gelir.
Bir Pydantic modeli tanımlayarak API'niz için bir sözleşme oluşturursunuz. Örneğin, bir kullanıcı uç noktası oluşturuyorsanız bir `UserCreate` şeması tanımlayabilirsiniz. FastAPI, isteğin JSON gövdesini otomatik olarak ayrıştıracak, şemaya göre doğrulayacak ve veri yanlışsa detaylı bir doğrulama hatası yükseltecektir. Bu, hataları azaltır ve iş mantığınızın yalnızca doğrulanmış veri türleriyle çalışmasını sağlar.
from pydantic import BaseModel, EmailStr
from typing import Optional
class UserBase(BaseModel):
username: str
email: EmailStr
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
is_active: bool = True
Bu örnekte, `EmailStr` tipi sağlanan e-postanın belirli bir regex desenine uyduğunu garanti eder. Geçersiz bir e-posta ile bir istek gelirse, FastAPI hemen net bir mesajla birlikte 422 İşlenemeyen Varlık hatası döndürerek uygulamanızın çökmesini veya kötü veriyi işlemesini engeller.
Bağımlılık Enjeksiyonu ve Gelişmiş Yönlendirme
FastAPI, hem güçlü hem de sezgisel bir bağımlılık enjeksiyonu sistemi uygular. Bağımlılıklar, uç noktanız tarafından ihtiyaç duyulan bir değer döndüren herhangi bir çağrılabilir nesnedir. Bunlar veritabanı oturumları, geçerli kullanıcı kimlik doğrulaması veya yapılandırma ayarları olabilir. Bu endişeleri ayırarak uç nokta işleyicilerinizi temiz ve iş mantığına odaklı tutarsınız.
Bir bağımlılığı basit bir işlev olarak tanımlayıp ardından rotanızda bir parametre olarak talep edebilirsiniz. FastAPI, bağımlılığın oluşturulmasını, yürütülmesini ve temizlenmesini otomatik olarak halledecektir. Örneğin, bir veritabanı oturumu sağlayan bir `get_db` bağımlılığı oluşturabilirsiniz. Bu oturum daha sonra uç noktalarınıza enjekte edilir, böylece her isteğin taze ve doğru şekilde yapılandırılmış bir veritabanı bağlantısına erişimi garanti altına alınır.
from fastapi import Depends, FastAPI
app = FastAPI()
def common_parameters(q: str = None, skip: int = 0, limit: int = 100):
return {"q": q, "skip": skip, "limit": limit}
@app.get("/items/")
def read_items(commons: dict = Depends(common_parameters)):
return commons
Bu desen yüksek düzeyde yeniden kullanılabilir. Tüm öğeyle ilgili uç noktalara yeni bir parametre eklemeniz gerekirse, yalnızca `common_parameters` işlevini güncellemeniz yeterlidir. Bu, DRY (Kendini Tekrar Etme) ilkelerini teşvik eder ve API'nizi test etmeyi ve bakımını kolaylaştırır.
Sonuç
FastAPI, REST API'leri oluşturmak için modern, verimli ve geliştirici dostu bir yaklaşım sunar. Asenkron Python'un hızını tip ipuçlarının ve Pydantic doğrulamasının güvenliğiyle birleştirerek geliştiriciler daha az kodla sağlam sistemler oluşturabilir. Swagger UI ve ReDoc aracılığıyla otomatik dokümantasyon sunan çerçeve, geliştirici deneyimini daha da artırarak test ve entegrasyonu sorunsuz hale getirir. Bu uygulamaları benimsedikçe, API'nizi bakımının ve ölçeklendirmenin önemli ölçüde daha yönetilebilir hale geldiğini göreceksiniz.