Browse Source

🌐 Update translations for tr (update-outdated)

pull/14692/head
github-actions[bot] 6 months ago
parent
commit
2414041a59
  1. 2
      docs/tr/docs/about/index.md
  2. 31
      docs/tr/docs/advanced/index.md
  3. 12
      docs/tr/docs/advanced/security/index.md
  4. 10
      docs/tr/docs/advanced/testing-websockets.md
  5. 22
      docs/tr/docs/advanced/wsgi.md
  6. 38
      docs/tr/docs/benchmarks.md
  7. 25
      docs/tr/docs/deployment/cloud.md
  8. 24
      docs/tr/docs/deployment/index.md
  9. 40
      docs/tr/docs/how-to/general.md
  10. 10
      docs/tr/docs/how-to/index.md
  11. 419
      docs/tr/docs/index.md
  12. 4
      docs/tr/docs/learn/index.md
  13. 112
      docs/tr/docs/project-generation.md
  14. 421
      docs/tr/docs/python-types.md
  15. 4
      docs/tr/docs/resources/index.md
  16. 34
      docs/tr/docs/tutorial/cookie-params.md
  17. 309
      docs/tr/docs/tutorial/first-steps.md
  18. 78
      docs/tr/docs/tutorial/path-params.md
  19. 94
      docs/tr/docs/tutorial/query-params.md
  20. 48
      docs/tr/docs/tutorial/request-forms.md
  21. 38
      docs/tr/docs/tutorial/static-files.md

2
docs/tr/docs/about/index.md

@ -1,3 +1,3 @@
# Hakkında # Hakkında { #about }
FastAPI, tasarımı, ilham kaynağı ve daha fazlası hakkında. 🤓 FastAPI, tasarımı, ilham kaynağı ve daha fazlası hakkında. 🤓

31
docs/tr/docs/advanced/index.md

@ -1,36 +1,21 @@
# Gelişmiş Kullanıcı Rehberi # Gelişmiş Kullanıcı Rehberi { #advanced-user-guide }
## Ek Özellikler ## Ek Özellikler { #additional-features }
[Tutorial - User Guide](../tutorial/index.md){.internal-link target=_blank} sayfası **FastAPI**'ın tüm ana özelliklerini tanıtmaya yetecektir. Ana [Tutorial - User Guide](../tutorial/index.md){.internal-link target=_blank} sayfası, **FastAPI**'ın tüm ana özellikleri arasında bir tur atmanız için yeterli olmalıdır.
İlerleyen bölümlerde diğer seçenekler, konfigürasyonlar ve ek özellikleri göreceğiz. İlerleyen bölümlerde diğer seçenekler, konfigürasyonlar ve ek özellikleri göreceksiniz.
/// tip | İpucu /// tip | İpucu
Sonraki bölümler **mutlaka "gelişmiş" olmak zorunda değildir**. Sonraki bölümler **mutlaka "gelişmiş" olmak zorunda değildir**.
Kullanım şeklinize bağlı olarak, çözümünüz bu bölümlerden birinde olabilir. Ve kullanım senaryonuza bağlı olarak, çözüm bu bölümlerden birinde olabilir.
/// ///
## Önce Öğreticiyi Okuyun ## Önce Öğreticiyi Okuyun { #read-the-tutorial-first }
[Tutorial - User Guide](../tutorial/index.md){.internal-link target=_blank} sayfasındaki bilgilerle **FastAPI**'nın çoğu özelliğini kullanabilirsiniz. Ana [Tutorial - User Guide](../tutorial/index.md){.internal-link target=_blank} sayfasındaki bilgilerle **FastAPI**'ın çoğu özelliğini yine de kullanabilirsiniz.
Sonraki bölümler bu sayfayı okuduğunuzu ve bu ana fikirleri bildiğinizi varsayarak hazırlanmıştır. Ve sonraki bölümler, onu zaten okuduğunuzu ve o ana fikirleri bildiğinizi varsayar.
## Diğer Kurslar
[Tutorial - User Guide](../tutorial/index.md){.internal-link target=_blank} sayfası ve bu **Gelişmiş Kullanıcı Rehberi**, öğretici bir kılavuz (bir kitap gibi) şeklinde yazılmıştır ve **FastAPI'ı öğrenmek** için yeterli olsa da, ek kurslarla desteklemek isteyebilirsiniz.
Belki de öğrenme tarzınıza daha iyi uyduğu için başka kursları tercih edebilirsiniz.
Bazı kurs sağlayıcıları ✨ [**FastAPI destekçileridir**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✨, bu FastAPI ve **ekosisteminin** sürekli ve sağlıklı bir şekilde **gelişmesini** sağlar.
Ayrıca, size **iyi bir öğrenme deneyimi** sağlamakla kalmayıp, **iyi ve sağlıklı bir framework** olan FastAPI'a ve ve **topluluğuna** (yani size) olan gerçek bağlılıklarını gösterir.
Onların kurslarını denemek isteyebilirsiniz:
* <a href="https://training.talkpython.fm/fastapi-courses" class="external-link" target="_blank">Talk Python Training</a>
* <a href="https://testdriven.io/courses/tdd-fastapi/" class="external-link" target="_blank">Test-Driven Development</a>

12
docs/tr/docs/advanced/security/index.md

@ -1,6 +1,6 @@
# Gelişmiş Güvenlik # Gelişmiş Güvenlik { #advanced-security }
## Ek Özellikler ## Ek Özellikler { #additional-features }
[Tutorial - User Guide: Security](../../tutorial/security/index.md){.internal-link target=_blank} sayfasında ele alınanların dışında güvenlikle ilgili bazı ek özellikler vardır. [Tutorial - User Guide: Security](../../tutorial/security/index.md){.internal-link target=_blank} sayfasında ele alınanların dışında güvenlikle ilgili bazı ek özellikler vardır.
@ -8,12 +8,12 @@
Sonraki bölümler **mutlaka "gelişmiş" olmak zorunda değildir**. Sonraki bölümler **mutlaka "gelişmiş" olmak zorunda değildir**.
Kullanım şeklinize bağlı olarak, çözümünüz bu bölümlerden birinde olabilir. Ve kullanım durumunuz için çözümün bunlardan birinde olması mümkündür.
/// ///
## Önce Öğreticiyi Okuyun ## Önce Öğreticiyi Okuyun { #read-the-tutorial-first }
Sonraki bölümler [Tutorial - User Guide: Security](../../tutorial/security/index.md){.internal-link target=_blank} sayfasını okuduğunuzu varsayarak hazırlanmıştır. Sonraki bölümler, ana [Tutorial - User Guide: Security](../../tutorial/security/index.md){.internal-link target=_blank} sayfasını zaten okuduğunuzu varsayar.
Bu bölümler aynı kavramlara dayanır, ancak bazı ek işlevsellikler sağlar. Hepsi aynı kavramlara dayanır, ancak bazı ek işlevler sağlar.

10
docs/tr/docs/advanced/testing-websockets.md

@ -1,13 +1,13 @@
# WebSockets'i Test Etmek # WebSockets'i Test Etmek { #testing-websockets }
WebSockets testi yapmak için `TestClient`'ı kullanabilirsiniz. WebSockets'i test etmek için aynı `TestClient`'ı kullanabilirsiniz.
Bu işlem için, `TestClient`'ı bir `with` ifadesinde kullanarak WebSocket'e bağlanabilirsiniz: Bunun için, `TestClient`'ı bir `with` ifadesinde kullanarak WebSocket'e bağlanırsınız:
{* ../../docs_src/app_testing/tutorial002.py hl[27:31] *} {* ../../docs_src/app_testing/tutorial002_py39.py hl[27:31] *}
/// note | Not /// note | Not
Daha fazla detay için Starlette'in <a href="https://www.starlette.dev/staticfiles/" class="external-link" target="_blank">Websockets'i Test Etmek</a> dokümantasyonunu inceleyin. Daha fazla detay için Starlette'in <a href="https://www.starlette.dev/testclient/#testing-websocket-sessions" class="external-link" target="_blank">WebSockets'i test etme</a> dokümantasyonunu inceleyin.
/// ///

22
docs/tr/docs/advanced/wsgi.md

@ -1,32 +1,32 @@
# WSGI - Flask, Django ve Daha Fazlasını FastAPI ile Kullanma # WSGI Dahil Etme - Flask, Django, Diğerleri { #including-wsgi-flask-django-others }
WSGI uygulamalarını [Sub Applications - Mounts](sub-applications.md){.internal-link target=_blank}, [Behind a Proxy](behind-a-proxy.md){.internal-link target=_blank} bölümlerinde gördüğünüz gibi bağlayabilirsiniz. WSGI uygulamalarını [Sub Applications - Mounts](sub-applications.md){.internal-link target=_blank}, [Behind a Proxy](behind-a-proxy.md){.internal-link target=_blank} bölümlerinde gördüğünüz gibi bağlayabilirsiniz.
Bunun için `WSGIMiddleware` ile Flask, Django vb. WSGI uygulamanızı sarmalayabilir ve FastAPI'ya bağlayabilirsiniz. Bunun için `WSGIMiddleware`'ı kullanabilir ve WSGI uygulamanızı (örneğin Flask, Django vb.) sarmalamak için bundan yararlanabilirsiniz.
## `WSGIMiddleware` Kullanımı ## `WSGIMiddleware` Kullanımı { #using-wsgimiddleware }
`WSGIMiddleware`projenize dahil edin. `WSGIMiddleware`import etmeniz gerekir.
Ardından WSGI (örneğin Flask) uygulamanızı middleware ile sarmalayın. Ardından WSGI (ör. Flask) uygulamasını middleware ile sarmalayın.
Son olarak da bir yol altında bağlama işlemini gerçekleştirin. Ve sonra bunu bir path altında bağlayın.
{* ../../docs_src/wsgi/tutorial001.py hl[2:3,23] *} {* ../../docs_src/wsgi/tutorial001_py39.py hl[2:3,3] *}
## Kontrol Edelim ## Kontrol Edelim { #check-it }
Artık `/v1/` yolunun altındaki her istek Flask uygulaması tarafından işlenecektir. Artık `/v1/` path'inin altındaki her request Flask uygulaması tarafından işlenecektir.
Geri kalanı ise **FastAPI** tarafından işlenecektir. Geri kalanı ise **FastAPI** tarafından işlenecektir.
Eğer uygulamanızı çalıştırıp <a href="http://localhost:8000/v1/" class="external-link" target="_blank">http://localhost:8000/v1/</a> adresine giderseniz, Flask'tan gelen yanıtı göreceksiniz: Eğer bunu çalıştırıp <a href="http://localhost:8000/v1/" class="external-link" target="_blank">http://localhost:8000/v1/</a> adresine giderseniz, Flask'tan gelen response'u göreceksiniz:
```txt ```txt
Hello, World from Flask! Hello, World from Flask!
``` ```
Eğer <a href="http://localhost:8000/v2/" class="external-link" target="_blank">http://localhost:8000/v2/</a> adresine giderseniz, FastAPI'dan gelen yanıtı göreceksiniz: Ve eğer <a href="http://localhost:8000/v2" class="external-link" target="_blank">http://localhost:8000/v2</a> adresine giderseniz, FastAPI'dan gelen response'u göreceksiniz:
```JSON ```JSON
{ {

38
docs/tr/docs/benchmarks.md

@ -1,34 +1,34 @@
# Kıyaslamalar # Kıyaslamalar { #benchmarks }
Bağımsız TechEmpower kıyaslamaları gösteriyor ki <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">en hızlı Python frameworklerinden birisi</a> olan Uvicorn ile çalıştırılan **FastAPI** uygulamaları, sadece Starlette ve Uvicorn'dan daha düşük sıralamada (FastAPI bu frameworklerin üzerine kurulu) yer alıyor. (*) Bağımsız TechEmpower kıyaslamaları, Uvicorn altında çalışan **FastAPI** uygulamalarının <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">mevcut en hızlı Python frameworklerinden biri</a> olduğunu, sadece Starlette ve Uvicorn'un kendisinin (FastAPI tarafından dahili olarak kullanılır) altında yer aldığını gösteriyor. (*)
Fakat kıyaslamaları ve karşılaştırmaları incelerken şunları aklınızda bulundurmalısınız. Fakat kıyaslamaları ve karşılaştırmaları incelerken şunları aklınızda bulundurmalısınız.
## Kıyaslamalar ve Hız ## Kıyaslamalar ve Hız { #benchmarks-and-speed }
Kıyaslamaları incelediğinizde, farklı özelliklere sahip araçların eşdeğer olarak karşılaştırıldığını yaygın bir şekilde görebilirsiniz. Kıyaslamaları incelediğinizde, farklı türlerdeki çeşitli araçların eşdeğer olarak karşılaştırıldığını görmek yaygındır.
Özellikle, (diğer birçok araç arasında) Uvicorn, Starlette ve FastAPI'ın birlikte karşılaştırıldığını görebilirsiniz. Özellikle, (diğer birçok aracın arasında) Uvicorn, Starlette ve FastAPI'ın birlikte karşılaştırıldığını görmek.
Aracın çözdüğü problem ne kadar basitse, performansı o kadar iyi olacaktır. Ancak kıyaslamaların çoğu, aracın sağladığı ek özellikleri test etmez. Aracın çözdüğü problem ne kadar basitse, performansı o kadar iyi olacaktır. Ve kıyaslamaların çoğu, aracın sağladığı ek özellikleri test etmez.
Hiyerarşi şöyledir: Hiyerarşi şöyledir:
* **Uvicorn**: bir ASGI sunucusu * **Uvicorn**: bir ASGI sunucusu
* **Starlette**: (Uvicorn'u kullanır) bir web mikroframeworkü * **Starlette**: (Uvicorn'u kullanır) bir web microframework'ü
* **FastAPI**: (Starlette'i kullanır) veri doğrulama vb. çeşitli ek özelliklere sahip, API oluşturmak için kullanılan bir API mikroframeworkü * **FastAPI**: (Starlette'i kullanır) veri doğrulama vb. ile, API'lar oluşturmak için çeşitli ek özelliklere sahip bir API microframework'ü
* **Uvicorn**: * **Uvicorn**:
* Sunucunun kendisi dışında ekstra bir kod içermediği için en iyi performansa sahip olacaktır. * Sunucunun kendisi dışında çok fazla ekstra kodu olmadığı için en iyi performansa sahip olacaktır.
* Doğrudan Uvicorn ile bir uygulama yazmazsınız. Bu, yazdığınız kodun en azından Starlette tarafından sağlanan tüm kodu (veya **FastAPI**) az çok içermesi gerektiği anlamına gelir. Eğer bunu yaptıysanız, son uygulamanız bir framework kullanmak ve uygulama kodlarını ve hataları en aza indirmekle aynı ek yüke sahip olacaktır. * Uvicorn'da doğrudan bir uygulama yazmazsınız. Bu, kodunuzun en azından Starlette'in (veya **FastAPI**'ın) sağladığı tüm kodu az çok içermesi gerektiği anlamına gelir. Ve eğer bunu yaptıysanız, nihai uygulamanız bir framework kullanmanın ve uygulama kodunuzu ve bug'ları en aza indirmenin aynı ek yüküne sahip olacaktır.
* Eğer Uvicorn'u karşılaştırıyorsanız, Daphne, Hypercorn, uWSGI, vb. uygulama sunucuları ile karşılaştırın. * Uvicorn'u karşılaştırıyorsanız, onu Daphne, Hypercorn, uWSGI, vb. application server'lara karşı karşılaştırın.
* **Starlette**: * **Starlette**:
* Uvicorn'dan sonraki en iyi performansa sahip olacaktır. İşin aslı, Starlette çalışmak için Uvicorn'u kullanıyor. Dolayısıyla, daha fazla kod çalıştırmaası gerektiğinden muhtemelen Uvicorn'dan sadece "daha yavaş" olabilir. * Uvicorn'dan sonra bir sonraki en iyi performansa sahip olacaktır. Aslında, Starlette çalışmak için Uvicorn'u kullanır. Dolayısıyla, daha fazla kod çalıştırmak zorunda olduğundan muhtemelen Uvicorn'dan yalnızca "daha yavaş" olabilir.
* Ancak yol bazlı yönlendirme vb. basit web uygulamaları oluşturmak için araçlar sağlar. * Ancak path'lere dayalı routing, vb. ile basit web uygulamaları oluşturmanız için size araçlar sağlar.
* Eğer Starlette'i karşılaştırıyorsanız, Sanic, Flask, Django, vb. frameworkler (veya mikroframeworkler) ile karşılaştırın. * Starlette'i karşılaştırıyorsanız, Sanic, Flask, Django, vb. web frameworkleri (veya microframeworkler) ile karşılaştırın.
* **FastAPI**: * **FastAPI**:
* Starlette'in Uvicorn'u kullandığı ve ondan daha hızlı olamayacağı gibi, **FastAPI**'da Starlette'i kullanır, dolayısıyla ondan daha hızlı olamaz. * Starlette'in Uvicorn'u kullanıp ondan daha hızlı olamamasıyla aynı şekilde, **FastAPI** Starlette'i kullanır, dolayısıyla ondan daha hızlı olamaz.
* FastAPI, Starlette'e ek olarak daha fazla özellik sunar. Bunlar veri doğrulama ve <abbr title="Dönüşüm: serialization, parsing, marshalling olarak da biliniyor">dönüşümü</abbr> gibi API'lar oluştururken neredeyse ve her zaman ihtiyaç duyduğunuz özelliklerdir. Ve bunu kullanarak, ücretsiz olarak otomatik dokümantasyon elde edersiniz (otomatik dokümantasyon çalışan uygulamalara ek yük getirmez, başlangıçta oluşturulur). * FastAPI, Starlette'in üzerine daha fazla özellik sağlar. Veri doğrulama ve serialization gibi, API'lar oluştururken neredeyse her zaman ihtiyaç duyduğunuz özellikler. Ve bunu kullanarak, ücretsiz olarak otomatik dokümantasyon elde edersiniz (otomatik dokümantasyon çalışan uygulamalara ek yük bile getirmez, başlangıçta üretilir).
* FastAPI'ı kullanmadıysanız ve Starlette'i doğrudan kullandıysanız (veya başka bir araç, Sanic, Flask, Responder, vb.) tüm veri doğrulama ve dönüştürme araçlarını kendiniz geliştirmeniz gerekir. Dolayısıyla, son uygulamanız FastAPI kullanılarak oluşturulmuş gibi hâlâ aynı ek yüke sahip olacaktır. Çoğu durumda, uygulamalarda yazılan kodun büyük bir kısmını veri doğrulama ve dönüştürme kodları oluşturur. * FastAPI'ı kullanmadıysanız ve Starlette'i doğrudan kullandıysanız (veya Sanic, Flask, Responder, vb. gibi başka bir araç) tüm veri doğrulama ve serialization'ı kendiniz uygulamak zorunda kalırdınız. Dolayısıyla, nihai uygulamanız FastAPI kullanılarak oluşturulmuş gibi hâlâ aynı ek yüke sahip olacaktır. Ve birçok durumda, bu veri doğrulama ve serialization, uygulamalarda yazılan kodun en büyük kısmıdır.
* Dolayısıyla, FastAPI'ı kullanarak geliştirme süresinden, hatalardan, kod satırlarından tasarruf edersiniz ve kullanmadığınız durumda (birçok özelliği geliştirmek zorunda kalmakla birlikte) muhtemelen aynı performansı (veya daha iyisini) elde ederdiniz. * Dolayısıyla, FastAPI'ı kullanarak geliştirme süresinden, bug'lardan, kod satırlarından tasarruf edersiniz ve muhtemelen onu kullanmadığınız durumda elde edeceğiniz performansın aynısını (veya daha iyisini) elde edersiniz (çünkü her şeyi kodunuzda uygulamak zorunda kalırdınız).
* Eğer FastAPI'ı karşılaştırıyorsanız, Flask-apispec, NestJS, Molten, vb. gibi veri doğrulama, dönüştürme ve dokümantasyon sağlayan bir web uygulaması frameworkü ile (veya araç setiyle) karşılaştırın. * FastAPI'ı karşılaştırıyorsanız, veri doğrulama, serialization ve dokümantasyon sağlayan bir web uygulaması framework'ü (veya araç seti) ile, Flask-apispec, NestJS, Molten, vb. gibi, entegre otomatik veri doğrulama, serialization ve dokümantasyona sahip frameworklerle karşılaştırın.

25
docs/tr/docs/deployment/cloud.md

@ -1,13 +1,24 @@
# FastAPI Uygulamasını Bulut Sağlayıcılar Üzerinde Yayınlama # Bulut Sağlayıcılarda FastAPI Deploy Etme { #deploy-fastapi-on-cloud-providers }
FastAPI uygulamasını yayınlamak için hemen hemen **herhangi bir bulut sağlayıcıyı** kullanabilirsiniz. FastAPI uygulamanızı deploy etmek için neredeyse **herhangi bir bulut sağlayıcıyı** kullanabilirsiniz.
Büyük bulut sağlayıcıların çoğu FastAPI uygulamasını yayınlamak için kılavuzlara sahiptir. Çoğu durumda, başlıca bulut sağlayıcılar FastAPI'yi onlarla deploy etmek için kılavuzlara sahiptir.
## Bulut Sağlayıcılar - Sponsorlar ## FastAPI Cloud { #fastapi-cloud }
Bazı bulut sağlayıcılar ✨ [**FastAPI destekçileridir**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✨, bu FastAPI ve **ekosisteminin** sürekli ve sağlıklı bir şekilde **gelişmesini** sağlar. **<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>**, **FastAPI**'nin arkasındaki aynı yazar ve ekip tarafından geliştirilmiştir.
Ayrıca, size **iyi servisler** sağlamakla kalmayıp, **iyi ve sağlıklı bir framework** olan FastAPI'a bağlılıklarını gösterir. Bir API'yi minimum eforla **oluşturma**, **deploy etme** ve **erişme** sürecini kolaylaştırır.
Bu hizmetleri denemek ve kılavuzlarını incelemek isteyebilirsiniz. FastAPI ile uygulama oluşturmanın aynı **developer experience**'ını, onları buluta **deploy etmeye** de taşır. 🎉
FastAPI Cloud, *FastAPI and friends* açık kaynak projelerinin birincil sponsoru ve finansman sağlayıcısıdır. ✨
## Bulut Sağlayıcılar - Sponsorlar { #cloud-providers-sponsors }
Bazı diğer bulut sağlayıcılar da ✨ [**FastAPI'ye sponsor olur**](../help-fastapi.md#sponsor-the-author){.internal-link target=_blank} ✨. 🙇
Kılavuzlarını takip etmek ve servislerini denemek için onları da değerlendirmek isteyebilirsiniz:
* <a href="https://docs.render.com/deploy-fastapi?utm_source=deploydoc&utm_medium=referral&utm_campaign=fastapi" class="external-link" target="_blank">Render</a>
* <a href="https://docs.railway.com/guides/fastapi?utm_medium=integration&utm_source=docs&utm_campaign=fastapi" class="external-link" target="_blank">Railway</a>

24
docs/tr/docs/deployment/index.md

@ -1,21 +1,23 @@
# Deployment (Yayınlama) # Deployment { #deployment }
**FastAPI** uygulamasını deploy etmek oldukça kolaydır. **FastAPI** uygulamasını deploy etmek nispeten kolaydır.
## Deployment Ne Anlama Gelir? ## Deployment Ne Anlama Gelir { #what-does-deployment-mean }
Bir uygulamayı **deploy** etmek (yayınlamak), uygulamayı **kullanıcılara erişilebilir hale getirmek** için gerekli adımları gerçekleştirmek anlamına gelir. Bir uygulamayı **deploy** etmek, uygulamayı **kullanıcıların erişimine sunmak** için gerekli adımları gerçekleştirmek anlamına gelir.
Bir **Web API** için bu süreç normalde uygulamayı **uzak bir makineye** yerleştirmeyi, iyi performans, kararlılık vb. özellikler sağlayan bir **sunucu programı** ile **kullanıcılarınızın** uygulamaya etkili ve kesintisiz bir şekilde **erişebilmesini** kapsar. Bir **web API** için bu, normalde uygulamayı **uzak bir makineye** koymayı; iyi performans, kararlılık vb. sağlayan bir **sunucu programı** ile **kullanıcılarınızın** uygulamaya verimli bir şekilde ve kesinti ya da sorun yaşamadan **erişebilmesini** sağlamayı içerir.
Bu, kodu sürekli olarak değiştirdiğiniz, hata alıp hata giderdiğiniz, geliştirme sunucusunu durdurup yeniden başlattığınız vb. **geliştirme** aşamalarının tam tersidir. Bu, kodu sürekli değiştirdiğiniz, bozup düzelttiğiniz, geliştirme sunucusunu durdurup yeniden başlattığınız vb. **geliştirme** aşamalarının tersidir.
## Deployment Stratejileri ## Deployment Stratejileri { #deployment-strategies }
Kullanım durumunuza ve kullandığınız araçlara bağlı olarak bir kaç farklı yol izleyebilirsiniz. Kullanım senaryonuza ve kullandığınız araçlara bağlı olarak bunu yapmanın birkaç yolu vardır.
Bir dizi araç kombinasyonunu kullanarak kendiniz **bir sunucu yayınlayabilirsiniz**, yayınlama sürecinin bir kısmını sizin için gerçekleştiren bir **bulut hizmeti** veya diğer olası seçenekleri kullanabilirsiniz. Bir dizi aracın kombinasyonunu kullanarak kendiniz **bir sunucu deploy edebilirsiniz**, işin bir kısmını sizin için yapan bir **bulut hizmeti** kullanabilirsiniz veya başka olası seçenekler de vardır.
**FastAPI** uygulamasını yayınlarken aklınızda bulundurmanız gereken ana kavramlardan bazılarını size göstereceğim (ancak bunların çoğu diğer web uygulamaları için de geçerlidir). Örneğin, FastAPI'nin arkasındaki ekip olarak, FastAPI ile çalışmanın aynı geliştirici deneyimiyle, FastAPI uygulamalarını buluta deploy etmeyi mümkün olduğunca kolaylaştırmak için <a href="https://fastapicloud.com" class="external-link" target="_blank">**FastAPI Cloud**</a>'u geliştirdik.
Sonraki bölümlerde akılda tutulması gereken diğer ayrıntıları ve yayınlama tekniklerinden bazılarını göreceksiniz. ✨ **FastAPI** uygulamasını deploy ederken muhtemelen aklınızda tutmanız gereken ana kavramlardan bazılarını size göstereceğim (bunların çoğu diğer herhangi bir web uygulaması türü için de geçerlidir).
Sonraki bölümlerde, akılda tutulması gereken daha fazla ayrıntı ve bunu yapmak için bazı teknikler göreceksiniz. ✨

40
docs/tr/docs/how-to/general.md

@ -1,39 +1,39 @@
# Genel - Nasıl Yapılır - Tarifler # Genel - Nasıl Yapılır - Tarifler { #general-how-to-recipes }
Bu sayfada genel ve sıkça sorulan sorular için dokümantasyonun diğer sayfalarına yönlendirmeler bulunmaktadır. Bu sayfada genel veya sıkça sorulan sorular için dokümantasyonun diğer yerlerine yönlendirmeler bulunmaktadır.
## Veri Filtreleme - Güvenlik ## Veri Filtreleme - Güvenlik { #filter-data-security }
Döndürmeniz gereken veriden fazlasını döndürmediğinizden emin olmak için, [Tutorial - Response Model - Return Type](../tutorial/response-model.md){.internal-link target=_blank} sayfasını okuyun. Döndürmeniz gereken veriden fazlasını döndürmediğinizden emin olmak için, [Tutorial - Response Model - Return Type](../tutorial/response-model.md){.internal-link target=_blank} dokümantasyonunu okuyun.
## Dokümantasyon Etiketleri - OpenAPI ## Dokümantasyon Etiketleri - OpenAPI { #documentation-tags-openapi }
*Yol operasyonlarınıza* etiketler ekleyerek dokümantasyon arayüzünde gruplar halinde görünmesini sağlamak için, [Tutorial - Path Operation Configurations - Tags](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} sayfasını okuyun. *path operation*'larınıza etiketler eklemek ve dokümantasyon arayüzünde gruplar halinde görünmesini sağlamak için, [Tutorial - Path Operation Configurations - Tags](../tutorial/path-operation-configuration.md#tags){.internal-link target=_blank} dokümantasyonunu okuyun.
## Dokümantasyon Özeti ve Açıklaması - OpenAPI ## Dokümantasyon Özeti ve Açıklaması - OpenAPI { #documentation-summary-and-description-openapi }
*Yol operasyonlarınıza* özet ve açıklama ekleyip dokümantasyon arayüzünde görünmesini sağlamak için, [Tutorial - Path Operation Configurations - Summary and Description](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} sayfasını okuyun. *path operation*'larınıza özet ve açıklama eklemek ve bunları dokümantasyon arayüzünde göstermek için, [Tutorial - Path Operation Configurations - Summary and Description](../tutorial/path-operation-configuration.md#summary-and-description){.internal-link target=_blank} dokümantasyonunu okuyun.
## Yanıt Açıklaması Dokümantasyonu - OpenAPI ## Dokümantasyon Response description - OpenAPI { #documentation-response-description-openapi }
Dokümantasyon arayüzünde yer alan yanıt açıklamasını tanımlamak için, [Tutorial - Path Operation Configurations - Response description](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} sayfasını okuyun. Dokümantasyon arayüzünde gösterilen response açıklamasını tanımlamak için, [Tutorial - Path Operation Configurations - Response description](../tutorial/path-operation-configuration.md#response-description){.internal-link target=_blank} dokümantasyonunu okuyun.
## *Yol Operasyonunu* Kullanımdan Kaldırma - OpenAPI ## Dokümantasyonda Bir *Path Operation*'ı Kullanımdan Kaldırma - OpenAPI { #documentation-deprecate-a-path-operation-openapi }
Bir *yol işlemi*ni kullanımdan kaldırmak ve bunu dokümantasyon arayüzünde göstermek için, [Tutorial - Path Operation Configurations - Deprecation](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} sayfasını okuyun. Bir *path operation* kullanımdan kaldırmak ve bunu dokümantasyon arayüzünde göstermek için, [Tutorial - Path Operation Configurations - Deprecation](../tutorial/path-operation-configuration.md#deprecate-a-path-operation){.internal-link target=_blank} dokümantasyonunu okuyun.
## Herhangi Bir Veriyi JSON Uyumlu Hale Getirme ## Herhangi Bir Veriyi JSON Uyumlu Hale Getirme { #convert-any-data-to-json-compatible }
Herhangi bir veriyi JSON uyumlu hale getirmek için, [Tutorial - JSON Compatible Encoder](../tutorial/encoder.md){.internal-link target=_blank} sayfasını okuyun. Herhangi bir veriyi JSON uyumlu hale getirmek için, [Tutorial - JSON Compatible Encoder](../tutorial/encoder.md){.internal-link target=_blank} dokümantasyonunu okuyun.
## OpenAPI Meta Verileri - Dokümantasyon ## OpenAPI Meta Verileri - Dokümantasyon { #openapi-metadata-docs }
OpenAPI şemanıza lisans, sürüm, iletişim vb. meta veriler eklemek için, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md){.internal-link target=_blank} sayfasını okuyun. OpenAPI şemanıza lisans, sürüm, iletişim vb. meta veriler dahil eklemek için, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md){.internal-link target=_blank} dokümantasyonunu okuyun.
## OpenAPI Bağlantı Özelleştirme ## OpenAPI Özel URL { #openapi-custom-url }
OpenAPI bağlantısını özelleştirmek (veya kaldırmak) için, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} sayfasını okuyun. OpenAPI URL'sini özelleştirmek (veya kaldırmak) için, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md#openapi-url){.internal-link target=_blank} dokümantasyonunu okuyun.
## OpenAPI Dokümantasyon Bağlantıları ## OpenAPI Dokümantasyon URL'leri { #openapi-docs-urls }
Dokümantasyonu arayüzünde kullanılan bağlantıları güncellemek için, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md#docs-urls){.internal-link target=_blank} sayfasını okuyun. Otomatik oluşturulan dokümantasyon kullanıcı arayüzleri için kullanılan URL'leri güncellemek için, [Tutorial - Metadata and Docs URLs](../tutorial/metadata.md#docs-urls){.internal-link target=_blank} dokümantasyonunu okuyun.

10
docs/tr/docs/how-to/index.md

@ -1,13 +1,13 @@
# Nasıl Yapılır - Tarifler # Nasıl Yapılır - Tarifler { #how-to-recipes }
Burada çeşitli konular hakkında farklı tarifler veya "nasıl yapılır" kılavuzları yer alıyor. Burada **çeşitli konular** hakkında farklı tarifler veya "nasıl yapılır" kılavuzları göreceksiniz.
Bu fikirlerin büyük bir kısmı aşağı yukarı **bağımsız** olacaktır, çoğu durumda bunları sadece **projenize** hitap ediyorsa incelemelisiniz. Bu fikirlerin büyük bir kısmı aşağı yukarı **bağımsız** olacaktır, çoğu durumda bunları sadece doğrudan **projenize** uyuyorsa incelemeniz gerekir.
Projeniz için ilginç ve yararlı görünen bir şey varsa devam edin ve inceleyin, aksi halde bunları atlayabilirsiniz. Projeniz için ilginç ve yararlı görünen bir şey varsa devam edin ve inceleyin, aksi halde muhtemelen bunları atlayabilirsiniz.
/// tip | İpucu /// tip | İpucu
**FastAPI**'ı düzgün (ve önerilen) şekilde öğrenmek istiyorsanız [Öğretici - Kullanıcı Rehberi](../tutorial/index.md){.internal-link target=_blank}'ni bölüm bölüm okuyun. **FastAPI**'ı yapılandırılmış bir şekilde (önerilen) **öğrenmek** istiyorsanız bunun yerine [Öğretici - Kullanıcı Rehberi](../tutorial/index.md){.internal-link target=_blank}'ni bölüm bölüm okuyun.
/// ///

419
docs/tr/docs/index.md

@ -1,4 +1,4 @@
# FastAPI # FastAPI { #fastapi }
<style> <style>
.md-content .md-typeset h1 { display: none; } .md-content .md-typeset h1 { display: none; }
@ -8,7 +8,7 @@
<a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a> <a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a>
</p> </p>
<p align="center"> <p align="center">
<em>FastAPI framework, yüksek performanslı, öğrenmesi oldukça kolay, kodlaması hızlı, kullanıma hazır</em> <em>FastAPI framework, yüksek performanslı, öğrenmesi kolay, kodlaması hızlı, production'a hazır</em>
</p> </p>
<p align="center"> <p align="center">
<a href="https://github.com/fastapi/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster" target="_blank"> <a href="https://github.com/fastapi/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster" target="_blank">
@ -33,53 +33,59 @@
--- ---
FastAPI, Python 'nin standart <abbr title="Tip Belirteçleri: Type Hints">tip belirteçleri</abbr>ne dayalı, modern ve hızlı (yüksek performanslı) API'lar oluşturmak için kullanılabilecek web framework'tür. FastAPI, standart Python <abbr title="Tip Belirteçleri: Type Hints">tip belirteçleri</abbr>ne dayalı, Python ile API'lar oluşturmak için modern ve hızlı (yüksek performanslı) bir web framework'üdür.
Temel özellikleri şunlardır: Temel özellikleri şunlardır:
* **Hızlı**: Çok yüksek performanslı, **NodeJS** ve **Go** ile eşit düzeyde (Starlette ve Pydantic sayesinde). [En hızlı Python framework'lerinden bir tanesidir](#performans). * **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](#performance).
* **Kodlaması Hızlı**: Geliştirme hızını yaklaşık %200 ile %300 aralığında arttırır. * * **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. * * **Daha az hata**: İnsan (geliştirici) kaynaklı hataları yaklaşık %40 azaltır. *
* **Sezgisel**: Muhteşem bir editör desteği. Her yerde <abbr title="Otomatik Tamamlama: auto-complete, autocompletion, IntelliSense">otomatik tamamlama</abbr>. Hata ayıklama ile daha az zaman harcayacaksınız. * **Sezgisel**: Muhteşem bir editör desteği. Her yerde <abbr title="otomatik tamamlama, autocompletion, IntelliSense olarak da bilinir">Completion</abbr>. Daha az debug zamanı.
* **Kolay**: Öğrenmesi ve kullanması kolay olacak şekilde tasarlandı. Doküman okuma ile daha az zaman harcayacaksınız. * **Kolay**: Kullanması ve öğrenmesi kolay olacak şekilde tasarlandı. Doküman okuma ile daha az zaman.
* **Kısa**: Kod tekrarı minimize edildi. Her parametre tanımlamasında birden fazla özellik ve daha az hatayla karşılaşacaksınız. * **Kısa**: Kod tekrarını minimize eder. Her parametre tanımından birden çok özellik. Daha az hata.
* **Güçlü**: Otomatik ve etkileşimli dokümantasyon ile birlikte, kullanıma hazır kod elde edebilirsiniz. * **Güçlü**: Production'a hazır kod elde edersiniz. Otomatik etkileşimli dokümantasyonla birlikte.
* **Standard öncelikli**: API'lar için açık standartlara dayalı (ve tamamen uyumlu); <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (eski adıyla Swagger) ve <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>. * **Standardlara dayalı**: API'lar için açık standartlara dayanır (ve tamamen uyumludur): <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (eski adıyla Swagger) ve <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>.
<small>* ilgili kanılar, dahili geliştirme ekibinin geliştirdikleri ürünlere yaptıkları testlere dayanmaktadır.</small> <small>* production uygulamaları geliştiren dahili bir geliştirme ekibinin yaptığı testlere dayalı tahmin.</small>
## Sponsorlar ## Sponsorlar { #sponsors }
<!-- sponsors --> <!-- sponsors -->
{% if sponsors %} ### Keystone Sponsor { #keystone-sponsor }
{% for sponsor in sponsors.keystone -%}
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor -%}
### Gold ve Silver Sponsorlar { #gold-and-silver-sponsors }
{% for sponsor in sponsors.gold -%} {% for sponsor in sponsors.gold -%}
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a> <a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor -%} {% endfor -%}
{%- for sponsor in sponsors.silver -%} {%- for sponsor in sponsors.silver -%}
<a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a> <a href="{{ sponsor.url }}" target="_blank" title="{{ sponsor.title }}"><img src="{{ sponsor.img }}" style="border-radius:15px"></a>
{% endfor %} {% endfor %}
{% endif %}
<!-- /sponsors --> <!-- /sponsors -->
<a href="https://fastapi.tiangolo.com/tr/fastapi-people/#sponsors" class="external-link" target="_blank">Diğer Sponsorlar</a> <a href="https://fastapi.tiangolo.com/tr/fastapi-people/#sponsors" class="external-link" target="_blank">Diğer sponsorlar</a>
## Görüşler ## Görüşler { #opinions }
"_[...] Bugünlerde **FastAPI**'ı çok fazla kullanıyorum. [...] Aslında bunu ekibimin **Microsoft'taki Machine Learning servislerinin** tamamında kullanmayı planlıyorum. Bunlardan bazıları **Windows**'un ana ürünlerine ve **Office** ürünlerine entegre ediliyor._" "_[...] Bugünlerde **FastAPI**'ı çok fazla kullanıyorum. [...] Aslında ekibimin **Microsoft'taki ML servislerinin** tamamı için kullanmayı planlıyorum. Bunlardan bazıları ana **Windows** ürününe ve bazı **Office** ürünlerine entegre ediliyor._"
<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/fastapi/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div>
--- ---
"_**FastAPI****tahminlerimiz**'i sorgulanabilir hale getirecek bir **REST** sunucu oluşturmak için benimsedik/kullanmaya başladık._" "_**FastAPI** kütüphanesini, **tahminler** elde etmek için sorgulanabilen bir **REST** sunucusu oluşturmak üzere benimsedik. [Ludwig için]_"
<div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div>
--- ---
"_**Netflix**, **kriz yönetiminde** orkestrasyon yapabilmek için geliştirdiği yeni framework'ü **Dispatch**'in, açık kaynak sürümünü paylaşmaktan gurur duyuyor. [**FastAPI** ile yapıldı.]_" "_**Netflix**, **kriz yönetimi** orkestrasyon framework'ümüzün açık kaynak sürümünü duyurmaktan mutluluk duyar: **Dispatch**! [**FastAPI** ile geliştirildi]_"
<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div>
@ -87,74 +93,72 @@ Temel özellikleri şunlardır:
"_**FastAPI** için ayın üzerindeymişcesine heyecanlıyım. Çok eğlenceli!_" "_**FastAPI** için ayın üzerindeymişcesine heyecanlıyım. Çok eğlenceli!_"
<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a> podcast host</strong> <a href="https://x.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Brian Okken - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a> podcast sunucusu</strong> <a href="https://x.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div>
--- ---
"_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._" "_Dürüst olmak gerekirse, inşa ettiğiniz şey gerçekten çok sağlam ve cilalı görünüyor. Birçok açıdan, **Hug**'ın olmasını istediğim şey buydu - birinin bunu inşa ettiğini görmek gerçekten ilham verici._"
<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong><a href="http://www.hug.rest/" target="_blank">Hug</a>'ın Yaratıcısı</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong><a href="https://github.com/hugapi/hug" target="_blank">Hug</a> yaratıcısı</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div>
--- ---
"_Eğer REST API geliştirmek için **modern bir framework** öğrenme arayışında isen, **FastAPI**'a bir göz at [...] Hızlı, kullanımı ve öğrenmesi kolay. [...]_" "_REST API'lar oluşturmak için tek bir **modern framework** öğrenmek istiyorsanız, **FastAPI**'a göz atın [...] Hızlı, kullanımı kolay ve öğrenmesi kolay [...]_"
"_**API** servislerimizi **FastAPI**'a taşıdık [...] Sizin de beğeneceğinizi düşünüyoruz. [...]_" "_**API**'larımız için **FastAPI**'a geçtik [...] Bence hoşunuza gidecek [...]_"
<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> kurucuları - <a href="https://spacy.io" target="_blank">spaCy</a> yaratıcıları</strong> <a href="https://x.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://x.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> kurucuları - <a href="https://spacy.io" target="_blank">spaCy</a> yaratıcıları</strong> <a href="https://x.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://x.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div>
--- ---
"_Python ile kullanıma hazır bir API oluşturmak isteyen herhangi biri için, **FastAPI**'ı şiddetle tavsiye ederim. **Harika tasarlanmış**, **kullanımı kolay** ve **yüksek ölçeklenebilir**, API odaklı geliştirme stratejimizin **ana bileşeni** haline geldi ve Virtual TAC Engineer gibi birçok otomasyon ve servisi yönetiyor._" "_Production bir Python API oluşturmak isteyen herkese **FastAPI**'ı kesinlikle tavsiye ederim. **Güzel tasarlanmış**, **kullanımı basit** 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 servisi çalıştırıyor._"
<div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Deon Pillsbury - <strong>Cisco</strong> <a href="https://www.linkedin.com/posts/deonpillsbury_cisco-cx-python-activity-6963242628536487936-trAp/" target="_blank"><small>(ref)</small></a></div>
--- ---
## Komut Satırı Uygulamalarının FastAPI'ı: **Typer** ## FastAPI mini belgeseli { #fastapi-mini-documentary }
<a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a> 2025'in sonunda yayınlanan bir <a href="https://www.youtube.com/watch?v=mpR8ngthqiE" class="external-link" target="_blank">FastAPI mini belgeseli</a> var, çevrimiçi izleyebilirsiniz:
Eğer API yerine, terminalde kullanılmak üzere bir <abbr title="Komut Satırı: Command Line Interface">komut satırı uygulaması</abbr> geliştiriyorsanız <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>'a göz atabilirsiniz. <a href="https://www.youtube.com/watch?v=mpR8ngthqiE" target="_blank"><img src="https://fastapi.tiangolo.com/img/fastapi-documentary.jpg" alt="FastAPI Mini Documentary"></a>
**Typer** kısaca FastAPI'ın küçük kardeşi. Ve hedefi komut satırı uygulamalarının **FastAPI'ı** olmak. ⌨️ 🚀 ## **Typer**, CLI'ların FastAPI'ı { #typer-the-fastapi-of-clis }
## Gereksinimler <a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
FastAPI iki devin omuzları üstünde duruyor: Bir web API yerine terminalde kullanılacak bir <abbr title="Command Line Interface">CLI</abbr> uygulaması geliştiriyorsanız, <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>'a göz atın.
* Web tarafı için <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a>. **Typer**, FastAPI'ın küçük kardeşidir. Ve hedefi **CLI'ların FastAPI'ı** olmaktır. ⌨️ 🚀
* Data tarafı için <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a>.
## Kurulum ## Gereksinimler { #requirements }
<div class="termy"> FastAPI iki devin omuzları üstünde duruyor:
```console
$ pip install fastapi
---> 100% * Web kısımları için <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a>.
``` * Data kısımları için <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a>.
</div> ## Kurulum { #installation }
Uygulamamızı kullanılabilir hale getirmek için <a href="http://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a> ya da <a href="https://github.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a> gibi bir ASGI sunucusuna ihtiyacımız olacak. Bir <a href="https://fastapi.tiangolo.com/tr/virtual-environments/" class="external-link" target="_blank">virtual environment</a> oluşturup aktive edin ve sonra FastAPI'ı kurun:
<div class="termy"> <div class="termy">
```console ```console
$ pip install "uvicorn[standard]" $ pip install "fastapi[standard]"
---> 100% ---> 100%
``` ```
</div> </div>
## Örnek **Not**: Tüm terminallerde çalıştığından emin olmak için `"fastapi[standard]"` ifadesini tırnak içinde kullandığınızdan emin olun.
### Kodu Oluşturalım ## Örnek { #example }
* `main.py` adında bir dosya oluşturup içine şu kodu yapıştıralım: ### Oluşturalım { #create-it }
Şu içerikle `main.py` adlı bir dosya oluşturun:
```Python ```Python
from typing import Union from typing import Union
@ -175,9 +179,9 @@ def read_item(item_id: int, q: Union[str, None] = None):
``` ```
<details markdown="1"> <details markdown="1">
<summary>Ya da <code>async def</code>...</summary> <summary>Veya <code>async def</code> kullanın...</summary>
Eğer kodunuzda `async` / `await` varsa, `async def` kullanalım: Kodunuz `async` / `await` kullanıyorsa, `async def` kullanın:
```Python hl_lines="9 14" ```Python hl_lines="9 14"
from typing import Union from typing import Union
@ -199,22 +203,35 @@ async def read_item(item_id: int, q: Union[str, None] = None):
**Not**: **Not**:
Eğer bu konu hakkında bilginiz yoksa <a href="https://fastapi.tiangolo.com/tr/async/#in-a-hurry" target="_blank">`async` ve `await`</a> dokümantasyonundaki _"Aceleniz mi var?"_ kısmını kontrol edebilirsiniz. Bilmiyorsanız, dokümanlardaki <a href="https://fastapi.tiangolo.com/tr/async/#in-a-hurry" target="_blank">`async` ve `await`</a> hakkında _"Aceleniz mi var?"_ bölümüne bakın.
</details> </details>
### Kodu Çalıştıralım ### Çalıştıralım { #run-it }
Sunucuyu aşağıdaki komutla çalıştıralım: Sunucuyu şu komutla çalıştırın:
<div class="termy"> <div class="termy">
```console ```console
$ uvicorn main:app --reload $ 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: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720] INFO: Started reloader process [2248755] using WatchFiles
INFO: Started server process [28722] INFO: Started server process [2248757]
INFO: Waiting for application startup. INFO: Waiting for application startup.
INFO: Application startup complete. INFO: Application startup complete.
``` ```
@ -222,54 +239,54 @@ INFO: Application startup complete.
</div> </div>
<details markdown="1"> <details markdown="1">
<summary><code>uvicorn main:app --reload</code> komutuyla ilgili...</summary> <summary><code>fastapi dev main.py</code> komutu hakkında...</summary>
`uvicorn main:app` komutunu şu şekilde açıklayabiliriz: `fastapi dev` komutu `main.py` dosyanızı okur, içindeki **FastAPI** uygulamasını tespit eder ve <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a> kullanarak bir sunucu başlatır.
* `main`: dosya olan `main.py` (yani Python "modülü"). Varsayılan olarak `fastapi dev`, local geliştirme için auto-reload etkin şekilde başlar.
* `app`: ise `main.py` dosyasının içerisinde `app = FastAPI()` satırında oluşturduğumuz `FastAPI` nesnesi.
* `--reload`: kod değişikliklerinin ardından sunucuyu otomatik olarak yeniden başlatır. Bu parameteyi sadece geliştirme aşamasında kullanmalıyız. Daha fazlasını <a href="https://fastapi.tiangolo.com/tr/fastapi-cli/" target="_blank">FastAPI CLI dokümanlarında</a> okuyabilirsiniz.
</details> </details>
### Şimdi de Kontrol Edelim ### Kontrol Edelim { #check-it }
Tarayıcımızda şu bağlantıyı açalım <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>. Tarayıcınızda şu adresi açın: <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
Aşağıdaki gibi bir JSON yanıtıyla karşılaşacağız: Aşağıdaki gibi bir JSON response göreceksiniz:
```JSON ```JSON
{"item_id": 5, "q": "somequery"} {"item_id": 5, "q": "somequery"}
``` ```
Az önce oluşturduğumuz API: Şöyle bir API oluşturmuş oldunuz:
* `/` ve `/items/{item_id}` <abbr title="Adres / Yol: Path ">_yollarına_</abbr> HTTP isteği alabilir. * `/` ve `/items/{item_id}` _path_'lerinde HTTP request'leri alır.
* İki _yolda_ `GET` <em>operasyonlarını</em> (HTTP _metodları_ olarak da bilinen) kabul ediyor. * Her iki _path_ de `GET` <em>operasyonlarını</em> (HTTP _method_'ları olarak da bilinir) kabul eder.
* `/items/{item_id}` _yolu_ `item_id` adında bir _yol parametresine_ sahip ve bu parametre `int` değer almak zorundadır. * `/items/{item_id}` _path_'i `item_id` adında, `int` olması gereken bir _path parametresi_ne sahiptir.
* `/items/{item_id}` _yolu_ `q` adında bir _yol parametresine_ sahip ve bu parametre opsiyonel olmakla birlikte, `str` değer almak zorundadır. * `/items/{item_id}` _path_'i `q` adında opsiyonel bir `str` _query parametresi_ne sahiptir.
### Etkileşimli API Dokümantasyonu ### Etkileşimli API dokümanları { #interactive-api-docs }
Şimdi <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> bağlantısını açalım. Şimdi <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> adresine gidin.
<a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a> tarafından sağlanan otomatik etkileşimli bir API dokümantasyonu göreceğiz: Otomatik etkileşimli API dokümantasyonunu göreceksiniz (<a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a> tarafından sağlanır):
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
### Alternatif API Dokümantasyonu ### Alternatif API dokümanları { #alternative-api-docs }
Şimdi <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> bağlantısını açalım. Ve şimdi <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> adresine gidin.
<a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> tarafından sağlanan otomatik dokümantasyonu göreceğiz: Alternatif otomatik dokümantasyonu göreceksiniz (<a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> tarafından sağlanır):
![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
## Örneği Güncelleyelim ## Örneği Güncelleyelim { #example-upgrade }
Şimdi `main.py` dosyasını, `PUT` isteğiyle birlikte bir gövde alacak şekilde değiştirelim. Şimdi `main.py` dosyasını, bir `PUT` request'inden bir body alacak şekilde değiştirin.
<abbr title="Gövde: Body">Gövde</abbr>yi Pydantic sayesinde standart python tiplerini kullanarak tanımlayalım. Pydantic sayesinde, standard Python tiplerini kullanarak body'yi tanımlayın.
```Python hl_lines="4 9-12 25-27" ```Python hl_lines="4 9-12 25-27"
from typing import Union from typing import Union
@ -301,174 +318,248 @@ def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id} return {"item_name": item.name, "item_id": item_id}
``` ```
Sunucu otomatik olarak yeniden başlamış olmalı (çünkü yukarıda `uvicorn` komutuyla birlikte `--reload` parametresini kullandık). `fastapi dev` sunucusu otomatik olarak reload etmelidir.
### Etkileşimli API Dokümantasyonundaki Değişimi Görelim ### Etkileşimli API dokümanları güncellemesi { #interactive-api-docs-upgrade }
Şimdi <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> bağlantısına tekrar gidelim. Şimdi <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> adresine gidin.
* Etkileşimli API dokümantasyonu, yeni gövdede dahil olmak üzere otomatik olarak güncellenmiş olacak: * Etkileşimli API dokümantasyonu, yeni body dahil olacak şekilde otomatik olarak güncellenecek:
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
* "Try it out" butonuna tıklayalım, bu işlem API parametleri üzerinde değişiklik yapmamıza ve doğrudan API ile etkileşime geçmemize imkan sağlayacak: * "Try it out" butonuna tıklayın, bu size parametreleri doldurma ve doğrudan API ile etkileşime geçme imkanı verir:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)
* Şimdi "Execute" butonuna tıklayalım, kullanıcı arayüzü API'ımız ile bağlantı kurup parametreleri gönderecek ve sonucu ekranımıza getirecek: * Ardından "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](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)
### Alternatif API Dokümantasyonundaki Değişimi Görelim ### Alternatif API dokümanları güncellemesi { #alternative-api-docs-upgrade }
Şimdi ise <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> bağlantısına tekrar gidelim. Ve şimdi <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> adresine gidin.
* Alternatif dokümantasyonda yaptığımız değişiklikler ile birlikte yeni sorgu parametresi ve gövde bilgisi ile güncelemiş olacak: * Alternatif dokümantasyon da yeni query parametresi ve body'yi yansıtacak:
![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
### Özet ### Özet { #recap }
Özetlemek gerekirse, parametrelerin, gövdenin, vb. veri tiplerini fonksiyon parametreleri olarak **bir kere** tanımlıyoruz. Özetle, parametrelerin, body'nin, vb. tiplerini fonksiyon parametreleri olarak **bir kere** tanımlarsınız.
Bu işlemi standart modern Python tipleriyle yapıyoruz. Bunu standart modern Python tipleriyle yaparsınız.
Yeni bir sözdizimi yapısını, bir kütüphane özel metod veya sınıfları öğrenmeye gerek yoktur. Yeni bir sözdizimi, belirli bir kütüphanenin method'ları veya class'ları, vb. öğrenmek zorunda değilsiniz.
Hepsi sadece **Python** standartlarına dayalıdır. Sadece standart **Python**.
Örnek olarak, `int` tanımlamak için: Örneğin bir `int` için:
```Python ```Python
item_id: int item_id: int
``` ```
ya da daha kompleks herhangi bir python modelini tanımlayabiliriz, örneğin `Item` modeli için: veya daha karmaşık bir `Item` modeli için:
```Python ```Python
item: Item item: Item
``` ```
...ve sadece kısa bir parametre tipi belirterek elde ettiklerimiz: ...ve bu tek tanımla şunları elde edersiniz:
* Editör desteğiyle birlikte: * Editör desteği, şunlar dahil:
* Otomatik tamamlama. * Completion.
* Tip kontrolü. * Tip kontrolleri.
* Veri Doğrulama: * Verinin doğrulanması:
* Veri geçerli değilse, otomatik olarak açıklayıcı hatalar gösterir. * Data geçersiz olduğunda otomatik ve net hatalar.
* Çok <abbr title="Derin / İç içe: Nested">derin</abbr> JSON nesnelerinde bile doğrulama yapar. * Çok derin iç içe JSON nesnelerinde bile doğrulama.
* Gelen verinin <abbr title="Dönüşüm: serialization, parsing, marshalling olarak da biliniyor">dönüşümünü</abbr> aşağıdaki veri tiplerini kullanarak gerçekleştirir: * Girdi verisinin <abbr title="conversion - dönüşüm: serialization, parsing, marshalling olarak da bilinir">Conversion</abbr>'ı: network'ten gelen veriyi Python data ve tiplerine dönüştürme. Şuradan okuma:
* JSON. * JSON.
* Yol parametreleri. * Path parametreleri.
* Sorgu parametreleri. * Query parametreleri.
* Çerezler. * Cookie'ler.
* Headers. * Header'lar.
* Formlar. * Form'lar.
* Dosyalar. * Dosyalar.
* Giden verinin <abbr title="Dönüşüm: serialization, parsing, marshalling olarak da biliniyor">dönüşümünü</abbr> aşağıdaki veri tiplerini kullanarak gerçekleştirir (JSON olarak): * Çıktı verisinin <abbr title="conversion - dönüşüm: serialization, parsing, marshalling olarak da bilinir">Conversion</abbr>'ı: Python data ve tiplerinden network verisine dönüştürme (JSON olarak):
* Python tiplerinin (`str`, `int`, `float`, `bool`, `list`, vb) dönüşümü. * Python tiplerininüştürme (`str`, `int`, `float`, `bool`, `list`, vb).
* `datetime` nesnesi. * `datetime` nesneleri.
* `UUID` nesnesi. * `UUID` nesneleri.
* Veritabanı modelleri. * Veritabanı modelleri.
* ve çok daha fazlası... * ...ve daha fazlası.
* 2 alternatif kullanıcı arayüzü dahil olmak üzere, otomatik etkileşimli API dokümantasyonu sağlar: * 2 alternatif kullanıcı arayüzü dahil olmak üzere otomatik etkileşimli API dokümantasyonu:
* Swagger UI. * Swagger UI.
* ReDoc. * ReDoc.
--- ---
Az önceki örneğe geri dönelim, **FastAPI**'ın yapacaklarına bir bakış atalım: Bir önceki kod örneğine geri dönersek, **FastAPI** şunları yapar:
* `item_id`'nin `GET` ve `PUT` istekleri için, yolda olup olmadığının kontol edecek. * `GET` ve `PUT` request'leri için path'te bir `item_id` olduğunu doğrular.
* `item_id`'nin `GET` ve `PUT` istekleri için, tipinin `int` olduğunu doğrulayacak. * `GET` ve `PUT` request'leri için `item_id`'nin `int` tipinde olduğunu doğrular.
* Eğer değilse, sebebini belirten bir hata mesajı gösterecek. * Değilse, client faydalı ve net bir hata görür.
* Opsiyonel bir `q` parametresinin `GET` isteği içinde (`http://127.0.0.1:8000/items/foo?q=somequery` gibi) olup olmadığını kontrol edecek * `GET` request'leri için `q` adında opsiyonel bir query parametresi olup olmadığını kontrol eder (ör. `http://127.0.0.1:8000/items/foo?q=somequery`).
* `q` parametresini `= None` ile oluşturduğumuz için, opsiyonel bir parametre olacak. * `q` parametresi `= None` ile tanımlandığı için opsiyoneldir.
* Eğer `None` olmasa zorunlu bir parametre olacaktı (`PUT` metodunun gövdesinde olduğu gibi). * `None` olmasaydı zorunlu olurdu (`PUT` durumunda body gibi).
* `PUT` isteği için `/items/{item_id}`'nin gövdesini, JSON olarak doğrulayıp okuyacak: * `/items/{item_id}` için `PUT` request'lerinde body'yi JSON olarak okur:
* `name` adında zorunlu bir parametre olup olmadığını ve varsa tipinin `str` olup olmadığını kontol edecek. * `name` adında, `str` olması gereken zorunlu bir attribute içerip içermediğini kontrol eder.
* `price` adında zorunlu bir parametre olup olmadığını ve varsa tipinin `float` olup olmadığını kontol edecek. * `price` adında, `float` olması gereken zorunlu bir attribute içerip içermediğini kontrol eder.
* `is_offer` adında opsiyonel bir parametre olup olmadığını ve varsa tipinin `float` olup olmadığını kontol edecek. * Varsa, `is_offer` adında, `bool` olması gereken opsiyonel bir attribute içerip içermediğini kontrol eder.
* Bunların hepsi en derin JSON nesnelerinde bile çalışacak. * Tüm bunlar çok derin iç içe JSON nesneleri için de çalışır.
* Verilerin JSON'a ve JSON'ın python nesnesine dönüşümü otomatik olarak yapılacak. * JSON'dan ve JSON'a otomatik dönüşüm yapar.
* Her şeyi OpenAPI ile uyumlu bir şekilde otomatik olarak dokümanlayacak ve bunlarda aşağıdaki gibi kullanılabilecek: * Her şeyi OpenAPI ile dokümante eder; bu da şunlar tarafından kullanılabilir:
* Etkileşimli dokümantasyon sistemleri. * Etkileşimli dokümantasyon sistemleri.
* Bir çok programlama dili için otomatik istemci kodu üretim sistemleri. * Birçok dil için otomatik client kodu üretim sistemleri.
* İki ayrı etkileşimli dokümantasyon arayüzünü doğrudan sağlayacak. * Doğrudan 2 etkileşimli dokümantasyon web arayüzü sağlar.
--- ---
Daha yeni başladık ama çalışma mantığını çoktan anlamış oldunuz. Daha yeni yüzeyini kazıdık, ama her şeyin nasıl çalıştığı hakkında fikri zaten edindiniz.
Şimdi aşağıdaki satırı değiştirmeyi deneyin: Şu satırı değiştirmeyi deneyin:
```Python ```Python
return {"item_name": item.name, "item_id": item_id} return {"item_name": item.name, "item_id": item_id}
``` ```
...bundan: ...şundan:
```Python ```Python
... "item_name": item.name ... ... "item_name": item.name ...
``` ```
...buna: ...şuna:
```Python ```Python
... "item_price": item.price ... ... "item_price": item.price ...
``` ```
...ve editörünün veri tiplerini bildiğini ve otomatik tamamladığını göreceksiniz: ...ve editörünüzün attribute'ları otomatik tamamladığını ve tiplerini bildiğini görün:
![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
Daha fazal özellik içeren, daha eksiksiz bir örnek için <a href="https://fastapi.tiangolo.com/tr/tutorial/">Öğretici - Kullanıcı Rehberi</a> sayfasını ziyaret edebilirsin. Daha fazla özellik içeren daha eksiksiz bir örnek için <a href="https://fastapi.tiangolo.com/tr/tutorial/">Öğretici - Kullanıcı Rehberi</a> sayfasına bakın.
**Spoiler**: Öğretici - Kullanıcı rehberi şunları içerir: **Spoiler alert**: öğretici - kullanıcı rehberi şunları içerir:
* **Parameterlerin**, **headers**, **çerezler**, **form alanları** ve **dosyalar** olarak tanımlanması. * **Parametrelerin**; **header**'lar, **cookie**'ler, **form alanları** ve **dosyalar** gibi farklı yerlerden tanımlanması.
* `maximum_length` ya da `regex` gibi **doğrulama kısıtlamalarının** nasıl yapılabileceği. * `maximum_length` veya `regex` gibi **doğrulama kısıtlamalarını** nasıl ayarlayacağınız.
* Çok güçlü ve kullanımı kolay **<abbr title="Bağımlılık Enjeksiyonu: components, resources, providers, services, injectables olarak da biliniyor.">Bağımlılık Enjeksiyonu</abbr>** sistemi oluşturmayı. * Çok güçlü ve kullanımı kolay bir **<abbr title="Dependency Injection - Bağımlılık Enjeksiyonu: components, resources, providers, services, injectables olarak da bilinir">Dependency Injection</abbr>** sistemi.
* Güvenlik ve kimlik doğrulama, **JWT tokenleri** ile **OAuth2** desteği, ve **HTTP Basic** doğrulama. * **JWT token**'ları ile **OAuth2** desteği ve **HTTP Basic** auth dahil güvenlik ve kimlik doğrulama.
* İleri seviye fakat bir o kadarda basit olan **çok derin JSON modelleri** (Pydantic sayesinde). * **Çok derin iç içe JSON modelleri** tanımlamak için daha ileri (ama aynı derecede kolay) teknikler (Pydantic sayesinde).
* **GraphQL** entegrasyonu: <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> ve diğer kütüphaneleri kullanarak. * <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> ve diğer kütüphanelerle **GraphQL** entegrasyonu.
* Diğer ekstra özellikler (Starlette sayesinde): * Birçok ekstra özellik (Starlette sayesinde) olarak:
* **WebSocketler** * **WebSocket**'ler
* HTTPX ve `pytest` sayesinde aşırı kolay testler. * HTTPX ve `pytest` tabanlı son derece kolay testler
* **CORS** * **CORS**
* **Cookie Sessions** * **Cookie Sessions**
* ...ve daha fazlası. * ...ve daha fazlası.
## Performans ### Uygulamanızı Deploy Edin (opsiyonel) { #deploy-your-app-optional }
İsteğe bağlı olarak FastAPI uygulamanızı <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>'a deploy edebilirsiniz; henüz katılmadıysanız gidip bekleme listesine katılın. 🚀
Zaten bir **FastAPI Cloud** hesabınız varsa (bekleme listesinden sizi davet ettik 😉), uygulamanızı tek bir komutla deploy edebilirsiniz.
Deploy etmeden önce giriş yaptığınızdan emin olun:
<div class="termy">
```console
$ fastapi login
You are logged in to FastAPI Cloud 🚀
```
</div>
Ardından uygulamanızı deploy edin:
Bağımsız TechEmpower kıyaslamaları gösteriyor ki, Uvicorn ile çalıştırılan **FastAPI** uygulamaları <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">en hızlı Python framework'lerinden birisi</a>, sadece Starlette ve Uvicorn'dan yavaş, ki FastAPI bunların üzerine kurulu bir kütüphanedir. <div class="termy">
Daha fazla bilgi için, bu bölüme bir göz at <a href="https://fastapi.tiangolo.com/tr/benchmarks/" class="internal-link" target="_blank">Kıyaslamalar</a>. ```console
$ fastapi deploy
## Opsiyonel Gereksinimler Deploying to FastAPI Cloud...
Pydantic tarafında kullanılan: ✅ Deployment successful!
🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
```
</div>
Hepsi bu! Artık uygulamanıza bu URL'den erişebilirsiniz. ✨
#### FastAPI Cloud Hakkında { #about-fastapi-cloud }
**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>**, **FastAPI**'ın arkasındaki aynı yazar ve ekip tarafından geliştirildi.
Minimum eforla bir API'ı **geliştirme**, **deploy etme** ve **erişme** sürecini sadeleştirir.
FastAPI ile uygulama geliştirmenin aynı **developer experience**'ını, onları cloud'a **deploy etmeye** taşır. 🎉
FastAPI Cloud, *FastAPI and friends* açık kaynak projelerinin birincil sponsoru ve fon sağlayıcısıdır. ✨
#### Diğer cloud sağlayıcılarına deploy { #deploy-to-other-cloud-providers }
FastAPI açık kaynaklıdır ve standartlara dayanır. FastAPI uygulamalarını seçtiğiniz herhangi bir cloud sağlayıcısına deploy edebilirsiniz.
FastAPI uygulamalarını deploy etmek için cloud sağlayıcınızın rehberlerini takip edin. 🤓
## Performans { #performance }
Bağımsız TechEmpower kıyaslamaları, Uvicorn altında çalışan **FastAPI** uygulamalarını <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">mevcut en hızlı Python framework'lerinden biri</a> olarak gösteriyor; sadece Starlette ve Uvicorn'un (FastAPI tarafından dahili olarak kullanılan) altında. (*)
Daha iyi anlamak için <a href="https://fastapi.tiangolo.com/tr/benchmarks/" class="internal-link" target="_blank">Kıyaslamalar</a> bölümüne bakın.
## Bağımlılıklar { #dependencies }
FastAPI, Pydantic ve Starlette'a bağlıdır.
### `standard` Bağımlılıkları { #standard-dependencies }
FastAPI'ı `pip install "fastapi[standard]"` ile kurduğunuzda, `standard` opsiyonel bağımlılıklar grubuyla birlikte gelir:
Pydantic tarafından kullanılanlar:
* <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email-validator</code></a> - email doğrulaması için. * <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email-validator</code></a> - email doğrulaması için.
* <a href="https://docs.pydantic.dev/latest/usage/pydantic_settings/" target="_blank"><code>pydantic-settings</code></a> - ayar yönetimi için.
* <a href="https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/" target="_blank"><code>pydantic-extra-types</code></a> - Pydantic ile birlikte kullanılabilecek ek tipler için.
Starlette tarafında kullanılan: Starlette tarafından kullanılanlar:
* <a href="https://www.python-httpx.org" target="_blank"><code>httpx</code></a> - `TestClient` kullanmak istiyorsanız gereklidir.
* <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - varsayılan template konfigürasyonunu kullanmak istiyorsanız gereklidir.
* <a href="https://github.com/Kludex/python-multipart" target="_blank"><code>python-multipart</code></a> - `request.form()` ile form <abbr title="HTTP request'inden gelen string'i Python data'sına dönüştürme">"parsing"</abbr> desteği vermek istiyorsanız gereklidir.
FastAPI tarafından kullanılanlar:
* <a href="https://www.python-httpx.org" target="_blank"><code>httpx</code></a> - Eğer `TestClient` yapısını kullanacaksanız gereklidir. * <a href="https://www.uvicorn.dev" target="_blank"><code>uvicorn</code></a> - uygulamanızı yükleyen ve servis eden sunucu için. Buna, yüksek performanslı servis için gereken bazı bağımlılıkları (ör. `uvloop`) içeren `uvicorn[standard]` da dahildir.
* <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - Eğer varsayılan template konfigürasyonunu kullanacaksanız gereklidir. * `fastapi-cli[standard]` - `fastapi` komutunu sağlamak için.
* <a href="https://github.com/Kludex/python-multipart" target="_blank"><code>python-multipart</code></a> - Eğer `request.form()` ile form <abbr title="HTTP isteği ile gelen string veriyi Python nesnesine çevirme.">dönüşümü</abbr> desteğini kullanacaksanız gereklidir. * Buna, FastAPI uygulamanızı <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>'a deploy etmenizi sağlayan `fastapi-cloud-cli` dahildir.
* <a href="https://pythonhosted.org/itsdangerous/" target="_blank"><code>itsdangerous</code></a> - `SessionMiddleware` desteği için gerekli.
* <a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank"><code>pyyaml</code></a> - `SchemaGenerator` desteği için gerekli (Muhtemelen FastAPI kullanırken ihtiyacınız olmaz).
Hem FastAPI hem de Starlette tarafından kullanılan: ### `standard` Bağımlılıkları Olmadan { #without-standard-dependencies }
`standard` opsiyonel bağımlılıkları dahil etmek istemiyorsanız, `pip install "fastapi[standard]"` yerine `pip install fastapi` ile kurabilirsiniz.
### `fastapi-cloud-cli` Olmadan { #without-fastapi-cloud-cli }
FastAPI'ı standard bağımlılıklarla ama `fastapi-cloud-cli` olmadan kurmak istiyorsanız, `pip install "fastapi[standard-no-fastapi-cloud-cli]"` ile kurabilirsiniz.
### Ek Opsiyonel Bağımlılıklar { #additional-optional-dependencies }
Kurmak isteyebileceğiniz bazı ek bağımlılıklar vardır.
Ek opsiyonel Pydantic bağımlılıkları:
* <a href="https://docs.pydantic.dev/latest/usage/pydantic_settings/" target="_blank"><code>pydantic-settings</code></a> - ayar yönetimi için.
* <a href="https://docs.pydantic.dev/latest/usage/types/extra_types/extra_types/" target="_blank"><code>pydantic-extra-types</code></a> - Pydantic ile kullanılacak ek tipler için.
* <a href="https://www.uvicorn.dev" target="_blank"><code>uvicorn</code></a> - oluşturduğumuz uygulamayı servis edecek web sunucusu görevini üstlenir. Ek opsiyonel FastAPI bağımlılıkları:
* <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - `ORJSONResponse` kullanacaksanız gereklidir.
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - `UJSONResponse` kullanacaksanız gerekli.
Bunların hepsini `pip install fastapi[all]` ile yükleyebilirsin. * <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - `ORJSONResponse` kullanmak istiyorsanız gereklidir.
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - `UJSONResponse` kullanmak istiyorsanız gereklidir.
## Lisans ## Lisans { #license }
Bu proje, MIT lisansı şartları altında lisanslanmıştır. Bu proje, MIT lisansı şartları altında lisanslanmıştır.

4
docs/tr/docs/learn/index.md

@ -1,5 +1,5 @@
# Öğren # Öğren { #learn }
**FastAPI** öğrenmek için giriş bölümleri ve öğreticiler burada yer alıyor. **FastAPI** öğrenmek için giriş bölümleri ve öğreticiler burada yer alıyor.
Burayı, bir **kitap**, bir **kurs**, ve FastAPI öğrenmenin **resmi** ve önerilen yolu olarak düşünülebilirsiniz. 😎 Burayı, bir **kitap**, bir **kurs**, FastAPI öğrenmenin **resmi** ve önerilen yolu olarak düşünebilirsiniz. 😎

112
docs/tr/docs/project-generation.md

@ -1,84 +1,28 @@
# Proje oluşturma - Şablonlar # Full Stack FastAPI Şablonu { #full-stack-fastapi-template }
Başlamak için bir proje oluşturucu kullanabilirsiniz, çünkü sizin için önceden yapılmış birçok başlangıç ​​kurulumu, güvenlik, veritabanı ve temel API endpoinlerini içerir. Şablonlar genellikle belirli bir kurulumla gelir; ancak esnek ve özelleştirilebilir olacak şekilde tasarlanır. Bu, onları projenizin gereksinimlerine göre değiştirip uyarlamanıza olanak tanır ve onları mükemmel bir başlangıç noktası yapar. 🏁
Bir proje oluşturucu, her zaman kendi ihtiyaçlarınıza göre güncellemeniz ve uyarlamanız gereken esnek bir kuruluma sahip olacaktır, ancak bu, projeniz için iyi bir başlangıç ​​noktası olabilir. Bu şablonu başlangıç için kullanabilirsiniz; çünkü ilk kurulumun büyük bir kısmını, güvenliği, veritabanını ve bazı API endpoint'lerini sizin için zaten hazır halde içerir.
## Full Stack FastAPI PostgreSQL GitHub Repository: <a href="https://github.com/tiangolo/full-stack-fastapi-template" class="external-link" target="_blank">Full Stack FastAPI Template</a>
GitHub: <a href="https://github.com/tiangolo/full-stack-fastapi-postgresql" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-fastapi-postgresql</a> ## Full Stack FastAPI Şablonu - Teknoloji Stack'i ve Özellikler { #full-stack-fastapi-template-technology-stack-and-features }
### Full Stack FastAPI PostgreSQL - Özellikler - ⚡ Python backend API için [**FastAPI**](https://fastapi.tiangolo.com).
- 🧰 Python SQL veritabanı etkileşimleri (ORM) için [SQLModel](https://sqlmodel.tiangolo.com).
* Full **Docker** entegrasyonu (Docker based). - 🔍 FastAPI tarafından kullanılan, veri doğrulama ve ayar yönetimi için [Pydantic](https://docs.pydantic.dev).
* Docker Swarm Mode ile deployment. - 💾 SQL veritabanı olarak [PostgreSQL](https://www.postgresql.org).
* **Docker Compose** entegrasyonu ve lokal geliştirme için optimizasyon. - 🚀 frontend için [React](https://react.dev).
* Uvicorn ve Gunicorn ile **Production ready** Python web server'ı. - 💃 TypeScript, hooks, Vite ve modern bir frontend stack'inin diğer parçaları kullanılır.
* Python <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">**FastAPI**</a> backend: - 🎨 frontend bileşenleri için [Tailwind CSS](https://tailwindcss.com) ve [shadcn/ui](https://ui.shadcn.com).
* **Hızlı**: **NodeJS** ve **Go** ile eşit, çok yüksek performans (Starlette ve Pydantic'e teşekkürler). - 🤖 Otomatik oluşturulan bir frontend client.
* **Sezgisel**: Editor desteğı. <abbr title="auto-complete, IntelliSense gibi isimlerle de bilinir">Otomatik tamamlama</abbr>. Daha az debugging. - 🧪 End-to-End test için [Playwright](https://playwright.dev).
* **Kolay**: Kolay öğrenip kolay kullanmak için tasarlandı. Daha az döküman okuma daha çok iş. - 🦇 Dark mode desteği.
* **Kısa**: Minimum kod tekrarı. Her parametre bildiriminde birden çok özellik. - 🐋 geliştirme ve production için [Docker Compose](https://www.docker.com).
* **Güçlü**: Production-ready. Otomatik interaktif dökümantasyon. - 🔒 Varsayılan olarak güvenli parola hashing.
* **Standartlara dayalı**: API'ler için açık standartlara dayanır (ve tamamen uyumludur): <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> ve <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Şeması</a>. - 🔑 JWT (JSON Web Token) authentication.
* <a href="https://fastapi.tiangolo.com/features/" class="external-link" target="_blank">**Birçok diger özelliği**</a> dahili otomatik doğrulama, serialization, interaktif dokümantasyon, OAuth2 JWT token ile authentication, vb. - 📫 Email tabanlı parola kurtarma.
* **Güvenli şifreleme** . - ✅ [Pytest](https://pytest.org) ile testler.
* **JWT token** kimlik doğrulama. - 📞 reverse proxy / load balancer olarak [Traefik](https://traefik.io).
* **SQLAlchemy** models (Flask dan bağımsızdır. Celery worker'ları ile kullanılabilir). - 🚢 Docker Compose kullanarak deployment talimatları; otomatik HTTPS sertifikalarını yönetmek için bir frontend Traefik proxy'sinin nasıl kurulacağı dahil.
* Kullanıcılar için temel başlangıç ​​modeli (gerektiği gibi değiştirin ve kaldırın). - 🏭 GitHub Actions tabanlı CI (continuous integration) ve CD (continuous deployment).
* **Alembic** migration.
* **CORS** (Cross Origin Resource Sharing).
* **Celery** worker'ları ile backend içerisinden seçilen işleri çalıştırabilirsiniz.
* **Pytest**'e dayalı, Docker ile entegre REST backend testleri ile veritabanından bağımsız olarak tam API etkileşimini test edebilirsiniz. Docker'da çalıştığı için her seferinde sıfırdan yeni bir veri deposu oluşturabilir (böylece ElasticSearch, MongoDB, CouchDB veya ne istersen kullanabilirsin ve sadece API'nin çalışıp çalışmadığını test edebilirsin).
* Atom Hydrogen veya Visual Studio Code Jupyter gibi uzantılarla uzaktan veya Docker içi geliştirme için **Jupyter Çekirdekleri** ile kolay Python entegrasyonu.
* **Vue** ile frontend:
* Vue CLI ile oluşturulmuş.
* Dahili **JWT kimlik doğrulama**.
* Dahili Login.
* Login sonrası, Kontrol paneli.
* Kullanıcı oluşturma ve düzenleme kontrol paneli
* Kendi kendine kullanıcı sürümü.
* **Vuex**.
* **Vue-router**.
* **Vuetify** güzel material design kompanentleri için.
* **TypeScript**.
* **Nginx** tabanlı Docker sunucusu (Vue-router için yapılandırılmış).
* Docker ile multi-stage yapı, böylece kodu derlemeniz, kaydetmeniz veya işlemeniz gerekmez.
* Derleme zamanında Frontend testi (devre dışı bırakılabilir).
* Mümkün olduğu kadar modüler yapılmıştır, bu nedenle kutudan çıktığı gibi çalışır, ancak Vue CLI ile yeniden oluşturabilir veya ihtiyaç duyduğunuz şekilde oluşturabilir ve istediğinizi yeniden kullanabilirsiniz.
* **PGAdmin** PostgreSQL database admin tool'u, PHPMyAdmin ve MySQL ile kolayca değiştirilebilir.
* **Flower** ile Celery job'larını monitörleme.
* **Traefik** ile backend ve frontend arasında yük dengeleme, böylece her ikisini de aynı domain altında, path ile ayrılmış, ancak farklı kapsayıcılar tarafından sunulabilirsiniz.
* Let's Encrypt **HTTPS** sertifikalarının otomatik oluşturulması dahil olmak üzere Traefik entegrasyonu.
* GitLab **CI** (sürekli entegrasyon), backend ve frontend testi dahil.
## Full Stack FastAPI Couchbase
GitHub: <a href="https://github.com/tiangolo/full-stack-fastapi-couchbase" class="external-link" target="_blank">https://github.com/tiangolo/full-stack-fastapi-couchbase</a>
⚠️ **UYARI** ⚠️
Sıfırdan bir projeye başlıyorsanız alternatiflerine bakın.
Örneğin, <a href="https://github.com/tiangolo/full-stack-fastapi-postgresql" class="external-link" target="_blank">Full Stack FastAPI PostgreSQL</a> daha iyi bir alternatif olabilir, aktif olarak geliştiriliyor ve kullanılıyor. Ve yeni özellik ve ilerlemelere sahip.
İsterseniz Couchbase tabanlı generator'ı kullanmakta özgürsünüz, hala iyi çalışıyor olmalı ve onunla oluşturulmuş bir projeniz varsa bu da sorun değil (ve muhtemelen zaten ihtiyaçlarınıza göre güncellediniz).
Bununla ilgili daha fazla bilgiyi repo belgelerinde okuyabilirsiniz.
## Full Stack FastAPI MongoDB
... müsaitliğime ve diğer faktörlere bağlı olarak daha sonra gelebilir. 😅 🎉
## Machine Learning modelleri, spaCy ve FastAPI
GitHub: <a href="https://github.com/microsoft/cookiecutter-spacy-fastapi" class="external-link" target="_blank">https://github.com/microsoft/cookiecutter-spacy-fastapi</a>
### Machine Learning modelleri, spaCy ve FastAPI - Features
* **spaCy** NER model entegrasyonu.
* **Azure Cognitive Search** yerleşik istek biçimi.
* Uvicorn ve Gunicorn ile **Production ready** Python web server'ı.
* Dahili **Azure DevOps** Kubernetes (AKS) CI/CD deployment.
* **Multilingual**, Proje kurulumu sırasında spaCy'nin yerleşik dillerinden birini kolayca seçin.
* **Esnetilebilir** diğer frameworkler (Pytorch, Tensorflow) ile de çalışır sadece spaCy değil.

421
docs/tr/docs/python-types.md

@ -1,76 +1,74 @@
# Python Veri Tiplerine Giriş # Python Tiplerine Giriş { #python-types-intro }
Python isteğe bağlı olarak "tip belirteçlerini" destekler. Python, isteğe bağlı "type hints" (diğer adıyla "type annotations") desteğine sahiptir.
**"Tip belirteçleri"** bir değişkenin <abbr title="örneğin: str, int, float, bool">tipinin</abbr> belirtilmesine olanak sağlayan özel bir sözdizimidir. Bu **"type hints"** veya annotations, bir değişkenin <abbr title="for example: str, int, float, bool">type</abbr>'ını bildirmeye olanak sağlayan özel bir sözdizimidir.
Değişkenlerin tiplerini belirterek editör ve araçlardan daha fazla destek alabilirsiniz. Değişkenleriniz için type bildirerek, editörler ve araçlar size daha iyi destek sağlayabilir.
Bu pythonda tip belirteçleri için **hızlı bir başlangıç / bilgi tazeleme** rehberidir . Bu rehber **FastAPI** kullanmak için gereken minimum konuyu kapsar ki bu da çok az bir miktardır. Bu, Python type hints hakkında sadece **hızlı bir eğitim / bilgi tazeleme** yazısıdır. **FastAPI** ile kullanmak için gerekli olan minimum kısmı kapsar... ki bu aslında çok azdır.
**FastAPI' nin** tamamı bu tür tip belirteçleri ile donatılmıştır ve birçok avantaj sağlamaktadır. **FastAPI** tamamen bu type hints'lere dayanır; bunlar ona pek çok avantaj ve fayda sağlar.
**FastAPI** kullanmayacak olsanız bile tür belirteçleri hakkında bilgi edinmenizde fayda var. Ama **FastAPI**'yi hiç kullanmasanız bile, bunlar hakkında biraz öğrenmek size fayda sağlar.
/// note | Not /// note | Not
Python uzmanıysanız ve tip belirteçleri ilgili her şeyi zaten biliyorsanız, sonraki bölüme geçin. Python uzmanıysanız ve type hints ile ilgili her şeyi zaten biliyorsanız, sonraki bölüme geçin.
/// ///
## Motivasyon ## Motivasyon { #motivation }
Basit bir örnek ile başlayalım: Basit bir örnekle başlayalım:
{* ../../docs_src/python_types/tutorial001.py *} {* ../../docs_src/python_types/tutorial001_py39.py *}
Bu programı çağırmak şunu çıktılar:
Programın çıktısı:
``` ```
John Doe John Doe
``` ```
Fonksiyon sırayla şunları yapar: Fonksiyon şunları yapar:
* `first_name` ve `last_name` değerlerini alır.
* `title()` ile değişkenlerin ilk karakterlerini büyütür.
* Değişkenleri aralarında bir boşlukla beraber <abbr title="Onları bir bütün olarak sırayla birleştirir.">Birleştirir</abbr>.
{* ../../docs_src/python_types/tutorial001.py hl[2] *} * Bir `first_name` ve `last_name` alır.
* Her birinin ilk harfini `title()` ile büyük harfe çevirir.
* Ortada bir boşluk olacak şekilde <abbr title="Puts them together, as one. With the contents of one after the other.">Concatenates</abbr> eder.
{* ../../docs_src/python_types/tutorial001_py39.py hl[2] *}
### Düzenle ### Düzenleyelim { #edit-it }
Bu çok basit bir program. Bu çok basit bir program.
Ama şimdi sıfırdan yazdığınızı hayal edin. Ama şimdi bunu sıfırdan yazdığınızı hayal edin.
Bir noktada fonksiyonun tanımına başlayacaktınız, parametreleri hazır hale getirdiniz... Bir noktada fonksiyonun tanımına başlamış olurdunuz, parametreleriniz hazırdı...
Ama sonra "ilk harfi büyük harfe dönüştüren yöntemi" çağırmanız gerekir. Ama sonra "ilk harfi büyük harfe çeviren o method"u çağırmanız gerekir.
`upper` mıydı ? Yoksa `uppercase`' mi? `first_uppercase`? `capitalize`? `upper` mıydı? `uppercase` miydi? `first_uppercase`? `capitalize`?
Ardından, programcıların en iyi arkadaşı olan otomatik tamamlama ile denediniz. Sonra, programcının eski dostu editör otomatik tamamlama ile denersiniz.
'first_name', ardından bir nokta ('.') yazıp otomatik tamamlamayı tetiklemek için 'Ctrl+Space' tuşlarına bastınız. Fonksiyonun ilk parametresi olan `first_name`'i yazarsınız, sonra bir nokta (`.`) koyarsınız ve ardından tamamlamayı tetiklemek için `Ctrl+Space`'e basarsınız.
Ancak, ne yazık ki, yararlı hiçbir şey elde edemediniz: Ama maalesef, işe yarar hiçbir şey gelmez:
<img src="/img/python-types/image01.png"> <img src="/img/python-types/image01.png">
### Tipleri ekle ### Tipleri ekleyin { #add-types }
Önceki sürümden sadece bir satırı değiştirelim. Önceki sürümden tek bir satırı değiştirelim.
Tam olarak bu parçayı, işlevin parametrelerini değiştireceğiz: Fonksiyonun parametreleri olan tam şu parçayı:
```Python ```Python
first_name, last_name first_name, last_name
``` ```
ve bu hale getireceğiz: şuna çevireceğiz:
```Python ```Python
first_name: str, last_name: str first_name: str, last_name: str
@ -78,58 +76,55 @@ ve bu hale getireceğiz:
Bu kadar. Bu kadar.
İşte bunlar "tip belirteçleri": Bunlar "type hints":
{* ../../docs_src/python_types/tutorial002.py hl[1] *}
{* ../../docs_src/python_types/tutorial002_py39.py hl[1] *}
Bu, aşağıdaki gibi varsayılan değerleri bildirmekle aynı şey değildir: Bu, şu şekilde varsayılan değerler bildirmekle aynı şey değildir:
```Python ```Python
first_name="john", last_name="doe" first_name="john", last_name="doe"
``` ```
Bu tamamen farklı birşey Bu farklı bir şey.
İki nokta üst üste (`:`) kullanıyoruz , eşittir (`=`) değil. Eşittir (`=`) değil, iki nokta üst üste (`:`) kullanıyoruz.
Normalde tip belirteçleri eklemek, kod üzerinde olacakları değiştirmez. Ve type hints eklemek normalde, onlarsız ne olacaktıysa olan şeyi değiştirmez.
Şimdi programı sıfırdan birdaha yazdığınızı hayal edin. Ama şimdi, type hints varken o fonksiyonu oluşturmanın ortasında olduğunuzu hayal edin.
Aynı noktada, `Ctrl+Space` ile otomatik tamamlamayı tetiklediniz ve şunu görüyorsunuz: Aynı noktada `Ctrl+Space` ile otomatik tamamlamayı tetiklemeyi denersiniz ve şunu görürsünüz:
<img src="/img/python-types/image02.png"> <img src="/img/python-types/image02.png">
Aradığınızı bulana kadar seçenekleri kaydırabilirsiniz: Bununla, seçenekleri görerek aşağı kaydırabilir, "tanıdık gelen" seçeneği bulana kadar ilerleyebilirsiniz:
<img src="/img/python-types/image03.png"> <img src="/img/python-types/image03.png">
## Daha fazla motivasyon ## Daha fazla motivasyon { #more-motivation }
Bu fonksiyon, zaten tür belirteçlerine sahip: Bu fonksiyona bakın, zaten type hints'e sahip:
{* ../../docs_src/python_types/tutorial003.py hl[1] *} {* ../../docs_src/python_types/tutorial003_py39.py hl[1] *}
Editör değişkenlerin tiplerini bildiği için, sadece tamamlama değil, hata kontrolleri de alırsınız:
Editör değişkenlerin tiplerini bildiğinden, yalnızca otomatik tamamlama değil, hata kontrolleri de sağlar:
<img src="/img/python-types/image04.png"> <img src="/img/python-types/image04.png">
Artık `age` değişkenini `str(age)` olarak kullanmanız gerektiğini biliyorsunuz: Artık bunu düzeltmeniz gerektiğini biliyorsunuz; `age`'i `str(age)` ile string'e çevirin:
{* ../../docs_src/python_types/tutorial004.py hl[2] *}
{* ../../docs_src/python_types/tutorial004_py39.py hl[2] *}
## Tip bildirme ## Tipleri bildirmek { #declaring-types }
Az önce tip belirteçlerinin en çok kullanıldığı yeri gördünüz. Type hints bildirmek için ana yeri, fonksiyon parametreleri olarak, az önce gördünüz.
**FastAPI**ile çalışırken tip belirteçlerini en çok kullanacağımız yer yine fonksiyonlardır. Bu, **FastAPI** ile de onları kullanacağınız ana yerdir.
### Basit tipler ### Basit tipler { #simple-types }
Yalnızca `str` değil, tüm standart Python tiplerinin bildirebilirsiniz. Sadece `str` değil, tüm standart Python tiplerini bildirebilirsiniz.
Örneğin şunları kullanabilirsiniz: Örneğin şunları kullanabilirsiniz:
@ -138,176 +133,332 @@ Yalnızca `str` değil, tüm standart Python tiplerinin bildirebilirsiniz.
* `bool` * `bool`
* `bytes` * `bytes`
{* ../../docs_src/python_types/tutorial005.py hl[1] *} {* ../../docs_src/python_types/tutorial005_py39.py hl[1] *}
### Tip parametreleri ile Generic tipler { #generic-types-with-type-parameters }
`dict`, `list`, `set` ve `tuple` gibi, başka değerleri içerebilen bazı veri yapıları vardır. Ve iç değerlerin de kendi tipi olabilir.
### Tip parametreleri ile Generic tipler İç tipleri olan bu tiplere "**generic**" tipler denir. Ve bunları, iç tipleriyle beraber bile bildirmek mümkündür.
"dict", "list", "set" ve "tuple" gibi diğer değerleri içerebilen bazı veri yapıları vardır. Ve dahili değerlerinin de tip belirtecleri olabilir. Bu tipleri ve iç tipleri bildirmek için standart Python modülü `typing`'i kullanabilirsiniz. Bu modül özellikle bu type hints'leri desteklemek için vardır.
Bu tipleri ve dahili tpileri bildirmek için standart Python modülünü "typing" kullanabilirsiniz. #### Python'un daha yeni sürümleri { #newer-versions-of-python }
Bu tür tip belirteçlerini desteklemek için özel olarak mevcuttur. `typing` kullanarak yapılan sözdizimi, Python 3.6'dan en yeni sürümlere kadar (Python 3.9, Python 3.10, vb. dahil) tüm sürümlerle **uyumludur**.
#### `List` Python geliştikçe, **daha yeni sürümler** bu type annotations için daha iyi destekle gelir ve çoğu durumda type annotations bildirmek için `typing` modülünü import edip kullanmanıza bile gerek kalmaz.
Örneğin `str` değerlerden oluşan bir `list` tanımlayalım. Projeniz için Python'un daha yeni bir sürümünü seçebiliyorsanız, bu ek sadelikten faydalanabilirsiniz.
From `typing`, import `List` (büyük harf olan `L` ile): Tüm dokümanlarda Python'un her sürümüyle uyumlu örnekler vardır (fark olduğunda).
{* ../../docs_src/python_types/tutorial006.py hl[1] *} Örneğin "**Python 3.6+**" Python 3.6 veya üstüyle (3.7, 3.8, 3.9, 3.10, vb. dahil) uyumlu demektir. Ve "**Python 3.9+**" Python 3.9 veya üstüyle (3.10, vb. dahil) uyumlu demektir.
Python'un **en son sürümlerini** kullanabiliyorsanız, en son sürüme ait örnekleri kullanın; bunlar **en iyi ve en basit sözdizimine** sahip olacaktır, örneğin "**Python 3.10+**".
Değişkenin tipini yine iki nokta üstüste (`:`) ile belirleyin. #### List { #list }
tip olarak `List` kullanın. Örneğin, `str` değerlerinden oluşan bir `list` olan bir değişken tanımlayalım.
Liste, bazı dahili tipleri içeren bir tür olduğundan, bunları köşeli parantez içine alırsınız: Değişkeni, aynı iki nokta üst üste (`:`) sözdizimi ile bildirin.
{* ../../docs_src/python_types/tutorial006.py hl[4] *} Tip olarak `list` yazın.
`list`, bazı iç tipleri barındıran bir tip olduğundan, bunları köşeli parantez içine alırsınız:
/// tip | Ipucu {* ../../docs_src/python_types/tutorial006_py39.py hl[1] *}
Köşeli parantez içindeki bu dahili tiplere "tip parametreleri" denir. /// info | Bilgi
Bu durumda `str`, `List`e iletilen tür parametresidir. Köşeli parantez içindeki bu iç tiplere "type parameters" denir.
Bu durumda, `str`, `list`'e aktarılan type parameter'dır.
/// ///
Bunun anlamı şudur: "`items` değişkeni bir `list`tir ve bu listedeki öğelerin her biri bir `str`dir". Bu şu anlama gelir: "`items` değişkeni bir `list`tir ve bu listedeki her bir öğe bir `str`dir".
Bunu yaparak, düzenleyicinizin listedeki öğeleri işlerken bile destek sağlamasını sağlayabilirsiniz: Bunu yaparak, editörünüz listedeki öğeleri işlerken bile destek sağlayabilir:
<img src="/img/python-types/image05.png"> <img src="/img/python-types/image05.png">
Tip belirteçleri olmadan, bunu başarmak neredeyse imkansızdır. Tipler olmadan, bunu başarmak neredeyse imkansızdır.
`item` değişkeninin `items` listesindeki öğelerden biri olduğuna dikkat edin. `item` değişkeninin `items` listesindeki öğelerden biri olduğuna dikkat edin.
Ve yine, editör bunun bir `str` ​​olduğunu biliyor ve bunun için destek sağlıyor. Ve yine de editör bunun bir `str` olduğunu bilir ve bunun için destek sağlar.
#### `Tuple` ve `Set` #### Tuple ve Set { #tuple-and-set }
`Tuple` ve `set`lerin tiplerini bildirmek için de aynısını yapıyoruz: `tuple`'ları ve `set`'leri bildirmek için de aynısını yaparsınız:
{* ../../docs_src/python_types/tutorial007.py hl[1,4] *} {* ../../docs_src/python_types/tutorial007_py39.py hl[1] *}
Bu şu anlama gelir:
Bu şu anlama geliyor: * `items_t` değişkeni 3 öğeli bir `tuple`'dır: bir `int`, bir başka `int` ve bir `str`.
* `items_s` değişkeni bir `set`'tir ve her bir öğesi `bytes` tipindedir.
* `items_t` değişkeni sırasıyla `int`, `int`, ve `str` tiplerinden oluşan bir `tuple` türündedir . #### Dict { #dict }
* `items_s` ise her öğesi `bytes` türünde olan bir `set` örneğidir.
#### `Dict` Bir `dict` tanımlamak için, virgülle ayrılmış 2 type parameter geçersiniz.
Bir `dict` tanımlamak için virgülle ayrılmış iki parametre verebilirsiniz. İlk type parameter, `dict`'in key'leri içindir.
İlk tip parametresi `dict` değerinin `key` değeri içindir. İkinci type parameter, `dict`'in value'ları içindir:
İkinci parametre ise `dict` değerinin `value` değeri içindir: {* ../../docs_src/python_types/tutorial008_py39.py hl[1] *}
{* ../../docs_src/python_types/tutorial008.py hl[1,4] *} Bu şu anlama gelir:
* `prices` değişkeni bir `dict`'tir:
* Bu `dict`'in key'leri `str` tipindedir (diyelim ki her item'ın adı).
* Bu `dict`'in value'ları `float` tipindedir (diyelim ki her item'ın fiyatı).
Bu şu anlama gelir: #### Union { #union }
Bir değişkenin **birden fazla tipten** herhangi biri olabileceğini bildirebilirsiniz, örneğin bir `int` veya bir `str`.
Python 3.6 ve üstünde (Python 3.10 dahil) `typing`'den `Union` tipini kullanabilir ve köşeli parantez içine kabul edilecek olası tipleri koyabilirsiniz.
Python 3.10'da ayrıca, olası tipleri <abbr title='also called "bitwise or operator", but that meaning is not relevant here'>vertical bar (`|`)</abbr> ile ayırabileceğiniz **yeni bir sözdizimi** de vardır.
//// tab | Python 3.10+
```Python hl_lines="1"
{!> ../../docs_src/python_types/tutorial008b_py310.py!}
```
////
//// tab | Python 3.9+
```Python hl_lines="1 4"
{!> ../../docs_src/python_types/tutorial008b_py39.py!}
```
////
* `prices` değişkeni `dict` tipindedir: Her iki durumda da bu, `item`'ın bir `int` veya bir `str` olabileceği anlamına gelir.
* `dict` değişkeninin `key` değeri `str` tipindedir (herbir item'ın "name" değeri).
* `dict` değişkeninin `value` değeri `float` tipindedir (lherbir item'ın "price" değeri).
#### `Optional` #### `None` olma ihtimali { #possibly-none }
`Optional` bir değişkenin `str`gibi bir tipi olabileceğini ama isteğe bağlı olarak tipinin `None` olabileceğini belirtir: Bir değerin `str` gibi bir tipe sahip olabileceğini ama aynı zamanda `None` da olabileceğini bildirebilirsiniz.
Python 3.6 ve üstünde (Python 3.10 dahil) bunu, `typing` modülünden `Optional` import edip kullanarak bildirebilirsiniz.
```Python hl_lines="1 4"
{!../../docs_src/python_types/tutorial009_py39.py!}
```
Sadece `str` yerine `Optional[str]` kullanmak, bir değerin her zaman `str` olduğunu varsayabileceğiniz ama aslında `None` da olabileceği durumlarda editörün hataları tespit etmenize yardımcı olmasını sağlar.
`Optional[Something]` aslında `Union[Something, None]` için bir kısayoldur, eşdeğerdirler.
Bu aynı zamanda Python 3.10'da `Something | None` kullanabileceğiniz anlamına gelir:
//// tab | Python 3.10+
```Python hl_lines="1"
{!> ../../docs_src/python_types/tutorial009_py310.py!}
```
////
//// tab | Python 3.9+
```Python hl_lines="1 4"
{!> ../../docs_src/python_types/tutorial009_py39.py!}
```
////
//// tab | Python 3.9+ alternatif
```Python hl_lines="1 4" ```Python hl_lines="1 4"
{!../../docs_src/python_types/tutorial009.py!} {!> ../../docs_src/python_types/tutorial009b_py39.py!}
```
////
#### `Union` veya `Optional` kullanmak { #using-union-or-optional }
Python sürümünüz 3.10'un altındaysa, benim oldukça **öznel** bakış açıma göre bir ipucu:
* 🚨 `Optional[SomeType]` kullanmaktan kaçının
* Bunun yerine ✨ **`Union[SomeType, None]` kullanın** ✨.
İkisi de eşdeğerdir ve altta aynı şeydir, ama `Optional` yerine `Union` önermemin nedeni şu: "**optional**" kelimesi, değerin isteğe bağlı olduğunu ima ediyor gibi görünebilir; oysa aslında anlamı " `None` olabilir"dir, optional olmasa ve hâlâ gerekli olsa bile.
Bence `Union[SomeType, None]` ne demek istediğini daha açık biçimde ifade eder.
Bu sadece kelimeler ve isimlerle ilgili. Ama bu kelimeler, sizin ve takım arkadaşlarınızın kod hakkında nasıl düşündüğünü etkileyebilir.
Örnek olarak şu fonksiyonu ele alalım:
{* ../../docs_src/python_types/tutorial009c_py39.py hl[1,4] *}
`name` parametresi `Optional[str]` olarak tanımlanmış, ama **optional değil**, parametre olmadan fonksiyonu çağırmazsınız:
```Python
say_hi() # Oh, no, this throws an error! 😱
```
`name` parametresi hâlâ **gerekli** ( *optional* değil) çünkü varsayılan değeri yok. Yine de `name`, değer olarak `None` kabul eder:
```Python
say_hi(name=None) # This works, None is valid 🎉
``` ```
`str` yerine `Optional[str]` kullanmak editorün bu değerin her zaman `str` tipinde değil bazen `None` tipinde de olabileceğini belirtir ve hataları tespit etmemizde yardımcı olur. İyi haber şu ki, Python 3.10'a geçtiğinizde bununla uğraşmanıza gerek kalmayacak, çünkü tip union'larını tanımlamak için basitçe `|` kullanabileceksiniz:
{* ../../docs_src/python_types/tutorial009c_py310.py hl[1,4] *}
Ve artık `Optional` ve `Union` gibi isimlerle uğraşmanıza gerek kalmayacak. 😎
#### Generic tipler { #generic-types }
Köşeli parantez içinde type parameter alan bu tiplere **Generic types** veya **Generics** denir, örneğin:
//// tab | Python 3.10+
#### Generic tipler Generic olarak aynı builtin tipleri (köşeli parantez ve içinde tiplerle) kullanabilirsiniz:
Köşeli parantez içinde tip parametreleri alan bu türler, örneğin: * `list`
* `tuple`
* `set`
* `dict`
* `List` Ve önceki Python sürümlerinde olduğu gibi, `typing` modülünden:
* `Tuple`
* `Set` * `Union`
* `Dict`
* `Optional` * `Optional`
* ...and others. * ...and others.
**Generic types** yada **Generics** olarak adlandırılır. Python 3.10'da, generic olan `Union` ve `Optional` kullanmaya alternatif olarak, <abbr title='also called "bitwise or operator", but that meaning is not relevant here'>vertical bar (`|`)</abbr> ile tip union'ları bildirebilirsiniz; bu çok daha iyi ve daha basittir.
////
//// tab | Python 3.9+
Generic olarak aynı builtin tipleri (köşeli parantez ve içinde tiplerle) kullanabilirsiniz:
* `list`
* `tuple`
* `set`
* `dict`
### Tip olarak Sınıflar Ve `typing` modülündeki generics'ler:
Bir değişkenin tipini bir sınıf ile bildirebilirsiniz. * `Union`
* `Optional`
* ...and others.
////
Diyelim ki `name` değerine sahip `Person` sınıfınız var: ### Tip olarak sınıflar { #classes-as-types }
{* ../../docs_src/python_types/tutorial010.py hl[1:3] *} Bir sınıfı da bir değişkenin tipi olarak bildirebilirsiniz.
Diyelim ki bir adı olan `Person` sınıfınız var:
Sonra bir değişkeni 'Person' tipinde tanımlayabilirsiniz: {* ../../docs_src/python_types/tutorial010_py39.py hl[1:3] *}
{* ../../docs_src/python_types/tutorial010.py hl[6] *} Sonra bir değişkeni `Person` tipinde olacak şekilde bildirebilirsiniz:
{* ../../docs_src/python_types/tutorial010_py39.py hl[6] *}
Ve yine bütün editör desteğini alırsınız: Ve sonra, yine tüm editör desteğini alırsınız:
<img src="/img/python-types/image06.png"> <img src="/img/python-types/image06.png">
## Pydantic modelleri Bunun "`one_person`, `Person` sınıfının bir **instance**'ıdır" anlamına geldiğine dikkat edin.
<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> veri doğrulaması yapmak için bir Python kütüphanesidir. "`one_person`, `Person` adlı **class**'tır" anlamına gelmez.
Verilerin "biçimini" niteliklere sahip sınıflar olarak düzenlersiniz. ## Pydantic modelleri { #pydantic-models }
Ve her niteliğin bir türü vardır. <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a>, veri doğrulaması yapmak için bir Python kütüphanesidir.
Sınıfın bazı değerlerle bir örneğini oluşturursunuz ve değerleri doğrular, bunları uygun türe dönüştürür ve size tüm verileri içeren bir nesne verir. Verinin "shape"'ini (şeklini) attribute'lara sahip sınıflar olarak bildirirsiniz.
Ve ortaya çıkan nesne üzerindeki bütün editör desteğini alırsınız. Ve her attribute'un bir tipi vardır.
Resmi Pydantic dokümanlarından alınmıştır: Sonra bu sınıfın bir instance'ını bazı değerlerle oluşturursunuz; bu değerleri doğrular, (gerekiyorsa) uygun tipe dönüştürür ve size tüm verileri içeren bir nesne verir.
{* ../../docs_src/python_types/tutorial011.py *} Ve ortaya çıkan o nesne ile tüm editör desteğini alırsınız.
Resmi Pydantic dokümanlarından bir örnek:
/// info {* ../../docs_src/python_types/tutorial011_py310.py *}
Daha fazla şey öğrenmek için <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic'i takip edin</a>. /// info | Bilgi
<a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic hakkında daha fazlasını öğrenmek için dokümanlarına göz atın</a>.
/// ///
**FastAPI** tamamen Pydantic'e dayanmaktadır. **FastAPI** tamamen Pydantic'e dayanır.
Bunların hepsini pratikte çok daha fazla [Tutorial - User Guide](tutorial/index.md){.internal-link target=_blank} içinde göreceksiniz.
/// tip | İpucu
Pydantic, varsayılan değer olmadan `Optional` veya `Union[Something, None]` kullandığınızda özel bir davranışa sahiptir; bununla ilgili daha fazlasını Pydantic dokümanlarında <a href="https://docs.pydantic.dev/2.3/usage/models/#required-fields" class="external-link" target="_blank">Required Optional fields</a> bölümünde okuyabilirsiniz.
///
## Metadata Annotations ile Type Hints { #type-hints-with-metadata-annotations }
Python ayrıca `Annotated` kullanarak bu type hints'lerin içine **ek <abbr title="Data about the data, in this case, information about the type, e.g. a description.">metadata</abbr>** koymaya izin veren bir özelliğe de sahiptir.
Daha fazlasini görmek için [Tutorial - User Guide](tutorial/index.md){.internal-link target=_blank}. Python 3.9'dan beri `Annotated`, standart kütüphanenin bir parçasıdır, dolayısıyla onu `typing`'den import edebilirsiniz.
{* ../../docs_src/python_types/tutorial013_py39.py hl[1,4] *}
Python'un kendisi bu `Annotated` ile bir şey yapmaz. Ve editörler ile diğer araçlar için tip hâlâ `str`'dir.
Ama `Annotated` içindeki bu alanı, uygulamanızın nasıl davranmasını istediğinize dair **FastAPI**'ye ek metadata sağlamak için kullanabilirsiniz.
Hatırlanması gereken önemli şey şu: `Annotated`'a verdiğiniz **ilk *type parameter***, **asıl tip**tir. Geri kalanı ise diğer araçlar için metadata'dır.
Şimdilik sadece `Annotated`'ın var olduğunu ve bunun standart Python olduğunu bilmeniz yeterli. 😎
İleride ne kadar **güçlü** olabileceğini göreceksiniz.
/// tip | İpucu
Bunun **standart Python** olması, editörünüzde hâlâ mümkün olan **en iyi geliştirici deneyimini** alacağınız anlamına gelir; kodunuzu analiz etmek ve refactor etmek için kullandığınız araçlarla vb. ✨
Ayrıca kodunuzun, diğer birçok Python aracı ve kütüphanesiyle çok uyumlu olacağı anlamına da gelir. 🚀
///
## **FastAPI** tip belirteçleri ## **FastAPI**'de type hints { #type-hints-in-fastapi }
**FastAPI** birkaç şey yapmak için bu tür tip belirteçlerinden faydalanır. **FastAPI**, birkaç şey yapmak için bu type hints'lerden faydalanır.
**FastAPI** ile parametre tiplerini bildirirsiniz ve şunları elde edersiniz: **FastAPI** ile type hints kullanarak parametreleri bildirirsiniz ve şunları elde edersiniz:
* **Editor desteği**. * **Editör desteği**.
* **Tip kontrolü**. * **Tip kontrolleri**.
...ve **FastAPI** aynı belirteçleri şunlar için de kullanıyor: ...ve **FastAPI** aynı bildirimleri şunlar için de kullanır:
* **Gereksinimleri tanımlama**: request path parameters, query parameters, headers, bodies, dependencies, ve benzeri gereksinimlerden * **Gereksinimleri tanımlamak**: request path parameters, query parameters, headers, bodies, dependencies, vb.'den.
* **Verileri çevirme**: Gönderilen veri tipinden istenilen veri tipine çevirme. * **Veriyi dönüştürmek**: request'ten gereken tipe.
* **Verileri doğrulama**: Her gönderilen verinin: * **Veriyi doğrulamak**: her request'ten gelen veriyi:
* doğrulanması ve geçersiz olduğunda **otomatik hata** oluşturma. * Veri geçersiz olduğunda client'a döndürülen **otomatik hatalar** üretmek.
* OpenAPI kullanarak apinizi **Belgeleyin** : * OpenAPI kullanarak API'yi **belgelemek**:
* bu daha sonra otomatik etkileşimli dokümantasyon kullanıcı arayüzü tarafından kullanılır. * bunun daha sonra otomatik etkileşimli dokümantasyon kullanıcı arayüzleri tarafından kullanılması.
Bütün bunlar kulağa soyut gelebilir. Merak etme. Tüm bunları çalışırken göreceksiniz. [Tutorial - User Guide](tutorial/index.md){.internal-link target=_blank}. Bunların hepsi soyut gelebilir. Merak etmeyin. Bunların hepsini çalışırken [Tutorial - User Guide](tutorial/index.md){.internal-link target=_blank} içinde göreceksiniz.
Önemli olan, standart Python türlerini tek bir yerde kullanarak (daha fazla sınıf, dekoratör vb. eklemek yerine), **FastAPI**'nin bizim için işi yapmasını sağlamak. Önemli olan, standart Python tiplerini tek bir yerde kullanarak (daha fazla sınıf, decorator vb. eklemek yerine), **FastAPI**'nin sizin için işin büyük kısmını yapacak olmasıdır.
/// info /// info | Bilgi
Tüm öğreticiyi zaten okuduysanız ve türler hakkında daha fazla bilgi için geri döndüyseniz, iyi bir kaynak:<a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link" target="_blank"> the "cheat sheet" from `mypy`</a>. Tüm tutorial'ı zaten baştan sona geçtiyseniz ve tipler hakkında daha fazlasını görmek için geri döndüyseniz, iyi bir kaynak: <a href="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html" class="external-link" target="_blank">`mypy`'nin "cheat sheet"i</a>.
/// ///

4
docs/tr/docs/resources/index.md

@ -1,3 +1,3 @@
# Kaynaklar # Kaynaklar { #resources }
Ek kaynaklar, dış bağlantılar, makaleler ve daha fazlası. ✈️ Ek kaynaklar, dış bağlantılar ve daha fazlası. ✈️

34
docs/tr/docs/tutorial/cookie-params.md

@ -1,35 +1,45 @@
# Çerez (Cookie) Parametreleri # Cookie Parametreleri { #cookie-parameters }
`Query` (Sorgu) ve `Path` (Yol) parametrelerini tanımladığınız şekilde çerez parametreleri tanımlayabilirsiniz. `Query` ve `Path` parametrelerini tanımladığınız şekilde Cookie parametreleri tanımlayabilirsiniz.
## Import `Cookie` ## `Cookie`'yi Import Edin { #import-cookie }
Öncelikle, `Cookie`'yi projenize dahil edin: Önce `Cookie`'yi import edin:
{* ../../docs_src/cookie_params/tutorial001_an_py310.py hl[3] *} {* ../../docs_src/cookie_params/tutorial001_an_py310.py hl[3] *}
## `Cookie` Parametrelerini Tanımlayın ## `Cookie` Parametrelerini Tanımlayın { #declare-cookie-parameters }
Çerez parametrelerini `Path` veya `Query` tanımlaması yapar gibi tanımlayın. Sonra Cookie parametrelerini `Path` ve `Query` ile aynı yapıyı kullanarak tanımlayın.
İlk değer varsayılan değerdir; tüm ekstra doğrulama veya belirteç parametrelerini kullanabilirsiniz: Varsayılan değeri ve tüm ekstra doğrulama veya annotation parametrelerini tanımlayabilirsiniz:
{* ../../docs_src/cookie_params/tutorial001_an_py310.py hl[9] *} {* ../../docs_src/cookie_params/tutorial001_an_py310.py hl[9] *}
/// note | Teknik Detaylar /// note | Teknik Detaylar
`Cookie` sınıfı `Path` ve `Query` sınıflarının kardeşidir. Diğerleri gibi `Param` sınıfını miras alan bir sınıftır. `Cookie`, `Path` ve `Query`'nin "kardeş" sınıfıdır. O da aynı ortak `Param` sınıfından miras alır.
Ancak `fastapi`'dan projenize dahil ettiğiniz `Query`, `Path`, `Cookie` ve diğerleri aslında özel sınıflar döndüren birer fonksiyondur. Ama `fastapi`'dan `Query`, `Path`, `Cookie` ve diğerlerini import ettiğinizde, bunların aslında özel sınıflar döndüren fonksiyonlar olduğunu unutmayın.
/// ///
/// info | Bilgi /// info | Bilgi
Çerez tanımlamak için `Cookie` sınıfını kullanmanız gerekmektedir, aksi taktirde parametreler sorgu parametreleri olarak yorumlanır. Cookie'leri tanımlamak için `Cookie` kullanmanız gerekir, aksi takdirde parametreler query parametreleri olarak yorumlanır.
/// ///
## Özet /// info | Bilgi
**Tarayıcılar Cookie'leri** arka planda ve özel şekillerde işlediği için **JavaScript**'in onlara dokunmasına kolayca izin **vermezler**.
`/docs` altındaki **API dokümantasyonu arayüzü**ne giderseniz, *path operation*'larınız için Cookie'lerin **dokümantasyonunu** görebilirsiniz.
Ama **veriyi doldurup** "Execute"'a tıklasanız bile, dokümantasyon arayüzü **JavaScript** ile çalıştığı için Cookie'ler gönderilmez ve herhangi bir değer yazmamışsınız gibi bir **hata** mesajı görürsünüz.
///
## Özet { #recap }
Çerez tanımlamalarını `Cookie` sınıfını kullanarak `Query` ve `Path` tanımlar gibi tanımlayın. Cookie'leri `Cookie` ile, `Query` ve `Path` ile aynı ortak kalıbı kullanarak tanımlayın.

309
docs/tr/docs/tutorial/first-steps.md

@ -1,102 +1,118 @@
# İlk Adımlar # İlk Adımlar { #first-steps }
En sade FastAPI dosyası şu şekilde görünür: En sade FastAPI dosyası şu şekilde görünür:
{* ../../docs_src/first_steps/tutorial001.py *} {* ../../docs_src/first_steps/tutorial001_py39.py *}
Yukarıdaki içeriği bir `main.py` dosyasına kopyalayalım. Yukarıdaki içeriği bir `main.py` dosyasına kopyalayalım.
Uygulamayı çalıştıralım: Canlı sunucuyu çalıştıralım:
<div class="termy"> <div class="termy">
```console ```console
$ uvicorn main:app --reload $ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u>
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) <span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server 🚀
<span style="color: green;">INFO</span>: Started reloader process [28720]
<span style="color: green;">INFO</span>: Started server process [28722]
<span style="color: green;">INFO</span>: Waiting for application startup.
<span style="color: green;">INFO</span>: Application startup complete.
```
</div> Searching for package file structure from directories
with <font color="#3465A4">__init__.py</font> files
Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font>
/// note | Not <span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py
`uvicorn main:app` komutunu şu şekilde açıklayabiliriz: <span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with
the following code:
* `main`: dosya olan `main.py` (yani Python "modülü"). <u style="text-decoration-style:solid">from </u><u style="text-decoration-style:solid"><b>main</b></u><u style="text-decoration-style:solid"> import </u><u style="text-decoration-style:solid"><b>app</b></u>
* `app`: ise `main.py` dosyasının içerisinde `app = FastAPI()` satırında oluşturduğumuz `FastAPI` nesnesi.
* `--reload`: kod değişikliklerinin ardından sunucuyu otomatik olarak yeniden başlatır. Bu parameteyi sadece geliştirme aşamasında kullanmalıyız.
/// <span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Server started at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> server </font></span> Documentation at <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000/docs</u></font>
<span style="background-color:#007166"><font color="#D3D7CF"> tip </font></span> Running in development mode, for production use:
<b>fastapi run</b>
Çıktı olarak şöyle bir satır ile karşılaşacaksınız: Logs:
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories:
<b>[</b><font color="#4E9A06">&apos;/home/user/code/awesomeapp&apos;</font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Uvicorn running on <font color="#729FCF"><u style="text-decoration-style:solid">http://127.0.0.1:8000</u></font> <b>(</b>Press CTRL+C
to quit<b>)</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started reloader process <b>[</b><font color="#34E2E2"><b>383138</b></font><b>]</b> using WatchFiles
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Started server process <b>[</b><font color="#34E2E2"><b>383153</b></font><b>]</b>
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup.
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete.
```
</div>
Çıktı olarak buna benzer bir satır göreceksiniz:
```hl_lines="4" ```hl_lines="4"
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
``` ```
Bu satır, yerel makinenizde uygulamanızın çalıştığı bağlantıyı gösterir. Bu satır, yerel makinenizde uygulamanızın sunulduğu URL'yi gösterir.
### Kontrol Edelim ### Kontrol Edelim { #check-it }
Tarayıcınızı açıp <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a> bağlantısına gidin. Tarayıcınızı <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a> adresinde açın.
Şu şekilde bir JSON yanıtı ile karşılaşacağız: Şu şekilde bir JSON yanıtı göreceksiniz:
```JSON ```JSON
{"message": "Hello World"} {"message": "Hello World"}
``` ```
### Etkileşimli API Dokümantasyonu ### Etkileşimli API Dokümantasyonu { #interactive-api-docs }
Şimdi <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> bağlantısını açalım. Şimdi <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> adresine gidin.
<a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a> tarafından sağlanan otomatik etkileşimli bir API dokümantasyonu göreceğiz: Otomatik etkileşimli API dokümantasyonunu göreceksiniz (<a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a> tarafından sağlanır):
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
### Alternatif API Dokümantasyonu ### Alternatif API Dokümantasyonu { #alternative-api-docs }
Şimdi <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> bağlantısını açalım. Ve şimdi, <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a> adresine gidin.
<a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> tarafından sağlanan otomatik dokümantasyonu göreceğiz: Alternatif otomatik dokümantasyonu göreceksiniz (<a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a> tarafından sağlanır):
![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
### OpenAPI ### OpenAPI { #openapi }
**FastAPI**, **OpenAPI** standardını kullanarak tüm API'ınızın tamamını tanımlayan bir "şema" oluşturur. **FastAPI**, API'leri tanımlamak için **OpenAPI** standardını kullanarak tüm API'nızla birlikte bir "şema" üretir.
#### "Şema" #### "Şema" { #schema }
"Şema", bir şeyin tanımı veya açıklamasıdır. Geliştirilen koddan ziyade soyut bir açıklamadır. Bir "şema", bir şeyin tanımı veya açıklamasıdır. Bunu uygulayan kod değil, yalnızca soyut bir açıklamadır.
#### API "Şeması" #### API "şeması" { #api-schema }
Bu durumda, <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a>, API şemasını nasıl tanımlayacağınızı belirten bir şartnamedir. Bu durumda, <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a>, API'nızın şemasını nasıl tanımlayacağınızı belirleyen bir şartnamedir.
Bu şema tanımı, API yollarınızla birlikte yollarınızın aldığı olası parametreler gibi tanımlamaları içerir. Bu şema tanımı, API path'lerinizi, aldıkları olası parametreleri vb. içerir.
#### Veri "Şeması" #### Veri "şeması" { #data-schema }
"Şema" terimi, JSON içeriği gibi bazı verilerin şeklini de ifade edebilir. "Şema" terimi, JSON içeriği gibi bazı verilerin şeklini de ifade edebilir.
Bu durumda, JSON özellikleri ve sahip oldukları veri türleri gibi anlamlarına gelir. Bu durumda, JSON özniteliklerini ve sahip oldukları veri türlerini vb. ifade eder.
#### OpenAPI ve JSON Şema #### OpenAPI ve JSON Schema { #openapi-and-json-schema }
OpenAPI, API'niz için bir API şeması tanımlar. Ve bu şema, JSON veri şemaları standardı olan **JSON Şema** kullanılarak API'niz tarafından gönderilen ve alınan verilerin tanımlarını (veya "şemalarını") içerir. OpenAPI, API'nız için bir API şeması tanımlar. Ve bu şema, JSON veri şemaları standardı olan **JSON Schema** kullanılarak API'nız tarafından gönderilen ve alınan verilerin tanımlarını (veya "şemalarını") içerir.
#### `openapi.json` Dosyasına Göz At #### `openapi.json`'ı Kontrol Edin { #check-the-openapi-json }
Ham OpenAPI şemasının nasıl göründüğünü merak ediyorsanız, FastAPI otomatik olarak tüm API'ınızın tanımlamalarını içeren bir JSON (şeması) oluşturur. Ham OpenAPI şemasının nasıl göründüğünü merak ediyorsanız, FastAPI otomatik olarak tüm API'nızın açıklamalarını içeren bir JSON (şeması) üretir.
Bu şemayı direkt olarak <a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a> bağlantısından görüntüleyebilirsiniz. Bunu doğrudan şurada görebilirsiniz: <a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a>.
Aşağıdaki gibi başlayan bir JSON ile karşılaşacaksınız: Şunun gibi başlayan bir JSON gösterecek:
```JSON ```JSON
{ {
@ -119,79 +135,87 @@ Aşağıdaki gibi başlayan bir JSON ile karşılaşacaksınız:
... ...
``` ```
#### OpenAPI Ne İşe Yarar? #### OpenAPI Ne İçin Kullanılır { #what-is-openapi-for }
OpenAPI şeması, FastAPI projesinde bulunan iki etkileşimli dokümantasyon sistemine güç veren şeydir.
OpenAPI'ya dayalı düzinelerce alternatif etkileşimli dokümantasyon aracı mevcuttur. **FastAPI** ile oluşturulmuş uygulamanıza bu alternatiflerden herhangi birini kolayca ekleyebilirsiniz. OpenAPI şeması, dahil gelen iki etkileşimli dokümantasyon sistemine güç veren şeydir.
Ayrıca, API'ınızla iletişim kuracak önyüz, mobil veya IoT uygulamaları gibi istemciler için otomatik olarak kod oluşturabilirsiniz. Ve OpenAPI tabanlı düzinelerce alternatif vardır. **FastAPI** ile oluşturulmuş uygulamanıza bu alternatiflerden herhangi birini kolayca ekleyebilirsiniz.
## Adım Adım Özetleyelim Ayrıca, API'nızla iletişim kuran istemciler için otomatik olarak kod üretmek için de kullanabilirsiniz. Örneğin, frontend, mobil veya IoT uygulamaları.
### Adım 1: `FastAPI`yı Projemize Dahil Edelim ### Uygulamanızı Deploy Edin (opsiyonel) { #deploy-your-app-optional }
{* ../../docs_src/first_steps/tutorial001.py hl[1] *} İsterseniz FastAPI uygulamanızı <a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>'a deploy edebilirsiniz, henüz yapmadıysanız gidip bekleme listesine katılın. 🚀
`FastAPI`, API'niz için tüm işlevselliği sağlayan bir Python sınıfıdır. Zaten bir **FastAPI Cloud** hesabınız varsa (sizi bekleme listesinden davet ettik 😉), uygulamanızı tek bir komutla deploy edebilirsiniz.
/// note | Teknik Detaylar Deploy etmeden önce, giriş yaptığınızdan emin olun:
`FastAPI` doğrudan `Starlette`'i miras alan bir sınıftır.
<a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a>'in tüm işlevselliğini `FastAPI` ile de kullanabilirsiniz.
///
### Adım 2: Bir `FastAPI` "Örneği" Oluşturalım <div class="termy">
{* ../../docs_src/first_steps/tutorial001.py hl[3] *} ```console
$ fastapi login
Burada `app` değişkeni `FastAPI` sınıfının bir örneği olacaktır. You are logged in to FastAPI Cloud 🚀
```
Bu, tüm API'yı oluşturmak için ana etkileşim noktası olacaktır. </div>
Bu `app` değişkeni, `uvicorn` komutunda atıfta bulunulan değişkenin ta kendisidir. Sonra uygulamanızı deploy edin:
<div class="termy"> <div class="termy">
```console ```console
$ uvicorn main:app --reload $ fastapi deploy
Deploying to FastAPI Cloud...
✅ Deployment successful!
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) 🐔 Ready the chicken! Your app is ready at https://myapp.fastapicloud.dev
``` ```
</div> </div>
Uygulamanızı aşağıdaki gibi oluşturursanız: Hepsi bu! Artık uygulamanıza o URL'den erişebilirsiniz. ✨
{* ../../docs_src/first_steps/tutorial002.py hl[3] *} ## Adım Adım Özetleyelim { #recap-step-by-step }
Ve bunu `main.py` dosyasına yerleştirirseniz eğer `uvicorn` komutunu şu şekilde çalıştırabilirsiniz: ### Adım 1: `FastAPI`'yı import edin { #step-1-import-fastapi }
<div class="termy"> {* ../../docs_src/first_steps/tutorial001_py39.py hl[1] *}
```console `FastAPI`, API'nız için tüm işlevselliği sağlayan bir Python sınıfıdır.
$ uvicorn main:my_awesome_api --reload
<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) /// note | Teknik Detaylar
```
</div> `FastAPI` doğrudan `Starlette`'i miras alan bir sınıftır.
`FastAPI` ile de tüm <a href="https://www.starlette.dev/" class="external-link" target="_blank">Starlette</a> işlevselliğini kullanabilirsiniz.
///
### Adım 2: bir `FastAPI` "instance" oluşturun { #step-2-create-a-fastapi-instance }
{* ../../docs_src/first_steps/tutorial001_py39.py hl[3] *}
Burada `app` değişkeni `FastAPI` sınıfının bir "instance"'ı olacaktır.
### Adım 3: Bir *Yol Operasyonu* Oluşturalım Bu, tüm API'nızı oluşturmak için ana etkileşim noktası olacaktır.
#### <abbr title="Yol: Path">Yol</abbr> ### Adım 3: bir *path operation* oluşturun { #step-3-create-a-path-operation }
Burada "yol" bağlantıda bulunan ilk `/` ile başlayan ve sonrasında gelen kısmı ifade eder. #### Path { #path }
Yani, şu şekilde bir bağlantıda: Burada "Path", URL'nin ilk `/` ile başlayan son kısmını ifade eder.
Yani, şu şekilde bir URL'de:
``` ```
https://example.com/items/foo https://example.com/items/foo
``` ```
... yol şöyle olur: ...path şöyle olur:
``` ```
/items/foo /items/foo
@ -199,15 +223,15 @@ https://example.com/items/foo
/// info | Bilgi /// info | Bilgi
"Yol" genellikle "<abbr title="Endpoint: Bitim Noktası">endpoint</abbr>" veya "<abbr title="Route: Yönlendirme/Yön">route</abbr>" olarak adlandırılır. Bir "path", yaygın olarak "endpoint" veya "route" olarak da adlandırılır.
/// ///
Bir API oluştururken, "yol", "kaynaklar" ile "endişeleri" ayırmanın ana yöntemidir. Bir API oluştururken, "path", "concern"'leri ve "resource"'ları ayırmanın ana yoludur.
#### Operasyonlar #### Operation { #operation }
Burada "operasyon" HTTP "metodlarından" birini ifade eder. Burada "Operation", HTTP "method"'larından birini ifade eder.
Bunlardan biri: Bunlardan biri:
@ -216,60 +240,60 @@ Bunlardan biri:
* `PUT` * `PUT`
* `DELETE` * `DELETE`
...veya daha az kullanılan diğerleri: ...ve daha egzotik olanları:
* `OPTIONS` * `OPTIONS`
* `HEAD` * `HEAD`
* `PATCH` * `PATCH`
* `TRACE` * `TRACE`
HTTP protokolünde, bu "metodlardan" birini (veya daha fazlasını) kullanarak her bir yol ile iletişim kurabilirsiniz. HTTP protokolünde, bu "method"'lardan birini (veya daha fazlasını) kullanarak her bir path ile iletişim kurabilirsiniz.
--- ---
API oluştururkan, belirli bir amaca hizmet eden belirli HTTP metodlarını kullanırsınız. API oluştururken, normalde belirli bir eylemi gerçekleştirmek için bu belirli HTTP method'larını kullanırsınız.
Normalde kullanılan: Normalde şunları kullanırsınız:
* `POST`: veri oluşturmak. * `POST`: veri oluşturmak için.
* `GET`: veri okumak. * `GET`: veri okumak için.
* `PUT`: veriyi güncellemek. * `PUT`: veriyi güncellemek için.
* `DELETE`: veriyi silmek. * `DELETE`: veriyi silmek için.
Bu nedenle, OpenAPI'da HTTP metodlarından her birine "operasyon" denir. Bu nedenle, OpenAPI'da HTTP method'larının her birine "operation" denir.
Biz de onları "**operasyonlar**" olarak adlandıracağız. Biz de onlara "**operation**" diyeceğiz.
#### Bir *Yol Operasyonu Dekoratörü* Tanımlayalım #### Bir *path operation decorator* tanımlayın { #define-a-path-operation-decorator }
{* ../../docs_src/first_steps/tutorial001.py hl[6] *} {* ../../docs_src/first_steps/tutorial001_py39.py hl[6] *}
`@app.get("/")` dekoratörü, **FastAPI**'a hemen altındaki fonksiyonun aşağıdaki durumlardan sorumlu olduğunu söyler: `@app.get("/")`, hemen altındaki fonksiyonun şunlara giden request'leri ele almaktan sorumlu olduğunu **FastAPI**'a söyler:
* <abbr title="Bir HTTP GET metodu"><code>get</code> operasyonu</abbr> ile * path `/`
* `/` yoluna gelen istekler * <abbr title="an HTTP GET method"><code>get</code> operation</abbr> kullanarak
/// info | `@decorator` Bilgisi /// info | `@decorator` Bilgisi
Python'da `@something` sözdizimi "<abbr title="Decorator">dekoratör</abbr>" olarak adlandırılır. Python'da `@something` sözdizimine "decorator" denir.
Dekoratörler, dekoratif bir şapka gibi (sanırım terim buradan geliyor) fonksiyonların üzerlerine yerleştirilirler. Bunu bir fonksiyonun üzerine koyarsınız. Şık dekoratif bir şapka gibi (sanırım terim buradan geliyor).
Bir "dekoratör" hemen altında bulunan fonksiyonu alır ve o fonksiyon ile bazı işlemler gerçekleştirir. Bir "decorator", alttaki fonksiyonu alır ve onunla bir şey yapar.
Bizim durumumuzda, kullandığımız dekoratör, **FastAPI**'a altındaki fonksiyonun `/` yoluna gelen `get` metodlu isteklerden sorumlu olduğunu söyler. Bizim durumumuzda, bu decorator **FastAPI**'a alttaki fonksiyonun **path** `/` ile, **operation** `get`'e karşılık geldiğini söyler.
Bu bir **yol operasyonu dekoratörüdür**. Bu, "**path operation decorator**"dır.
/// ///
Ayrıca diğer operasyonları da kullanabilirsiniz: Diğer operation'ları da kullanabilirsiniz:
* `@app.post()` * `@app.post()`
* `@app.put()` * `@app.put()`
* `@app.delete()` * `@app.delete()`
Daha az kullanılanları da kullanabilirsiniz: Ve daha egzotik olanları:
* `@app.options()` * `@app.options()`
* `@app.head()` * `@app.head()`
@ -278,58 +302,79 @@ Daha az kullanılanları da kullanabilirsiniz:
/// tip | İpucu /// tip | İpucu
Her işlemi (HTTP metod) istediğiniz gibi kullanmakta özgürsünüz. Her operation'ı (HTTP method) istediğiniz gibi kullanmakta özgürsünüz.
**FastAPI** herhangi bir özel amacı veya anlamı olması konusunda ısrarcı olmaz. **FastAPI** herhangi bir özel anlamı zorunlu kılmaz.
Buradaki bilgiler bir gereklilik değil, bir kılavuz olarak sunulmaktadır. Buradaki bilgiler bir gereklilik olarak değil, bir kılavuz olarak sunulmaktadır.
Mesela GraphQL kullanırkan genelde tüm işlemleri yalnızca `POST` operasyonunu kullanarak gerçekleştirirsiniz. Örneğin, GraphQL kullanırken normalde tüm eylemleri yalnızca `POST` operation'larını kullanarak gerçekleştirirsiniz.
/// ///
### Adım 4: **Yol Operasyonu Fonksiyonunu** Tanımlayın ### Adım 4: **path operation function**'ı tanımlayın { #step-4-define-the-path-operation-function }
Aşağıdaki, bizim **yol operasyonu fonksiyonumuzdur**: Bu bizim "**path operation function**"ımızdır:
* **yol**: `/` * **path**: `/`.
* **operasyon**: `get` * **operation**: `get`.
* **fonksiyon**: "dekoratör"ün (`@app.get("/")`'in) altındaki fonksiyondur. * **function**: "decorator"ün altındaki fonksiyondur (`@app.get("/")`'in altındaki).
{* ../../docs_src/first_steps/tutorial001.py hl[7] *} {* ../../docs_src/first_steps/tutorial001_py39.py hl[7] *}
Bu bir Python fonksiyonudur. Bu bir Python fonksiyonudur.
Bu fonksiyon bir `GET` işlemi kullanılarak "`/`" bağlantısına bir istek geldiğinde **FastAPI** tarafından çağrılır. `GET` operation'ını kullanarak "`/`" URL'sine bir request aldığında **FastAPI** tarafından çağrılacaktır.
Bu durumda bu fonksiyon bir `async` fonksiyondur. Bu durumda, bir `async` fonksiyondur.
--- ---
Bu fonksiyonu `async def` yerine normal bir fonksiyon olarak da tanımlayabilirsiniz. Bunu `async def` yerine normal bir fonksiyon olarak da tanımlayabilirsiniz:
{* ../../docs_src/first_steps/tutorial003.py hl[7] *} {* ../../docs_src/first_steps/tutorial003_py39.py hl[7] *}
/// note | Not /// note | Not
Eğer farkı bilmiyorsanız, [Async: *"Aceleniz mi var?"*](../async.md#in-a-hurry){.internal-link target=_blank} sayfasını kontrol edebilirsiniz. Eğer farkı bilmiyorsanız, [Async: *"In a hurry?"*](../async.md#in-a-hurry){.internal-link target=_blank} sayfasına göz atın.
/// ///
### Adım 5: İçeriği Geri Döndürün ### Adım 5: içeriği döndürün { #step-5-return-the-content }
{* ../../docs_src/first_steps/tutorial001_py39.py hl[8] *}
Bir `dict`, `list`, `str`, `int` gibi tekil değerler döndürebilirsiniz.
Ayrıca Pydantic modelleri de döndürebilirsiniz (bunun hakkında daha sonra daha fazlasını göreceksiniz).
Otomatik olarak JSON'a dönüştürülecek (ORM'ler vb. dahil) başka birçok nesne ve model vardır. En beğendiklerinizi kullanmayı deneyin, büyük ihtimalle zaten destekleniyordur.
### Adım 6: Deploy edin { #step-6-deploy-it }
Uygulamanızı tek bir komutla **<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>**'a deploy edin: `fastapi deploy`. 🎉
#### FastAPI Cloud Hakkında { #about-fastapi-cloud }
**<a href="https://fastapicloud.com" class="external-link" target="_blank">FastAPI Cloud</a>**, **FastAPI**'ın arkasındaki aynı yazar ve ekip tarafından geliştirilmiştir.
Minimum eforla bir API'yi **oluşturma**, **deploy etme** ve **erişme** sürecini kolaylaştırır.
FastAPI ile uygulama geliştirmenin aynı **developer experience**'ını, bunları buluta **deploy etmeye** de taşır. 🎉
{* ../../docs_src/first_steps/tutorial001.py hl[8] *} FastAPI Cloud, *FastAPI and friends* açık kaynak projelerinin birincil sponsoru ve finansman sağlayıcısıdır. ✨
Bir `dict`, `list` veya `str`, `int` gibi tekil değerler döndürebilirsiniz. #### Diğer cloud sağlayıcılarına deploy edin { #deploy-to-other-cloud-providers }
Ayrıca, Pydantic modelleri de döndürebilirsiniz (bu konu ileriki aşamalarda irdelenecektir). FastAPI açık kaynaklıdır ve standartlara dayanır. FastAPI uygulamalarını seçtiğiniz herhangi bir cloud sağlayıcısına deploy edebilirsiniz.
Otomatik olarak JSON'a dönüştürülecek (ORM'ler vb. dahil) başka birçok nesne ve model vardır. En beğendiklerinizi kullanmayı deneyin, yüksek ihtimalle destekleniyordur. FastAPI uygulamalarını onlarla deploy etmek için cloud sağlayıcınızın kılavuzlarını takip edin. 🤓
## Özet ## Özet { #recap }
* `FastAPI`'yı projemize dahil ettik. * `FastAPI`'yı import edin.
* Bir `app` örneği oluşturduk. * Bir `app` instance'ı oluşturun.
* Bir **yol operasyonu dekoratörü** (`@app.get("/")` gibi) yazdık. * `@app.get("/")` gibi decorator'ları kullanarak bir **path operation decorator** yazın.
* Bir **yol operasyonu fonksiyonu** (`def root(): ...` gibi) yazdık. * Bir **path operation function** tanımlayın; örneğin, `def root(): ...`.
* Geliştirme sunucumuzu (`uvicorn main:app --reload` gibi) çalıştırdık. * `fastapi dev` komutunu kullanarak geliştirme sunucusunu çalıştırın.
* Opsiyonel olarak `fastapi deploy` ile uygulamanızı deploy edin.

78
docs/tr/docs/tutorial/path-params.md

@ -1,8 +1,8 @@
# Yol Parametreleri # Yol Parametreleri { #path-parameters }
Yol "parametrelerini" veya "değişkenlerini" Python <abbr title="String Biçimleme: Format String">string biçimlemede</abbr> kullanılan sözdizimi ile tanımlayabilirsiniz. Yol "parametrelerini" veya "değişkenlerini" Python <abbr title="String Biçimleme: Format String">string biçimlemede</abbr> kullanılan sözdizimi ile tanımlayabilirsiniz.
{* ../../docs_src/path_params/tutorial001.py hl[6:7] *} {* ../../docs_src/path_params/tutorial001_py39.py hl[6:7] *}
Yol parametresi olan `item_id`'nin değeri, fonksiyonunuza `item_id` argümanı olarak aktarılacaktır. Yol parametresi olan `item_id`'nin değeri, fonksiyonunuza `item_id` argümanı olarak aktarılacaktır.
@ -12,11 +12,11 @@ Eğer bu örneği çalıştırıp <a href="http://127.0.0.1:8000/items/foo" clas
{"item_id":"foo"} {"item_id":"foo"}
``` ```
## Tip İçeren Yol Parametreleri ## Tip İçeren Yol Parametreleri { #path-parameters-with-types }
Standart Python tip belirteçlerini kullanarak yol parametresinin tipini fonksiyonun içerisinde tanımlayabilirsiniz. Standart Python tip belirteçlerini kullanarak yol parametresinin tipini fonksiyonun içerisinde tanımlayabilirsiniz.
{* ../../docs_src/path_params/tutorial002.py hl[7] *} {* ../../docs_src/path_params/tutorial002_py39.py hl[7] *}
Bu durumda, `item_id` bir `int` olarak tanımlanacaktır. Bu durumda, `item_id` bir `int` olarak tanımlanacaktır.
@ -26,7 +26,7 @@ Bu sayede, fonksiyon içerisinde hata denetimi, kod tamamlama gibi konularda edi
/// ///
## Veri <abbr title="Dönüşüm: serialization, parsing ve marshalling olarak da biliniyor">Dönüşümü</abbr> ## Veri <abbr title="ayrıca şu isimlerle de bilinir: serialization, parsing, marshalling">dönüşümü</abbr> { #data-conversion }
Eğer bu örneği çalıştırıp tarayıcınızda <a href="http://127.0.0.1:8000/items/3" class="external-link" target="_blank">http://127.0.0.1:8000/items/3</a> sayfasını açarsanız, şöyle bir yanıt ile karşılaşırsınız: Eğer bu örneği çalıştırıp tarayıcınızda <a href="http://127.0.0.1:8000/items/3" class="external-link" target="_blank">http://127.0.0.1:8000/items/3</a> sayfasını açarsanız, şöyle bir yanıt ile karşılaşırsınız:
@ -38,11 +38,11 @@ Eğer bu örneği çalıştırıp tarayıcınızda <a href="http://127.0.0.1:800
Dikkatinizi çekerim ki, fonksiyonunuzun aldığı (ve döndürdüğü) değer olan `3` bir string `"3"` değil aksine bir Python `int`'idir. Dikkatinizi çekerim ki, fonksiyonunuzun aldığı (ve döndürdüğü) değer olan `3` bir string `"3"` değil aksine bir Python `int`'idir.
Bu tanımlamayla birlikte, **FastAPI** size otomatik istek <abbr title="HTTP isteği ile birlikte gelen string'i Python verisine dönüştürme">"ayrıştırma"</abbr> özelliği sağlar. Bu tanımlamayla birlikte, **FastAPI** size otomatik istek <abbr title="HTTP request'i ile birlikte gelen string'i Python verisine dönüştürme">"parsing"</abbr> özelliği sağlar.
/// ///
## Veri Doğrulama ## Veri Doğrulama { #data-validation }
Eğer tarayıcınızda <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a> sayfasını açarsanız, şuna benzer güzel bir HTTP hatası ile karşılaşırsınız: Eğer tarayıcınızda <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a> sayfasını açarsanız, şuna benzer güzel bir HTTP hatası ile karşılaşırsınız:
@ -62,7 +62,7 @@ Eğer tarayıcınızda <a href="http://127.0.0.1:8000/items/foo" class="external
} }
``` ```
Çünkü burada `item_id` yol parametresi `int` tipinde bir değer beklerken `"foo"` yani `string` tipinde bir değer almıştı. Çünkü burada `item_id` yol parametresi `"foo"` değerini almıştı, ki bu bir `int` değildir.
Aynı hata <a href="http://127.0.0.1:8000/items/4.2" class="external-link" target="_blank">http://127.0.0.1:8000/items/4.2</a> sayfasında olduğu gibi `int` yerine `float` bir değer verseydik de ortaya çıkardı. Aynı hata <a href="http://127.0.0.1:8000/items/4.2" class="external-link" target="_blank">http://127.0.0.1:8000/items/4.2</a> sayfasında olduğu gibi `int` yerine `float` bir değer verseydik de ortaya çıkardı.
@ -76,9 +76,9 @@ Bu özellik, API'ınızla iletişime geçen kodu geliştirirken ve ayıklarken i
/// ///
## Dokümantasyon ## Dokümantasyon { #documentation }
Ayrıca, tarayıcınızı <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> adresinde açarsanız, aşağıdaki gibi otomatik ve interaktif bir API dökümantasyonu ile karşılaşırsınız: Ayrıca, tarayıcınızı <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a> adresinde açarsanız, aşağıdaki gibi otomatik ve interaktif bir API dokümantasyonu ile karşılaşırsınız:
<img src="/img/tutorial/path-params/image01.png"> <img src="/img/tutorial/path-params/image01.png">
@ -90,7 +90,7 @@ Dikkatinizi çekerim ki, yol parametresi integer olarak tanımlanmıştır.
/// ///
## Standartlara Dayalı Avantajlar, Alternatif Dokümantasyon ## Standartlara Dayalı Avantajlar, Alternatif Dokümantasyon { #standards-based-benefits-alternative-documentation }
Oluşturulan şema <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md" class="external-link" target="_blank">OpenAPI</a> standardına uygun olduğu için birçok uyumlu araç mevcuttur. Oluşturulan şema <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md" class="external-link" target="_blank">OpenAPI</a> standardına uygun olduğu için birçok uyumlu araç mevcuttur.
@ -100,7 +100,7 @@ Bu sayede, **FastAPI**'ın bizzat kendisi <a href="http://127.0.0.1:8000/redoc"
Aynı şekilde, farklı diller için kod türetme araçları da dahil olmak üzere çok sayıda uyumlu araç bulunur. Aynı şekilde, farklı diller için kod türetme araçları da dahil olmak üzere çok sayıda uyumlu araç bulunur.
## Pydantic ## Pydantic { #pydantic }
Tüm veri doğrulamaları <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> tarafından arka planda gerçekleştirilir, bu sayede tüm avantajlardan faydalanabilirsiniz. Böylece, emin ellerde olduğunuzu hissedebilirsiniz. Tüm veri doğrulamaları <a href="https://docs.pydantic.dev/" class="external-link" target="_blank">Pydantic</a> tarafından arka planda gerçekleştirilir, bu sayede tüm avantajlardan faydalanabilirsiniz. Böylece, emin ellerde olduğunuzu hissedebilirsiniz.
@ -108,7 +108,7 @@ Aynı tip tanımlamalarını `str`, `float`, `bool` ve diğer karmaşık veri ti
Bunlardan birkaçı, bu eğitimin ileriki bölümlerinde irdelenmiştir. Bunlardan birkaçı, bu eğitimin ileriki bölümlerinde irdelenmiştir.
## Sıralama Önem Arz Eder ## Sıralama Önem Arz Eder { #order-matters }
*Yol operasyonları* tasarlarken sabit yol barındıran durumlar ile karşılaşabilirsiniz. *Yol operasyonları* tasarlarken sabit yol barındıran durumlar ile karşılaşabilirsiniz.
@ -118,21 +118,21 @@ Benzer şekilde `/users/{user_id}` gibi tanımlanmış ve belirli bir kullanıc
*Yol operasyonları* sıralı bir şekilde gözden geçirildiğinden dolayı `/users/me` yolunun `/users/{user_id}` yolundan önce tanımlanmış olmasından emin olmanız gerekmektedir: *Yol operasyonları* sıralı bir şekilde gözden geçirildiğinden dolayı `/users/me` yolunun `/users/{user_id}` yolundan önce tanımlanmış olmasından emin olmanız gerekmektedir:
{* ../../docs_src/path_params/tutorial003.py hl[6,11] *} {* ../../docs_src/path_params/tutorial003_py39.py hl[6,11] *}
Aksi halde, `/users/{user_id}` yolu `"me"` değerinin `user_id` parametresi için gönderildiğini "düşünerek" `/users/me` ile de eşleşir. Aksi halde, `/users/{user_id}` yolu `"me"` değerinin `user_id` parametresi için gönderildiğini "düşünerek" `/users/me` ile de eşleşir.
Benzer şekilde, bir yol operasyonunu yeniden tanımlamanız mümkün değildir: Benzer şekilde, bir yol operasyonunu yeniden tanımlamanız mümkün değildir:
{* ../../docs_src/path_params/tutorial003b.py hl[6,11] *} {* ../../docs_src/path_params/tutorial003b_py39.py hl[6,11] *}
Yol, ilk kısım ile eşleştiğinden dolayı her koşulda ilk yol operasyonu kullanılacaktır. Yol, ilk kısım ile eşleştiğinden dolayı her koşulda ilk yol operasyonu kullanılacaktır.
## Ön Tanımlı Değerler ## Ön Tanımlı Değerler { #predefined-values }
Eğer *yol parametresi* alan bir *yol operasyonunuz* varsa ve alabileceği *yol parametresi* değerlerinin ön tanımlı olmasını istiyorsanız, standart Python <abbr title="Enumeration">`Enum`</abbr> tipini kullanabilirsiniz. Eğer *yol parametresi* alan bir *yol operasyonunuz* varsa ve alabileceği *yol parametresi* değerlerinin ön tanımlı olmasını istiyorsanız, standart Python <abbr title="Enumeration">`Enum`</abbr> tipini kullanabilirsiniz.
### Bir `Enum` Sınıfı Oluşturalım ### Bir `Enum` Sınıfı Oluşturalım { #create-an-enum-class }
`Enum` sınıfını projemize dahil edip `str` ile `Enum` sınıflarını miras alan bir alt sınıf yaratalım. `Enum` sınıfını projemize dahil edip `str` ile `Enum` sınıflarını miras alan bir alt sınıf yaratalım.
@ -140,13 +140,7 @@ Eğer *yol parametresi* alan bir *yol operasyonunuz* varsa ve alabileceği *yol
Sonrasında, sınıf içerisinde, mevcut ve geçerli değerler olacak olan sabit değerli özelliklerini oluşturalım: Sonrasında, sınıf içerisinde, mevcut ve geçerli değerler olacak olan sabit değerli özelliklerini oluşturalım:
{* ../../docs_src/path_params/tutorial005.py hl[1,6:9] *} {* ../../docs_src/path_params/tutorial005_py39.py hl[1,6:9] *}
/// info | Bilgi
3.4 sürümünden beri <a href="https://docs.python.org/3/library/enum.html" class="external-link" target="_blank">enumerationlar (ya da enumlar) Python'da mevcuttur</a>.
///
/// tip | İpucu /// tip | İpucu
@ -154,33 +148,33 @@ Merak ediyorsanız söyleyeyim, "AlexNet", "ResNet" ve "LeNet" isimleri Makine
/// ///
### Bir *Yol Parametresi* Tanımlayalım ### Bir *Yol Parametresi* Tanımlayalım { #declare-a-path-parameter }
Sonrasında, yarattığımız enum sınıfını (`ModelName`) kullanarak tip belirteci aracılığıyla bir *yol parametresi* oluşturalım: Sonrasında, yarattığımız enum sınıfını (`ModelName`) kullanarak tip belirteci aracılığıyla bir *yol parametresi* oluşturalım:
{* ../../docs_src/path_params/tutorial005.py hl[16] *} {* ../../docs_src/path_params/tutorial005_py39.py hl[16] *}
### Dokümana Göz Atalım ### Dokümana Göz Atalım { #check-the-docs }
*Yol parametresi* için mevcut değerler ön tanımlı olduğundan dolayı, interaktif döküman onları güzel bir şekilde gösterebilir: *Yol parametresi* için mevcut değerler ön tanımlı olduğundan dolayı, interaktif döküman onları güzel bir şekilde gösterebilir:
<img src="/img/tutorial/path-params/image03.png"> <img src="/img/tutorial/path-params/image03.png">
### Python *Enumerationları* ile Çalışmak ### Python *Enumerationları* ile Çalışmak { #working-with-python-enumerations }
*Yol parametresinin* değeri bir *enumeration üyesi* olacaktır. *Yol parametresinin* değeri bir *enumeration üyesi* olacaktır.
#### *Enumeration Üyelerini* Karşılaştıralım #### *Enumeration Üyelerini* Karşılaştıralım { #compare-enumeration-members }
Parametreyi, yarattığınız enum olan `ModelName` içerisindeki *enumeration üyesi* ile karşılaştırabilirsiniz: Parametreyi, yarattığınız enum olan `ModelName` içerisindeki *enumeration üyesi* ile karşılaştırabilirsiniz:
{* ../../docs_src/path_params/tutorial005.py hl[17] *} {* ../../docs_src/path_params/tutorial005_py39.py hl[17] *}
#### *Enumeration Değerini* Edinelim #### *Enumeration Değerini* Edinelim { #get-the-enumeration-value }
`model_name.value` veya genel olarak `your_enum_member.value` tanımlarını kullanarak (bu durumda bir `str` olan) gerçek değere ulaşabilirsiniz: `model_name.value` veya genel olarak `your_enum_member.value` tanımlarını kullanarak (bu durumda bir `str` olan) gerçek değere ulaşabilirsiniz:
{* ../../docs_src/path_params/tutorial005.py hl[20] *} {* ../../docs_src/path_params/tutorial005_py39.py hl[20] *}
/// tip | İpucu /// tip | İpucu
@ -188,13 +182,13 @@ Parametreyi, yarattığınız enum olan `ModelName` içerisindeki *enumeration
/// ///
#### *Enumeration Üyelerini* Döndürelim #### *Enumeration Üyelerini* Döndürelim { #return-enumeration-members }
JSON gövdesine (örneğin bir `dict`) gömülü olsalar bile *yol operasyonundaki* *enum üyelerini* döndürebilirsiniz. JSON gövdesine (örneğin bir `dict`) gömülü olsalar bile *yol operasyonundaki* *enum üyelerini* döndürebilirsiniz.
Bu üyeler istemciye iletilmeden önce kendilerine karşılık gelen değerlerine (bu durumda string) dönüştürüleceklerdir: Bu üyeler istemciye iletilmeden önce kendilerine karşılık gelen değerlerine (bu durumda string) dönüştürüleceklerdir:
{* ../../docs_src/path_params/tutorial005.py hl[18,21,23] *} {* ../../docs_src/path_params/tutorial005_py39.py hl[18,21,23] *}
İstemci tarafında şuna benzer bir JSON yanıtı ile karşılaşırsınız: İstemci tarafında şuna benzer bir JSON yanıtı ile karşılaşırsınız:
@ -205,7 +199,7 @@ Bu üyeler istemciye iletilmeden önce kendilerine karşılık gelen değerlerin
} }
``` ```
## Yol İçeren Yol Parametreleri ## Yol İçeren Yol Parametreleri { #path-parameters-containing-paths }
Farz edelim ki elinizde `/files/{file_path}` isminde bir *yol operasyonu* var. Farz edelim ki elinizde `/files/{file_path}` isminde bir *yol operasyonu* var.
@ -213,7 +207,7 @@ Fakat `file_path` değerinin `home/johndoe/myfile.txt` gibi bir *yol* barındır
Sonuç olarak, oluşturmak istediğin URL `/files/home/johndoe/myfile.txt` gibi bir şey olacaktır. Sonuç olarak, oluşturmak istediğin URL `/files/home/johndoe/myfile.txt` gibi bir şey olacaktır.
### OpenAPI Desteği ### OpenAPI Desteği { #openapi-support }
Test etmesi ve tanımlaması zor senaryolara sebebiyet vereceğinden dolayı OpenAPI, *yol* barındıran *yol parametrelerini* tanımlayacak bir çözüm sunmuyor. Test etmesi ve tanımlaması zor senaryolara sebebiyet vereceğinden dolayı OpenAPI, *yol* barındıran *yol parametrelerini* tanımlayacak bir çözüm sunmuyor.
@ -221,7 +215,7 @@ Ancak bunu, Starlette kütüphanesinin dahili araçlarından birini kullanarak *
Parametrenin bir yol içermesi gerektiğini belirten herhangi bir doküman eklemememize rağmen dokümanlar yine de çalışacaktır. Parametrenin bir yol içermesi gerektiğini belirten herhangi bir doküman eklemememize rağmen dokümanlar yine de çalışacaktır.
### Yol Dönüştürücü ### Yol Dönüştürücü { #path-convertor }
Direkt olarak Starlette kütüphanesinden gelen bir opsiyon sayesinde aşağıdaki gibi *yol* içeren bir *yol parametresi* bağlantısı tanımlayabilirsiniz: Direkt olarak Starlette kütüphanesinden gelen bir opsiyon sayesinde aşağıdaki gibi *yol* içeren bir *yol parametresi* bağlantısı tanımlayabilirsiniz:
@ -233,24 +227,24 @@ Bu durumda, parametrenin adı `file_path` olacaktır ve son kısım olan `:path`
Böylece şunun gibi bir kullanım yapabilirsiniz: Böylece şunun gibi bir kullanım yapabilirsiniz:
{* ../../docs_src/path_params/tutorial004.py hl[6] *} {* ../../docs_src/path_params/tutorial004_py39.py hl[6] *}
/// tip | İpucu /// tip | İpucu
Parametrenin başında `/home/johndoe/myfile.txt` yolunda olduğu gibi (`/`) işareti ile birlikte kullanmanız gerektiği durumlar olabilir. Parametrenin `/home/johndoe/myfile.txt` olacak şekilde, başında eğik çizgi (`/`) ile başlaması gerekebilir.
Bu durumda, URL, `files` ile `home` arasında iki eğik çizgiye (`//`) sahip olup `/files//home/johndoe/myfile.txt` gibi gözükecektir. Bu durumda, URL, `files` ile `home` arasında iki eğik çizgiye (`//`) sahip olup `/files//home/johndoe/myfile.txt` gibi gözükecektir.
/// ///
## Özet ## Özet { #recap }
**FastAPI** ile kısa, sezgisel ve standart Python tip tanımlamaları kullanarak şunları elde edersiniz: **FastAPI** ile kısa, sezgisel ve standart Python tip tanımlamaları kullanarak şunları elde edersiniz:
* Editör desteği: hata denetimi, otomatik tamamlama, vb. * Editör desteği: hata denetimi, otomatik tamamlama, vb.
* Veri "<abbr title="HTTP isteği ile birlikte gelen string'i Python verisine dönüştürme">dönüştürme</abbr>" * Veri "<abbr title="HTTP request'i ile birlikte gelen string'i Python verisine dönüştürme">parsing</abbr>"
* Veri doğrulama * Veri doğrulama
* API tanımlamaları ve otomatik dokümantasyon * API annotation'ı ve otomatik dokümantasyon
Ve sadece, bunları bir kez tanımlamanız yeterli. Ve sadece, bunları bir kez tanımlamanız yeterli.

94
docs/tr/docs/tutorial/query-params.md

@ -1,83 +1,83 @@
# Sorgu Parametreleri # Sorgu Parametreleri { #query-parameters }
Fonksiyonda yol parametrelerinin parçası olmayan diğer tanımlamalar otomatik olarak "sorgu" parametresi olarak yorumlanır. Fonksiyonda path parametrelerinin parçası olmayan diğer fonksiyon parametrelerini tanımladığınızda, bunlar otomatik olarak "query" parametreleri olarak yorumlanır.
{* ../../docs_src/query_params/tutorial001.py hl[9] *} {* ../../docs_src/query_params/tutorial001_py39.py hl[9] *}
Sorgu, bağlantıdaki `?` kısmından sonra gelen ve `&` işareti ile ayrılan anahtar-değer çiftlerinin oluşturduğu bir kümedir. Query, URL'deki `?` işaretinden sonra gelen ve `&` karakterleri ile ayrılan anahtar-değer çiftleri kümesidir.
Örneğin, aşağıdaki bağlantıda: Örneğin, şu URL'de:
``` ```
http://127.0.0.1:8000/items/?skip=0&limit=10 http://127.0.0.1:8000/items/?skip=0&limit=10
``` ```
...sorgu parametreleri şunlardır: ...query parametreleri şunlardır:
* `skip`: değeri `0`'dır * `skip`: değeri `0` olan
* `limit`: değeri `10`'dır * `limit`: değeri `10` olan
Parametreler bağlantının bir parçası oldukları için doğal olarak string olarak değerlendirilirler. URL'nin bir parçası oldukları için "doğal olarak" string'dirler.
Fakat, Python tipleri ile tanımlandıkları zaman (yukarıdaki örnekte `int` oldukları gibi), parametreler o tiplere dönüştürülür ve o tipler çerçevesinde doğrulanırlar. Ama onları Python tipleri ile tanımladığınızda (yukarıdaki örnekte `int` olarak), o tipe dönüştürülürler ve o tipe göre doğrulanırlar.
Yol parametreleri için geçerli olan her türlü işlem aynı şekilde sorgu parametreleri için de geçerlidir: Path parametreleri için geçerli olan tüm süreç, query parametreleri için de geçerlidir:
* Editör desteği (şüphesiz) * Editör desteği (tabii ki)
* Veri "<abbr title="HTTP isteği ile birlikte gelen string'i Python verisine dönüştürme">ayrıştırma</abbr>" * Veri <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>
* Veri doğrulama * Veri doğrulama
* Otomatik dokümantasyon * Otomatik dokümantasyon
## Varsayılanlar ## Varsayılanlar { #defaults }
Sorgu parametreleri, adres yolunun sabit bir parçası olmadıklarından dolayı isteğe bağlı ve varsayılan değere sahip olabilirler. Query parametreleri path'in sabit bir parçası olmadığından, opsiyonel olabilir ve varsayılan değerlere sahip olabilirler.
Yukarıdaki örnekte `skip=0` ve `limit=10` varsayılan değere sahiplerdir. Yukarıdaki örnekte `skip=0` ve `limit=10` varsayılan değerlerine sahipler.
Yani, aşağıdaki bağlantıya gitmek: Yani şu URL'ye gitmek:
``` ```
http://127.0.0.1:8000/items/ http://127.0.0.1:8000/items/
``` ```
şu adrese gitmek ile aynı etkiye sahiptir: şuna gitmek ile aynı olacaktır:
``` ```
http://127.0.0.1:8000/items/?skip=0&limit=10 http://127.0.0.1:8000/items/?skip=0&limit=10
``` ```
Ancak, mesela şöyle bir adresi ziyaret ederseniz: Ama örneğin şuna giderseniz:
``` ```
http://127.0.0.1:8000/items/?skip=20 http://127.0.0.1:8000/items/?skip=20
``` ```
Fonksiyonunuzdaki parametre değerleri aşağıdaki gibi olacaktır: Fonksiyonunuzdaki parametre değerleri şöyle olacaktır:
* `skip=20`: çünkü bağlantıda böyle tanımlandı. * `skip=20`: çünkü URL'de siz ayarladınız
* `limit=10`: çünkü varsayılan değer buydu. * `limit=10`: çünkü varsayılan değer buydu
## İsteğe Bağlı Parametreler ## Opsiyonel parametreler { #optional-parameters }
Aynı şekilde, varsayılan değerlerini `None` olarak atayarak isteğe bağlı parametreler tanımlayabilirsiniz: Aynı şekilde, varsayılanını `None` yaparak opsiyonel query parametreleri tanımlayabilirsiniz:
{* ../../docs_src/query_params/tutorial002_py310.py hl[7] *} {* ../../docs_src/query_params/tutorial002_py310.py hl[7] *}
Bu durumda, `q` fonksiyon parametresi isteğe bağlı olacak ve varsayılan değer olarak `None` alacaktır. Bu durumda, fonksiyon parametresi `q` opsiyonel olacaktır ve varsayılan olarak `None` olacaktır.
/// check | Ek bilgi /// check | Ek bilgi
Ayrıca, dikkatinizi çekerim ki; **FastAPI**, `item_id` parametresinin bir yol parametresi olduğunu ve `q` parametresinin yol değil bir sorgu parametresi olduğunu fark edecek kadar beceriklidir. Ayrıca **FastAPI**'nin, path parametresi `item_id`'nin bir path parametresi olduğunu ve `q`'nun olmadığını, dolayısıyla bir query parametresi olduğunu fark edecek kadar akıllı olduğuna da dikkat edin.
/// ///
## Sorgu Parametresi Tip Dönüşümü ## Query parametresi tip dönüşümü { #query-parameter-type-conversion }
Aşağıda görüldüğü gibi dönüştürülmek üzere `bool` tipleri de tanımlayabilirsiniz: `bool` tiplerini de tanımlayabilirsiniz ve dönüştürüleceklerdir:
{* ../../docs_src/query_params/tutorial003_py310.py hl[7] *} {* ../../docs_src/query_params/tutorial003_py310.py hl[7] *}
Bu durumda, eğer şu adrese giderseniz: Bu durumda, şuna giderseniz:
``` ```
http://127.0.0.1:8000/items/foo?short=1 http://127.0.0.1:8000/items/foo?short=1
@ -107,38 +107,38 @@ veya
http://127.0.0.1:8000/items/foo?short=yes http://127.0.0.1:8000/items/foo?short=yes
``` ```
veya adres, herhangi farklı bir harf varyasyonu içermesi durumuna rağmen (büyük harf, sadece baş harfi büyük kelime, vb.) fonksiyonunuz, `bool` tipli `short` parametresini `True` olarak algılayacaktır. Aksi halde `False` olarak algılanacaktır. veya başka herhangi bir büyük/küçük harf varyasyonunda (tamamı büyük harf, ilk harfi büyük, vb.), fonksiyonunuz `short` parametresini `bool` değeri `True` olacak şekilde görecektir. Aksi halde `False` olarak görecektir.
## Çoklu Yol ve Sorgu Parametreleri ## Çoklu path ve query parametreleri { #multiple-path-and-query-parameters }
**FastAPI** neyin ne olduğunu ayırt edebileceğinden dolayı aynı anda birden fazla yol ve sorgu parametresi tanımlayabilirsiniz. Aynı anda birden fazla path parametresi ve query parametresi tanımlayabilirsiniz, **FastAPI** hangisinin hangisi olduğunu bilir.
Ve parametreleri, herhangi bir sıraya koymanıza da gerek yoktur. Ve onları belirli bir sırayla tanımlamak zorunda değilsiniz.
İsimlerine göre belirleneceklerdir: İsimlerine göre tespit edileceklerdir:
{* ../../docs_src/query_params/tutorial004_py310.py hl[6,8] *} {* ../../docs_src/query_params/tutorial004_py310.py hl[6,8] *}
## Zorunlu Sorgu Parametreleri ## Zorunlu query parametreleri { #required-query-parameters }
Türü yol olmayan bir parametre (şu ana kadar sadece sorgu parametrelerini gördük) için varsayılan değer tanımlarsanız o parametre zorunlu olmayacaktır. Path olmayan parametreler (şimdilik sadece query parametrelerini gördük) için varsayılan bir değer tanımladığınızda, bu zorunlu değildir.
Parametre için belirli bir değer atamak istemeyip parametrenin sadece isteğe bağlı olmasını istiyorsanız değerini `None` olarak atayabilirsiniz. Belirli bir değer eklemek istemiyor ama sadece opsiyonel olmasını istiyorsanız, varsayılanı `None` olarak ayarlayın.
Fakat, bir sorgu parametresini zorunlu yapmak istiyorsanız varsayılan bir değer atamamanız yeterli olacaktır: Ama bir query parametresini zorunlu yapmak istediğinizde, herhangi bir varsayılan değer tanımlamamanız yeterlidir:
{* ../../docs_src/query_params/tutorial005.py hl[6:7] *} {* ../../docs_src/query_params/tutorial005_py39.py hl[6:7] *}
Burada `needy` parametresi `str` tipinden oluşan zorunlu bir sorgu parametresidir. Burada query parametresi `needy`, `str` tipinde zorunlu bir query parametresidir.
Eğer tarayıcınızda şu bağlantıyı: Tarayıcınızda şöyle bir URL açarsanız:
``` ```
http://127.0.0.1:8000/items/foo-item http://127.0.0.1:8000/items/foo-item
``` ```
...`needy` parametresini eklemeden açarsanız şuna benzer bir hata ile karşılaşırsınız: ...zorunlu parametre `needy`'yi eklemeden, şuna benzer bir hata görürsünüz:
```JSON ```JSON
{ {
@ -156,13 +156,13 @@ http://127.0.0.1:8000/items/foo-item
} }
``` ```
`needy` zorunlu bir parametre olduğundan dolayı bağlantıda tanımlanması gerekir: `needy` zorunlu bir parametre olduğundan, URL'de ayarlamanız gerekir:
``` ```
http://127.0.0.1:8000/items/foo-item?needy=sooooneedy http://127.0.0.1:8000/items/foo-item?needy=sooooneedy
``` ```
...bu iş görür: ...bu çalışır:
```JSON ```JSON
{ {
@ -175,14 +175,14 @@ Ve elbette, bazı parametreleri zorunlu, bazılarını varsayılan değerli ve b
{* ../../docs_src/query_params/tutorial006_py310.py hl[8] *} {* ../../docs_src/query_params/tutorial006_py310.py hl[8] *}
Bu durumda, 3 tane sorgu parametresi var olacaktır: Bu durumda, 3 query parametresi vardır:
* `needy`, zorunlu bir `str`. * `needy`, zorunlu bir `str`.
* `skip`, varsayılan değeri `0` olan bir `int`. * `skip`, varsayılan değeri `0` olan bir `int`.
* `limit`, isteğe bağlı bir `int`. * `limit`, opsiyonel bir `int`.
/// tip | İpucu /// tip | İpucu
Ayrıca, [Yol Parametrelerinde](path-params.md#on-tanml-degerler){.internal-link target=_blank} de kullanıldığı şekilde `Enum` sınıfından faydalanabilirsiniz. [Path Parameters](path-params.md#predefined-values){.internal-link target=_blank} ile aynı şekilde `Enum`'ları da kullanabilirsiniz.
/// ///

48
docs/tr/docs/tutorial/request-forms.md

@ -1,69 +1,73 @@
# Form Verisi # Form Verisi { #form-data }
İstek gövdesinde JSON verisi yerine form alanları karşılamanız gerketiğinde `Form` sınıfını kullanabilirsiniz. JSON yerine form alanları almanız gerektiğinde `Form` kullanabilirsiniz.
/// info | Bilgi /// info | Bilgi
Formları kullanmak için öncelikle <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a> paketini indirmeniz gerekmektedir. Formları kullanmak için önce <a href="https://github.com/Kludex/python-multipart" class="external-link" target="_blank">`python-multipart`</a> paketini kurun.
Örneğin `pip install python-multipart`. Bir [virtual environment](../virtual-environments.md){.internal-link target=_blank} oluşturduğunuzdan emin olun, onu aktive edin ve ardından örneğin şöyle kurun:
```console
$ pip install python-multipart
```
/// ///
## `Form` Sınıfını Projenize Dahil Edin ## `Form`'u Import Edin { #import-form }
`Form` sınıfını `fastapi`'den projenize dahil edin: `Form`'u `fastapi`'den import edin:
{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[3] *} {* ../../docs_src/request_forms/tutorial001_an_py39.py hl[3] *}
## `Form` Parametrelerini Tanımlayın ## `Form` Parametrelerini Tanımlayın { #define-form-parameters }
Form parametrelerini `Body` veya `Query` için yaptığınız gibi oluşturun: Form parametrelerini `Body` veya `Query` için yaptığınız gibi oluşturun:
{* ../../docs_src/request_forms/tutorial001_an_py39.py hl[9] *} {* ../../docs_src/request_forms/tutorial001_an_py39.py hl[9] *}
Örneğin, OAuth2 spesifikasyonunun kullanılabileceği ("şifre akışı" olarak adlandırılan) yollardan birinde, form alanları olarak <abbr title="Kullanıcı Adı: Username">"username"</abbr> ve <abbr title="Şifre: Password">"password"</abbr> gönderilmesi gerekir. Örneğin, OAuth2 spesifikasyonunun kullanılabileceği ("password flow" olarak adlandırılan) yollardan birinde, form alanları olarak `username` ve `password` göndermek gerekir.
Bu <abbr title="Spesifikasyon: Specification">spesifikasyon</abbr> form alanlarını adlandırırken isimlerinin birebir `username` ve `password` olmasını ve JSON verisi yerine form verisi olarak gönderilmesini gerektirir. <abbr title="specification - spesifikasyon">spec</abbr> alanların isimlerinin birebir `username` ve `password` olmasını ve JSON değil form alanları olarak gönderilmesini gerektirir.
`Form` sınıfıyla tanımlama yaparken `Body`, `Query`, `Path` ve `Cookie` sınıflarında kullandığınız aynı validasyon, örnekler, isimlendirme (örneğin `username` yerine `user-name` kullanımı) ve daha fazla konfigurasyonu kullanabilirsiniz. `Form` ile `Body` (ve `Query`, `Path`, `Cookie`) ile yaptığınız aynı konfigurasyonları (validasyon, örnekler, bir alias (ör. `username` yerine `user-name`), vb.) bildirebilirsiniz.
/// info | Bilgi /// info | Bilgi
`Form` doğrudan `Body` sınıfını miras alan bir sınıftır. `Form`, doğrudan `Body`'den miras alan bir sınıftır.
/// ///
/// tip | İpucu /// tip | İpucu
Form gövdelerini tanımlamak için `Form` sınıfını kullanmanız gerekir; çünkü bu olmadan parametreler sorgu parametreleri veya gövde (JSON) parametreleri olarak yorumlanır. Form gövdelerini bildirmek için `Form`'u açıkça kullanmanız gerekir; çünkü bu olmadan parametreler query parametreleri veya gövde (JSON) parametreleri olarak yorumlanır.
/// ///
## "Form Alanları" Hakkında ## "Form Alanları" Hakkında { #about-form-fields }
HTML formlarının (`<form></form>`) verileri sunucuya gönderirken JSON'dan farklı özel bir kodlama kullanır. HTML formlarının (`<form></form>`) verileri sunucuya gönderme şekli normalde bu veriler için JSON'dan farklı "özel" bir kodlama kullanır.
**FastAPI** bu verilerin JSON yerine doğru şekilde okunmasını sağlayacaktır. **FastAPI** bu veriyi JSON yerine doğru yerden okuduğundan emin olur.
/// note | Teknik Detaylar /// note | Teknik Detaylar
Form verileri normalde `application/x-www-form-urlencoded` medya tipiyle kodlanır. Formlardan gelen veriler normalde "media type" `application/x-www-form-urlencoded` kullanılarak kodlanır.
Ancak form içerisinde dosyalar yer aldığında `multipart/form-data` olarak kodlanır. Bir sonraki bölümde dosyaların işlenmesi hakkında bilgi edineceksiniz. Ancak form dosyalar içerdiğinde `multipart/form-data` olarak kodlanır. Bir sonraki bölümde dosyaların işlenmesi hakkında okuyacaksınız.
Form kodlama türleri ve form alanları hakkında daha fazla bilgi edinmek istiyorsanız <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr> web docs for <code>POST</code></a> sayfasını ziyaret edebilirsiniz. Bu kodlamalar ve form alanları hakkında daha fazla bilgi edinmek isterseniz <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST" class="external-link" target="_blank"><abbr title="Mozilla Developer Network">MDN</abbr> web docs for <code>POST</code></a> sayfasına gidin.
/// ///
/// warning | Uyarı /// warning | Uyarı
*Yol operasyonları* içerisinde birden fazla `Form` parametresi tanımlayabilirsiniz ancak bunlarla birlikte JSON verisi kabul eden `Body` alanları tanımlayamazsınız çünkü bu durumda istek gövdesi `application/json` yerine `application/x-www-form-urlencoded` ile kodlanmış olur. Bir *path operation* içinde birden fazla `Form` parametresi bildirebilirsiniz, ancak JSON olarak almayı beklediğiniz `Body` alanlarını da bildiremezsiniz; çünkü bu durumda request gövdesi `application/json` yerine `application/x-www-form-urlencoded` kullanılarak kodlanır.
Bu **FastAPI**'ın getirdiği bir kısıtlama değildir, HTTP protokolünün bir parçasıdır. Bu **FastAPI**'ın bir kısıtlama değildir, HTTP protokolünün bir parçasıdır.
/// ///
## Özet ## Özet { #recap }
Form verisi girdi parametreleri tanımlamak için `Form` sınıfını kullanın. Form verisi input parametrelerini bildirmek için `Form` kullanın.

38
docs/tr/docs/tutorial/static-files.md

@ -1,40 +1,40 @@
# Statik Dosyalar # Statik Dosyalar { #static-files }
`StaticFiles`'ı kullanarak statik dosyaları bir yol altında sunabilirsiniz. `StaticFiles`'ı kullanarak bir dizinden statik dosyaları otomatik olarak sunabilirsiniz.
## `StaticFiles` Kullanımı ## `StaticFiles`'ı Kullanma { #use-staticfiles }
* `StaticFiles` sınıfını projenize dahil edin. * `StaticFiles`'ı içe aktarın.
* Bir `StaticFiles()` örneğini belirli bir yola bağlayın. * Belirli bir path altında bir `StaticFiles()` örneğini "mount" edin.
{* ../../docs_src/static_files/tutorial001.py hl[2,6] *} {* ../../docs_src/static_files/tutorial001_py39.py hl[2,6] *}
/// note | Teknik Detaylar /// note | Teknik Detaylar
Projenize dahil etmek için `from starlette.staticfiles import StaticFiles` kullanabilirsiniz. Ayrıca `from starlette.staticfiles import StaticFiles` kullanabilirsiniz.
**FastAPI**, geliştiricilere kolaylık sağlamak amacıyla `starlette.staticfiles``fastapi.staticfiles` olarak sağlar. Ancak `StaticFiles` sınıfı aslında doğrudan Starlette'den gelir. **FastAPI**, geliştirici olarak sizin için bir kolaylık olarak `starlette.staticfiles``fastapi.staticfiles` olarak sağlar. Ancak aslında doğrudan Starlette'den gelir.
/// ///
### Bağlama (Mounting) Nedir? ### "Mounting" Nedir { #what-is-mounting }
"Bağlamak", belirli bir yola tamamen "bağımsız" bir uygulama eklemek anlamına gelir ve ardından tüm alt yollara gelen istekler bu uygulama tarafından işlenir. "Mounting", belirli bir path'e tamamen "bağımsız" bir uygulama eklemek anlamına gelir; bu uygulama daha sonra tüm alt path'leri işlemekle ilgilenir.
Bu, bir `APIRouter` kullanmaktan farklıdır çünkü bağlanmış bir uygulama tamamen bağımsızdır. Ana uygulamanızın OpenAPI ve dokümanlar, bağlanmış uygulamadan hiçbir şey içermez, vb. Bu, bir `APIRouter` kullanmaktan farklıdır çünkü mount edilmiş bir uygulama tamamen bağımsızdır. Ana uygulamanızın OpenAPI ve dokümanları, mount edilmiş uygulamadan hiçbir şey içermez, vb.
[Advanced User Guide](../advanced/index.md){.internal-link target=_blank} bölümünde daha fazla bilgi edinebilirsiniz. Bununla ilgili daha fazlasını [Advanced User Guide](../advanced/index.md){.internal-link target=_blank} bölümünde okuyabilirsiniz.
## Detaylar ## Detaylar { #details }
`"/static"` ifadesi, bu "alt uygulamanın" "bağlanacağı" alt yolu belirtir. Bu nedenle, `"/static"` ile başlayan her yol, bu uygulama tarafından işlenir. İlk `"/static"`, bu "alt uygulamanın" üzerine "mount" edileceği alt path'i ifade eder. Dolayısıyla, `"/static"` ile başlayan herhangi bir path bunun tarafından işlenir.
`directory="static"` ifadesi, statik dosyalarınızı içeren dizinin adını belirtir. `directory="static"`, statik dosyalarınızı içeren dizinin adını ifade eder.
`name="static"` ifadesi, alt uygulamanın **FastAPI** tarafından kullanılacak ismini belirtir. `name="static"`, **FastAPI** tarafından dahili olarak kullanılabilecek bir isim verir.
Bu parametrelerin hepsi "`static`"den farklı olabilir, bunları kendi uygulamanızın ihtiyaçlarına göre belirleyebilirsiniz. Bu parametrelerin tümü "`static`"den farklı olabilir; bunları kendi uygulamanızın ihtiyaçlarına ve spesifik detaylarına göre ayarlayın.
## Daha Fazla Bilgi ## Daha Fazla Bilgi { #more-info }
Daha fazla detay ve seçenek için <a href="https://www.starlette.dev/staticfiles/" class="external-link" target="_blank">Starlette'in Statik Dosyalar hakkındaki dokümantasyonunu</a> incelleyin. Daha fazla detay ve seçenek için <a href="https://www.starlette.dev/staticfiles/" class="external-link" target="_blank">Statik Dosyalar hakkında Starlette dokümanlarını</a> inceleyin.

Loading…
Cancel
Save