Movatterモバイル変換


[0]ホーム

URL:


Ana içeriğe geç
Join theFastAPI Cloud waiting list 🚀
Follow@fastapi onX (Twitter) to stay updated
FollowFastAPI onLinkedIn to stay updated
Subscribe to theFastAPI and friends newsletter 🎉
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor
sponsor

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.

İngilizce sürüm

FastAPI

FastAPI framework, yüksek performanslı, öğrenmesi kolay, kodlaması hızlı, production'a hazır

TestCoveragePackage versionSupported Python versions


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

Diğer sponsorlar

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."

Kabir Khan -Microsoft(ref)

"predictions almak için sorgulanabilecek birREST server oluşturmak amacıylaFastAPI kütüphanesini benimsedik. [Ludwig için]"

Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala -Uber(ref)

"Netflix,kriz yönetimi orkestrasyon framework'ümüz:Dispatch'in open-source sürümünü duyurmaktan memnuniyet duyar! [FastAPI ile geliştirildi]"

Kevin Glisson, Marc Vilanova, Forest Monsen -Netflix(ref)

"FastAPI için ayın üzerindeymişcesine heyecanlıyım. Çok eğlenceli!"

Brian Okken -Python Bytes podcast host(ref)

"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."

Timothy Crosley -Hug yaratıcısı(ref)

"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 [...]"

Ines Montani - Matthew Honnibal -Explosion AI kurucuları -spaCy yaratıcıları(ref) -(ref)

"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."

Deon Pillsbury -Cisco(ref)

FastAPI mini belgeseli

2025'in sonunda yayınlanan birFastAPI mini belgeseli var, online olarak izleyebilirsiniz:

FastAPI Mini Documentary

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 deGEToperasyonlarını (HTTPmethod'ları olarak da bilinir) kabul eder.
  • /items/{item_id}path'i,int olması gerekenitem_id adlı birpath parameter'a sahiptir.
  • /items/{item_id}path'i, opsiyonelstr birquery 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):

Swagger UI

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):

ReDoc

Ö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:

Swagger UI

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

Swagger UI interaction

  • 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:

Swagger UI interaction

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:

ReDoc

Ö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:int

ya 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.).
    • datetime nesneleri.
    • UUID nesneleri.
    • Veritabanı modelleri.
    • ...ve daha fazlası.
  • 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:

  • GET vePUT request'leri için path'teitem_id olduğunu doğrular.
  • GET vePUT request'leri içinitem_id'nin type'ınınint olduğunu doğrular.
    • Değilse, client faydalı ve anlaşılır bir hata görür.
  • GET request'leri içinq adlı opsiyonel bir query parameter olup olmadığını kontrol eder (http://127.0.0.1:8000/items/foo?q=somequery örneğindeki gibi).
    • q parametresi= None ile tanımlandığı için opsiyoneldir.
    • None olmasaydı zorunlu olurdu (tıpkıPUT örneğindeki body gibi).
  • /items/{item_id}'ye yapılanPUT request'leri için body'yi JSON olarak okur:
    • str olması gereken, zorunluname alanı olduğunu kontrol eder.
    • float olması gereken, zorunluprice alanı olduğunu kontrol eder.
    • Varsa,bool olması gereken opsiyonelis_offer alanı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:

editor support

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_length ya daregex gibidoğ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 vepytest tabanlı 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.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 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:

Starlette tarafından kullanılanlar:

  • httpx -TestClient kullanmak 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] -fastapi komutunu sağlamak için.
    • Buna, FastAPI uygulamanızıFastAPI Cloud'a deploy etmenizi sağlayanfastapi-cloud-cli dahildir.

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ı:

Ek opsiyonel FastAPI bağımlılıkları:

  • orjson -ORJSONResponse kullanmak istiyorsanız gereklidir.
  • ujson -UJSONResponse kullanmak istiyorsanız gereklidir.

Lisans

Bu proje MIT lisansı şartları altında lisanslanmıştır.


[8]ページ先頭

©2009-2026 Movatter.jp