FastAPI¶
🌐 Translation by AI and humans
This translation was made by AI guided by humans. 🤝
It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. 🤖
You can improve this translation by helping us guide the AI LLM better.
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 ve Go 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 yerde Completion. 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) ve JSON 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ünlerde FastAPI'ı çok fazla kullanıyorum. [...] Aslında bunu ekibimin Microsoft'taki ML servislerinin tamamında kullanmayı planlıyorum. Bunlardan bazıları ana Windows ürününe ve bazı Office ürünlerine entegre ediliyor."
"predictions almak için sorgulanabilecek bir REST server oluşturmak amacıyla FastAPI 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çin modern bir framework öğrenmek istiyorsanız, FastAPI'a bir göz atın [...] Hızlı, kullanımı ve öğrenmesi kolay [...]"
"API'larımız için FastAPI'a geçtik [...] Bence hoşunuza gidecek [...]"
"Production'da Python API geliştirmek isteyen herkese FastAPI'ı şiddetle tavsiye ederim. Harika tasarlanmış, kullanımı kolay ve yüksek ölçeklenebilir; API-first geliştirme stratejimizin kilit 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 bir FastAPI mini belgeseli var, online olarak izleyebilirsiniz:
CLI'ların FastAPI'ı: Typer¶
Web API yerine terminalde kullanılacak bir CLI uygulaması geliştiriyorsanız Typer'a göz atın.
Typer, FastAPI'ın küçük kardeşi. Ve hedefi CLI'ların FastAPI'ı olmak. ⌨️ 🚀
Gereksinimler¶
FastAPI iki devin omuzları üstünde duruyor:
Kurulum¶
Bir virtual environment oluşturup etkinleştirelim ve ardından FastAPI'ı yükleyelim:
$ pip install "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çerikle main.py adında bir dosya oluşturalım:
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
Ya da async def kullanalım...
Eğer kodunuz async / await kullanıyorsa, async def kullanın:
from typing import Union
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: Union[str, None] = None):
return {"item_id": item_id, "q": q}
Not:
Eğer bilmiyorsanız, dokümanlardaki async ve await hakkında "Aceleniz mi var?" bölümüne bakın.
Çalıştıralım¶
Sunucuyu şu komutla çalıştıralım:
$ fastapi dev main.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 WatchFiles
INFO: 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çindeki FastAPI uygulamasını algılar ve Uvicorn kullanarak bir server başlatır.
Varsayılan olarak fastapi dev, local geliştirme için auto-reload etkin şekilde başlar.
Daha fazla bilgi için FastAPI 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 iki path de
GEToperasyonlarını (HTTP method'ları olarak da bilinir) kabul eder. /items/{item_id}path'i,intolması gerekenitem_idadlı bir path parameter'a sahiptir./items/{item_id}path'i, opsiyonelstrbir query parameter olanq'ya sahiptir.
Etkileşimli API dokümantasyonu¶
Şimdi http://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 şimdi http://127.0.0.1:8000/redoc adresine gidin.
Alternatif otomatik dokümantasyonu göreceksiniz (ReDoc tarafından sağlanır):

Örneği Güncelleyelim¶
Şimdi main.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.
from typing import Union
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
price: float
is_offer: Union[bool, None] = None
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
@app.put("/items/{item_id}")
def update_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¶
Şimdi http://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 şimdi http://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 olarak bir 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 standart Python.
Örneğin bir int için:
item_id: int
ya da daha karmaşık bir Item 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 verisinin Dö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ı verisinin Dö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ı ve file'lar olarak tanımlanması.
maximum_lengthya daregexgibi doğrulama kısıtlamalarının nasıl ayarlanacağı.- Çok güçlü ve kullanımı kolay bir Dependency Injection sistemi.
- JWT tokens ve HTTP Basic auth ile OAuth2 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 ile GraphQL 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 bir FastAPI 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:
$ fastapi login
You are logged in to FastAPI Cloud 🚀
Sonra uygulamanızı deploy edin:
$ fastapi deploy
Deploying to FastAPI Cloud...
✅ Deployment successful!
🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
Hepsi 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 ve erişmek süreçlerini minimum eforla kolaylaştırır.
FastAPI ile uygulama geliştirmenin sağladığı aynı developer experience'ı, onları cloud'a deploy 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ışan FastAPI uygulamalarının mevcut 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çin Kı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ın standard 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 "parsing" 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[standard]" yerine pip install fastapi ile kurabilirsiniz.
fastapi-cloud-cli Olmadan¶
FastAPI'ı standard bağımlılıklarla ama fastapi-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.















