* Update all
* 🎨 Auto format
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
11 KiB
Özellikler
FastAPI Özellikleri
FastAPI size şunları sağlar:
Açık Standartlara Dayalı
- API oluşturmada OpenAPI, buna path operasyonları, parametreler, request body'leri, güvenlik vb. deklarasyonları dahildir.
- JSON Schema ile otomatik veri modeli dokümantasyonu (OpenAPI zaten JSON Schema'ya dayanır).
- Bu standartlar etrafında, titiz bir çalışmanın ardından tasarlandı; sonradan eklenmiş bir katman değil.
- Bu sayede birçok dilde otomatik client code generation da kullanılabilir.
Otomatik Dokümantasyon
Etkileşimli API dokümantasyonu ve keşif için web arayüzleri. Framework OpenAPI’ye dayandığından, birden fazla seçenek vardır; varsayılan olarak 2’si dahildir.
- Swagger UI ile etkileşimli keşif; API’nizi tarayıcıdan doğrudan çağırıp test edin.
- ReDoc ile alternatif API dokümantasyonu.
Sadece Modern Python
Her şey standart Python type deklarasyonlarına dayanır (Pydantic sayesinde). Öğrenilecek yeni bir söz dizimi yok. Sadece standart, modern Python.
Python type’larını nasıl kullanacağınıza dair 2 dakikalık bir hatırlatmaya ihtiyacınız varsa (FastAPI kullanmasanız bile) kısa eğitime göz atın: Python Types{.internal-link target=_blank}.
Türleriyle standart Python yazarsınız:
from datetime import date
from pydantic import BaseModel
# Bir değişkeni str olarak belirt
# ve fonksiyon içinde editör desteği al
def main(user_id: str):
return user_id
# Bir Pydantic modeli
class User(BaseModel):
id: int
name: str
joined: date
Sonra şöyle kullanabilirsiniz:
my_user: User = User(id=3, name="John Doe", joined="2018-07-19")
second_user_data = {
"id": 4,
"name": "Mary",
"joined": "2018-11-30",
}
my_second_user: User = User(**second_user_data)
/// info
**second_user_data şu anlama gelir:
second_user_data dict’indeki anahtar ve değerleri doğrudan anahtar-değer argümanları olarak geç; şu ifadeye eşdeğerdir: User(id=4, name="Mary", joined="2018-11-30")
///
Editör Desteği
Tüm framework, kullanımı kolay ve sezgisel olacak şekilde tasarlandı; en iyi geliştirme deneyimini sağlamak için geliştirmeye başlamadan önce bile alınan kararlar birden çok editörde test edildi.
Python geliştirici anketlerinde açıkça görülüyor ki en çok kullanılan özelliklerden biri "otomatik tamamlama".
Tüm FastAPI bunun tatmin edilmesi üzerine kuruldu. Otomatik tamamlama her yerde çalışır.
Dokümana geri dönmeniz nadiren gerekecek.
Editörünüz şöyle yardımcı olabilir:
- Visual Studio Code ile:
- PyCharm ile:
Daha önce imkânsız olduğunu düşünebileceğiniz yerlerde bile tamamlama alırsınız. Örneğin, bir request’ten gelen (iç içe de olabilir) JSON body içindeki price anahtarı için.
Artık anahtar adlarını yanlış yazmak, dokümana gidip gelmek ya da sonunda username mi user_name mi kullandığınızı bulmak için sayfayı yukarı aşağı kaydırmak yok.
Kısa
Her şey için mantıklı varsayılanlar ve her yerde isteğe bağlı yapılandırmalar vardır. Tüm parametreler, ihtiyacınızı karşılayacak şekilde ince ayar yapılarak tanımlamak istediğiniz API’yi oluşturabilir.
Ancak varsayılan hâliyle hepsi “hemen çalışır”.
Doğrulama
-
Çoğu (veya hepsi?) Python veri tipi için doğrulama, şunlar dâhil:
- JSON nesneleri (
dict). - Eleman tipleri tanımlanan JSON dizileri (
list). - Minimum ve maksimum uzunlukları tanımlanan String (
str) alanları. - Min ve max değerleri olan sayılar (
int,float) vb.
- JSON nesneleri (
-
Daha “egzotik” tipler için doğrulama:
- URL.
- Email.
- UUID.
- ...ve diğerleri.
Tüm doğrulama köklü ve sağlam Pydantic tarafından yapılır.
Güvenlik ve Kimlik Doğrulama
Güvenlik ve kimlik doğrulama entegredir. Veritabanları veya veri modelleriyle ilgili hiçbir taviz yoktur.
OpenAPI’da tanımlanan tüm güvenlik şemaları, şunlar dâhil:
- HTTP Basic.
- OAuth2 (ayrıca JWT token’larla). Şu eğitime göz atın: OAuth2 with JWT{.internal-link target=_blank}.
- API anahtarları:
- Header’larda.
- Query parametrelerinde.
- Cookie’lerde vb.
Buna ek olarak Starlette’in tüm güvenlik özellikleri (session cookies dâhil).
Tümü, sistemleriniz, veri depolarınız, ilişkisel ve NoSQL veritabanlarınız vb. ile kolayca entegre edilebilen, yeniden kullanılabilir araçlar ve bileşenler olarak inşa edilmiştir.
Dependency Injection
FastAPI, son derece kolay kullanımlı ama son derece güçlü bir Dependency Injection sistemine sahiptir.
- Bağımlılıkların da kendi bağımlılıkları olabilir; böylece bir hiyerarşi veya bağımlılıklar "grafı" oluşur.
- Tüm süreç framework tarafından otomatik olarak yönetilir.
- Tüm bağımlılıklar, request’lerden veri talep edebilir ve path operation kısıtlarını ve otomatik dokümantasyonu zenginleştirebilir.
- Bağımlılıklarda tanımlanan path operation parametreleri için bile otomatik doğrulama.
- Karmaşık kullanıcı kimlik doğrulama sistemleri, veritabanı bağlantıları vb. için destek.
- Veritabanları, frontend’ler vb. ile taviz yok; ancak hepsiyle kolay entegrasyon.
Sınırsız "Plug-in"
Başka bir deyişle, onlara gerek yok; ihtiyaç duyduğunuz kodu import edin ve kullanın.
Her entegrasyon (bağımlılıklar ile) o kadar basit olacak şekilde tasarlanmıştır ki, uygulamanız için, path operations ile kullandığınız aynı yapı ve söz dizimiyle sadece 2 satırda bir “plug-in” yazabilirsiniz.
Test Edildi
- %100 test kapsayıcılığı.
- %100 type annotated kod tabanı.
- Üretimde kullanılan uygulamalarda kullanılıyor.
Starlette Özellikleri
FastAPI, Starlette ile tamamen uyumludur (ve onun üzerine kuruludur). Dolayısıyla elinizdeki ek Starlette kodları da çalışır.
FastAPI aslında Starlette’in bir alt sınıfıdır. Starlette’i zaten biliyor veya kullanıyorsanız, işlevlerin çoğu aynı şekilde çalışır.
FastAPI ile Starlette’in tüm özelliklerini elde edersiniz (FastAPI, steroid basılmış Starlette gibidir):
- Cidden etkileyici performans. Mevcut en hızlı Python frameworklerinden biridir; NodeJS ve Go ile aynı seviyededir.
- WebSocket desteği.
- Süreç içi arka plan görevleri.
- Başlatma ve kapatma olayları.
- HTTPX üzerine kurulu test istemcisi.
- CORS, GZip, Static Files, Streaming response’lar.
- Session ve Cookie desteği.
- %100 test kapsayıcılığı.
- %100 type annotated kod tabanı.
Pydantic Özellikleri
FastAPI, Pydantic ile tamamen uyumludur (ve onun üzerine kuruludur). Dolayısıyla elinizdeki ek Pydantic kodları da çalışır.
Pydantic’e dayanan harici kütüphaneler de dâhildir; veritabanları için ORM’ler, ODM’ler gibi.
Bu aynı zamanda, birçok durumda request’ten aldığınız nesneyi doğrudan veritabanına iletebileceğiniz anlamına gelir; zira her şey otomatik olarak doğrulanır.
Tersi yönde de geçerlidir; birçok durumda veritabanından aldığınız nesneyi doğrudan client’a gönderebilirsiniz.
FastAPI ile Pydantic’in tüm özelliklerini elde edersiniz (FastAPI, tüm veri işlemede Pydantic’e dayanır):
- Kafa karıştırmaz:
- Öğrenmeniz gereken yeni bir şema tanımlama mikro-dili yok.
- Python type’larını biliyorsanız Pydantic’i nasıl kullanacağınızı da biliyorsunuz.
- IDE/linter/beyin’inizle iyi anlaşır:
- Pydantic veri yapıları, sizin tanımladığınız sınıfların örnekleridir; bu nedenle doğrulanmış verilerinizle otomatik tamamlama, linting ve mypy sorunsuz çalışır, sezgileriniz de yol gösterir.
- Karmaşık yapıları doğrulayın:
- Hiyerarşik Pydantic modelleri, Python
typing’inListveDict’i vb. kullanımı. - Doğrulayıcılar (validators), karmaşık veri şemalarının net ve kolay şekilde tanımlanmasını, kontrol edilmesini ve JSON Schema olarak dokümante edilmesini sağlar.
- Derinlemesine iç içe JSON nesnelerine sahip olabilir, hepsinin doğrulanmasını ve anotasyonlanmasını sağlayabilirsiniz.
- Hiyerarşik Pydantic modelleri, Python
- Genişletilebilir:
- Pydantic, özel veri tiplerinin tanımlanmasına izin verir; ayrıca validator decorator’üyle bir modeldeki metodlarla doğrulamayı genişletebilirsiniz.
- %100 test kapsayıcılığı.



