FastAPI¶
🌐 Yapay Zekâ ve İnsanlar Tarafından Çeviri
Bu çeviri, insanlar tarafından yönlendirilen bir yapay zekâ ile oluşturuldu. 🤝
Orijinal anlamın yanlış anlaşılması ya da kulağa doğal gelmeme gibi hatalar içerebilir. 🤖
Yapay zekâ LLM'ini daha iyi yönlendirmemize yardımcı olarak bu çeviriyi iyileştirebilirsiniz.
FastAPI framework, yüksek performanslı, öğrenmesi kolay, kodlaması hızlı, production'a hazır
Dokümantasyon:https://fastapi.tiangolo.com
Kaynak Kod:https://github.com/fastapi/fastapi
FastAPI, Python'un standart type hints'lerine dayalı olarak Python ile API'lar oluşturmak için kullanılan modern ve hızlı (yüksek performanslı) bir web framework'üdür.
Temel özellikleri şunlardır:
- Hızlı: Çok yüksek performanslı,NodeJS veGo ile eşit düzeyde (Starlette ve Pydantic sayesinde).Mevcut en hızlı Python framework'lerinden biri.
- Kodlaması Hızlı: Özellik geliştirme hızını yaklaşık %200 ile %300 aralığında artırır. *
- Daha az hata: İnsan (geliştirici) kaynaklı hataları yaklaşık %40 azaltır. *
- Sezgisel: Harika bir editör desteği. Her yerdeTamamlama. Hata ayıklamaya daha az zaman.
- Kolay: Kullanımı ve öğrenmesi kolay olacak şekilde tasarlandı. Doküman okumaya daha az zaman.
- Kısa: Kod tekrarını minimize eder. Her parametre tanımından birden fazla özellik. Daha az hata.
- Sağlam: Production'a hazır kod elde edersiniz. Otomatik etkileşimli dokümantasyon ile birlikte.
- Standardlara dayalı: API'lar için açık standartlara dayalıdır (ve tamamen uyumludur);OpenAPI (önceden Swagger olarak biliniyordu) veJSON Schema.
* tahmin, production uygulamalar geliştiren dahili bir geliştirme ekibinin yaptığı testlere dayanmaktadır.
Sponsorlar¶
Keystone Sponsor¶
Gold and Silver Sponsors¶
Görüşler¶
"[...] BugünlerdeFastAPI'ı çok fazla kullanıyorum. [...] Aslında bunu ekibiminMicrosoft'taki ML servislerinin tamamında kullanmayı planlıyorum. Bunlardan bazıları anaWindows ürününe ve bazıOffice ürünlerine entegre ediliyor."
"predictions almak için sorgulanabilecek birREST server oluşturmak amacıylaFastAPI kütüphanesini benimsedik. [Ludwig için]"
"Netflix,kriz yönetimi orkestrasyon framework'ümüz:Dispatch'in open-source sürümünü duyurmaktan memnuniyet duyar! [FastAPI ile geliştirildi]"
"FastAPI için ayın üzerindeymişcesine heyecanlıyım. Çok eğlenceli!"
"Dürüst olmak gerekirse, inşa ettiğiniz şey gerçekten sağlam ve profesyonel görünüyor. Birçok açıdan,Hug'ın olmasını istediğim şey tam da bu - böyle bir şeyi inşa eden birini görmek gerçekten ilham verici."
"REST API'lar geliştirmek içinmodern bir framework öğrenmek istiyorsanız,FastAPI'a bir göz atın [...] Hızlı, kullanımı ve öğrenmesi kolay [...]"
"API'larımız içinFastAPI'a geçtik [...] Bence hoşunuza gidecek [...]"
"Production'da Python API geliştirmek isteyen herkeseFastAPI'ı şiddetle tavsiye ederim.Harika tasarlanmış,kullanımı kolay veyüksek ölçeklenebilir; API-first geliştirme stratejimizinkilit bir bileşeni haline geldi ve Virtual TAC Engineer gibi birçok otomasyon ve servise güç veriyor."
FastAPI mini belgeseli¶
2025'in sonunda yayınlanan birFastAPI mini belgeseli var, online olarak izleyebilirsiniz:
CLI'ların FastAPI'ı:Typer¶
Web API yerine terminalde kullanılacak birCLI uygulaması geliştiriyorsanızTyper'a göz atın.
Typer, FastAPI'ın küçük kardeşi. Ve hedefi CLI'larınFastAPI'ı olmak. ⌨️ 🚀
Gereksinimler¶
FastAPI iki devin omuzları üstünde duruyor:
Kurulum¶
Birvirtual environment oluşturup etkinleştirelim ve ardından FastAPI'ı yükleyelim:
$pipinstall"fastapi[standard]"---> 100%Not: Tüm terminallerde çalıştığından emin olmak için"fastapi[standard]" ifadesini tırnak içinde yazdığınızdan emin olun.
Örnek¶
Oluşturalım¶
Şu içeriklemain.py adında bir dosya oluşturalım:
fromfastapiimportFastAPIapp=FastAPI()@app.get("/")defread_root():return{"Hello":"World"}@app.get("/items/{item_id}")defread_item(item_id:int,q:str|None=None):return{"item_id":item_id,"q":q}Ya daasync def kullanalım...
Eğer kodunuzasync /await kullanıyorsa,async def kullanın:
fromfastapiimportFastAPIapp=FastAPI()@app.get("/")asyncdefread_root():return{"Hello":"World"}@app.get("/items/{item_id}")asyncdefread_item(item_id:int,q:str|None=None):return{"item_id":item_id,"q":q}Not:
Eğer bilmiyorsanız, dokümanlardakiasync veawait hakkında"Aceleniz mi var?" bölümüne bakın.
Çalıştıralım¶
Sunucuyu şu komutla çalıştıralım:
$fastapidevmain.py ╭────────── FastAPI CLI - Development mode ───────────╮ │ │ │ Serving at: http://127.0.0.1:8000 │ │ │ │ API docs: http://127.0.0.1:8000/docs │ │ │ │ Running in development mode, for production use: │ │ │ │ fastapi run │ │ │ ╰─────────────────────────────────────────────────────╯INFO: Will watch for changes in these directories: ['/home/user/code/awesomeapp']INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)INFO: Started reloader process [2248755] using WatchFilesINFO: Started server process [2248757]INFO: Waiting for application startup.INFO: Application startup complete.fastapi dev main.py komutu hakkında...
fastapi dev komutu,main.py dosyanızı okur, içindekiFastAPI uygulamasını algılar veUvicorn kullanarak bir server başlatır.
Varsayılan olarakfastapi dev, local geliştirme için auto-reload etkin şekilde başlar.
Daha fazla bilgi içinFastAPI CLI dokümantasyonu'nu okuyabilirsiniz.
Kontrol Edelim¶
Tarayıcınızda şu bağlantıyı açın:http://127.0.0.1:8000/items/5?q=somequery.
Şu JSON response'unu göreceksiniz:
{"item_id":5,"q":"somequery"}Artık şunları yapan bir API oluşturdunuz:
/ve/items/{item_id}path'lerinde HTTP request'leri alır.- Her ikipath de
GEToperasyonlarını (HTTPmethod'ları olarak da bilinir) kabul eder. /items/{item_id}path'i,intolması gerekenitem_idadlı birpath parameter'a sahiptir./items/{item_id}path'i, opsiyonelstrbirquery parameter olanq'ya sahiptir.
Etkileşimli API dokümantasyonu¶
Şimdihttp://127.0.0.1:8000/docs adresine gidin.
Otomatik etkileşimli API dokümantasyonunu göreceksiniz (Swagger UI tarafından sağlanır):

Alternatif API dokümantasyonu¶
Ve şimdihttp://127.0.0.1:8000/redoc adresine gidin.
Alternatif otomatik dokümantasyonu göreceksiniz (ReDoc tarafından sağlanır):

Örneği Güncelleyelim¶
Şimdimain.py dosyasını,PUT request'iyle gelen bir body alacak şekilde değiştirelim.
Body'yi Pydantic sayesinde standart Python tiplerini kullanarak tanımlayalım.
fromfastapiimportFastAPIfrompydanticimportBaseModelapp=FastAPI()classItem(BaseModel):name:strprice:floatis_offer:bool|None=None@app.get("/")defread_root():return{"Hello":"World"}@app.get("/items/{item_id}")defread_item(item_id:int,q:str|None=None):return{"item_id":item_id,"q":q}@app.put("/items/{item_id}")defupdate_item(item_id:int,item:Item):return{"item_name":item.name,"item_id":item_id}fastapi dev server'ı otomatik olarak yeniden yüklemelidir.
Etkileşimli API dokümantasyonu güncellemesi¶
Şimdihttp://127.0.0.1:8000/docs adresine gidin.
- Etkileşimli API dokümantasyonu, yeni body dahil olacak şekilde otomatik olarak güncellenecek:

- "Try it out" butonuna tıklayın; parametreleri doldurmanıza ve API ile doğrudan etkileşime girmenize olanak sağlar:

- Sonra "Execute" butonuna tıklayın; kullanıcı arayüzü API'nız ile iletişim kuracak, parametreleri gönderecek, sonuçları alacak ve ekranda gösterecek:

Alternatif API dokümantasyonu güncellemesi¶
Ve şimdihttp://127.0.0.1:8000/redoc adresine gidin.
- Alternatif dokümantasyon da yeni query parameter ve body'yi yansıtacak:

Özet¶
Özetle, parametrelerin, body'nin vb. type'larını fonksiyon parametreleri olarakbir kere tanımlarsınız.
Bunu standart modern Python tipleriyle yaparsınız.
Yeni bir syntax, belirli bir kütüphanenin method'larını ya da class'larını vb. öğrenmeniz gerekmez.
Sadece standartPython.
Örneğin birint için:
item_id:intya da daha karmaşık birItem modeli için:
item:Item...ve bu tek tanımla şunları elde edersiniz:
- Şunlar dahil editör desteği:
- Completion.
- Type kontrolleri.
- Verinin doğrulanması:
- Veri geçersiz olduğunda otomatik ve anlaşılır hatalar.
- Çok derin iç içe JSON nesneleri için bile doğrulama.
- Girdi verisininDönüşümü: network'ten gelen veriyi Python verisine ve type'larına çevirir. Şunlardan okur:
- JSON.
- Path parameter'lar.
- Query parameter'lar.
- Cookie'ler.
- Header'lar.
- Form'lar.
- File'lar.
- Çıktı verisininDönüşümü: Python verisini ve type'larını network verisine çevirir (JSON olarak):
- Python type'larını dönüştürür (
str,int,float,bool,list, vb.). datetimenesneleri.UUIDnesneleri.- Veritabanı modelleri.
- ...ve daha fazlası.
- Python type'larını dönüştürür (
- 2 alternatif kullanıcı arayüzü dahil otomatik etkileşimli API dokümantasyonu:
- Swagger UI.
- ReDoc.
Önceki kod örneğine dönersek,FastAPI şunları yapacaktır:
GETvePUTrequest'leri için path'teitem_idolduğunu doğrular.GETvePUTrequest'leri içinitem_id'nin type'ınınintolduğunu doğrular.- Değilse, client faydalı ve anlaşılır bir hata görür.
GETrequest'leri içinqadlı opsiyonel bir query parameter olup olmadığını kontrol eder (http://127.0.0.1:8000/items/foo?q=somequeryörneğindeki gibi).qparametresi= Noneile tanımlandığı için opsiyoneldir.Noneolmasaydı zorunlu olurdu (tıpkıPUTörneğindeki body gibi).
/items/{item_id}'ye yapılanPUTrequest'leri için body'yi JSON olarak okur:strolması gereken, zorunlunamealanı olduğunu kontrol eder.floatolması gereken, zorunlupricealanı olduğunu kontrol eder.- Varsa,
boololması gereken opsiyonelis_offeralanını kontrol eder. - Bunların hepsi çok derin iç içe JSON nesneleri için de çalışır.
- JSON'a ve JSON'dan dönüşümü otomatik yapar.
- Her şeyi OpenAPI ile dokümante eder; bu dokümantasyon şunlar tarafından kullanılabilir:
- Etkileşimli dokümantasyon sistemleri.
- Birçok dil için otomatik client kodu üretim sistemleri.
- 2 etkileşimli dokümantasyon web arayüzünü doğrudan sunar.
Daha yolun başındayız, ama bunun nasıl çalıştığı hakkında fikri kaptınız.
Şu satırı değiştirmeyi deneyin:
return{"item_name":item.name,"item_id":item_id}...şundan:
..."item_name":item.name......şuna:
..."item_price":item.price......ve editörünüzün alanları otomatik tamamladığını ve type'larını bildiğini görün:

Daha fazla özellik içeren daha kapsamlı bir örnek içinÖğretici - Kullanıcı Rehberi'ne bakın.
Spoiler alert: öğretici - kullanıcı rehberi şunları içerir:
- parameter'ların farklı yerlerden:header'lar,cookie'ler,form alanları vefile'lar olarak tanımlanması.
maximum_lengthya daregexgibidoğrulama kısıtlamalarının nasıl ayarlanacağı.- Çok güçlü ve kullanımı kolay birBağımlılık Enjeksiyonu sistemi.
- JWT tokens veHTTP Basic auth ileOAuth2 desteği dahil güvenlik ve kimlik doğrulama.
- Çok derin iç içe JSON modelleri tanımlamak için daha ileri (ama aynı derecede kolay) teknikler (Pydantic sayesinde).
- Strawberry ve diğer kütüphaneler ileGraphQL entegrasyonu.
- Starlette sayesinde gelen birçok ek özellik:
- WebSockets
- HTTPX ve
pytesttabanlı aşırı kolay testler - CORS
- Cookie Sessions
- ...ve daha fazlası.
Uygulamanızı deploy edin (opsiyonel)¶
İsterseniz FastAPI uygulamanızıFastAPI Cloud'a deploy edebilirsiniz; eğer henüz yapmadıysanız gidip bekleme listesine katılın. 🚀
Zaten birFastAPI Cloud hesabınız varsa (bekleme listesinden sizi davet ettiysek 😉), uygulamanızı tek bir komutla deploy edebilirsiniz.
Deploy etmeden önce, giriş yaptığınızdan emin olun:
$fastapiloginYou are logged in to FastAPI Cloud 🚀Sonra uygulamanızı deploy edin:
$fastapideployDeploying to FastAPI Cloud...✅ Deployment successful!🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.devHepsi bu! Artık uygulamanıza bu URL'den erişebilirsiniz. ✨
FastAPI Cloud hakkında¶
FastAPI Cloud,FastAPI'ın arkasındaki aynı yazar ve ekip tarafından geliştirilmiştir.
Bir API'ı build etmek,deploy etmek veerişmek süreçlerini minimum eforla kolaylaştırır.
FastAPI ile uygulama geliştirmenin sağladığı aynıdeveloper experience'ı, onları cloud'adeploy etmeye de taşır. 🎉
FastAPI Cloud,FastAPI and friends open source projelerinin ana sponsoru ve finansman sağlayıcısıdır. ✨
Diğer cloud sağlayıcılarına deploy¶
FastAPI open source'tur ve standartlara dayanır. FastAPI uygulamalarını seçtiğiniz herhangi bir cloud sağlayıcısına deploy edebilirsiniz.
FastAPI uygulamalarını onlarla deploy etmek için cloud sağlayıcınızın rehberlerini takip edin. 🤓
Performans¶
Bağımsız TechEmpower kıyaslamaları, Uvicorn altında çalışanFastAPI uygulamalarınınmevcut en hızlı Python framework'lerinden biri olduğunu gösteriyor; sadece Starlette ve Uvicorn'un kendisinin gerisinde (FastAPI tarafından dahili olarak kullanılır). (*)
Daha iyi anlamak içinKıyaslamalar bölümüne bakın.
Bağımlılıklar¶
FastAPI, Pydantic ve Starlette'a bağımlıdır.
standard Bağımlılıkları¶
FastAPI'ıpip install "fastapi[standard]" ile yüklediğinizde, opsiyonel bağımlılıklarınstandard grubuyla birlikte gelir:
Pydantic tarafından kullanılanlar:
email-validator- email doğrulaması için.
Starlette tarafından kullanılanlar:
httpx-TestClientkullanmak istiyorsanız gereklidir.jinja2- varsayılan template yapılandırmasını kullanmak istiyorsanız gereklidir.python-multipart-request.form()ile, form"ayrıştırma" desteği istiyorsanız gereklidir.
FastAPI tarafından kullanılanlar:
uvicorn- uygulamanızı yükleyen ve servis eden server için. Buna, yüksek performanslı servis için gereken bazı bağımlılıkları (örn.uvloop) içerenuvicorn[standard]dahildir.fastapi-cli[standard]-fastapikomutunu sağlamak için.- Buna, FastAPI uygulamanızıFastAPI Cloud'a deploy etmenizi sağlayan
fastapi-cloud-clidahildir.
- Buna, FastAPI uygulamanızıFastAPI Cloud'a deploy etmenizi sağlayan
standard Bağımlılıkları Olmadan¶
standard opsiyonel bağımlılıklarını dahil etmek istemiyorsanız,pip install fastapi ile kurabilirsiniz.
fastapi-cloud-cli Olmadan¶
FastAPI'ı standard bağımlılıklarla amafastapi-cloud-cli olmadan kurmak istiyorsanız,pip install "fastapi[standard-no-fastapi-cloud-cli]" ile yükleyebilirsiniz.
Ek Opsiyonel Bağımlılıklar¶
Yüklemek isteyebileceğiniz bazı ek bağımlılıklar da vardır.
Ek opsiyonel Pydantic bağımlılıkları:
pydantic-settings- ayar yönetimi için.pydantic-extra-types- Pydantic ile kullanılacak ek type'lar için.
Ek opsiyonel FastAPI bağımlılıkları:
orjson-ORJSONResponsekullanmak istiyorsanız gereklidir.ujson-UJSONResponsekullanmak istiyorsanız gereklidir.
Lisans¶
Bu proje MIT lisansı şartları altında lisanslanmıştır.























