committed by
GitHub
92 changed files with 2142 additions and 1424 deletions
@ -0,0 +1,11 @@ |
|||||
|
/// details | 🌐 Translation by AI and humans |
||||
|
|
||||
|
This translation was made by AI guided by humans. 🤝 |
||||
|
|
||||
|
It could have mistakes of misunderstanding the original meaning, or looking unnatural, etc. 🤖 |
||||
|
|
||||
|
You can improve this translation by [helping us guide the AI LLM better](https://fastapi.tiangolo.com/contributing/#translations). |
||||
|
|
||||
|
[English version](ENGLISH_VERSION_URL) |
||||
|
|
||||
|
/// |
||||
@ -0,0 +1,11 @@ |
|||||
|
/// details | 🌐 Перевод выполнен с помощью ИИ и людей |
||||
|
|
||||
|
Этот перевод был сделан ИИ под руководством людей. 🤝 |
||||
|
|
||||
|
В нем могут быть ошибки из-за неправильного понимания оригинального смысла или неестественности и т. д. 🤖 |
||||
|
|
||||
|
Вы можете улучшить этот перевод, [помогая нам лучше направлять ИИ LLM](https://fastapi.tiangolo.com/ru/contributing/#translations). |
||||
|
|
||||
|
[Английская версия](ENGLISH_VERSION_URL) |
||||
|
|
||||
|
/// |
||||
@ -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. 🤓 |
||||
|
|||||
@ -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 temel özelliklerini tanımanız için yeterli olmalıdır. |
||||
|
|
||||
İlerleyen bölümlerde diğer seçenekler, konfigürasyonlar ve ek özellikleri göreceğiz. |
Sonraki bölümlerde diğer seçenekleri, 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 amacınıza bağlı olarak, çözüm bunlardan birinde olabilir. |
||||
|
|
||||
/// |
/// |
||||
|
|
||||
## Önce Öğreticiyi Okuyun |
## Önce Tutorial'ı 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ı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 bu temel 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> |
|
||||
|
|||||
@ -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ümantasyonuna bakın. |
||||
|
|
||||
/// |
/// |
||||
|
|||||
@ -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, yalnızca Starlette ve Uvicorn'un kendilerinin altında yer aldığını gösteriyor (FastAPI bunları dahili olarak kullanır). |
||||
|
|
||||
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ıyaslamalara baktığınızda, farklı türlerdeki birkaç aracın eşdeğermiş gibi 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 araç arasında) Uvicorn, Starlette ve FastAPI'ın birlikte karşılaştırıldığını görebilirsiniz. |
||||
|
|
||||
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, elde edeceği performans o kadar iyi olur. Ayrıca 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 mikroframework'ü |
||||
* **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 mikroframework'ü |
||||
|
|
||||
* **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 kod içermediği 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 ile doğrudan bir uygulama yazmazsınız. Bu, kodunuzun en azından Starlette'in (veya **FastAPI**'ın) sağladığı kodun aşağı yukarı tamamını içermesi gerektiği anlamına gelir. Bunu yaparsanız, nihai uygulamanız; bir framework kullanmış olmanın ve uygulama kodunu ve bug'ları en aza indirmenin getirdiği ek yükle aynı ek yüke sahip olur. |
||||
* 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, Daphne, Hypercorn, uWSGI vb. application server'larla 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 en iyi performansa sahip olacaktır. Aslında Starlette çalışmak için Uvicorn'u kullanır. Bu yüzden muhtemelen yalnızca daha fazla kod çalıştırmak zorunda kaldığı için Uvicorn'dan "daha yavaş" olabilir. |
||||
* Ancak yol bazlı yönlendirme vb. basit web uygulamaları oluşturmak için araçlar sağlar. |
* Ancak path tabanlı routing vb. ile basit web uygulamaları oluşturmanız için 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 framework'lerle (veya mikroframework'lerle) 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ı gibi, **FastAPI** da 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. API'lar oluştururken neredeyse her zaman ihtiyaç duyduğunuz veri doğrulama ve <abbr title="serialization - serileştirme">serialization</abbr> gibi özellikler. Ayrıca bunu kullanarak ücretsiz olarak otomatik dokümantasyon elde edersiniz (otomatik dokümantasyon, çalışan uygulamalara ek yük bile getirmez; startup'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'ı kullanmayıp Starlette'i doğrudan kullansaydınız (veya Sanic, Flask, Responder vb. başka bir aracı), tüm veri doğrulama ve serialization işlemlerini kendiniz uygulamak zorunda kalırdınız. Dolayısıyla nihai uygulamanız, FastAPI kullanılarak inşa edilmiş olsaydı sahip olacağı ek yükle hâlâ aynı ek yüke sahip olurdu. Ve çoğu durumda, uygulamalarda yazılan en büyük kod miktarı veri doğrulama ve serialization 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. |
* Bu nedenle FastAPI kullanarak geliştirme süresinden, bug'lardan, kod satırlarından tasarruf edersiniz; ayrıca muhtemelen, onu kullanmasaydınız (tüm bunları kodunuzda kendiniz uygulamak zorunda kalacağınız için) elde edeceğiniz performansın aynısını (veya daha iyisini) elde edersiniz. |
||||
* 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, Flask-apispec, NestJS, Molten vb. veri doğrulama, serialization ve dokümantasyon sağlayan bir web uygulaması framework'ü (veya araç seti) ile karşılaştırın. Entegre otomatik veri doğrulama, serialization ve dokümantasyona sahip framework'ler. |
||||
|
|||||
@ -1,13 +1,24 @@ |
|||||
# FastAPI Uygulamasını Bulut Sağlayıcılar Üzerinde Yayınlama |
# Bulut Sağlayıcılar Üzerinde FastAPI Yayınlama { #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ı yayınlamak 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, ana bulut sağlayıcıların FastAPI'yi onlarla birlikte yayınlamak için kılavuzları vardır. |
||||
|
|
||||
## 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 çabayla **oluşturma**, **yayınlama** ve **erişme** sürecini kolaylaştırır. |
||||
|
|
||||
Bu hizmetleri denemek ve kılavuzlarını incelemek isteyebilirsiniz. |
FastAPI ile uygulama geliştirirken elde edilen aynı **geliştirici deneyimini**, onları buluta **yayınlamaya** da 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 } |
||||
|
|
||||
|
Diğer bazı 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> |
||||
|
|||||
@ -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, onu **kullanıcılara erişilebilir hale getirmek** 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 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, sorun yaşamadan **erişebilmesini** kapsar. |
||||
|
|
||||
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 olarak değiştirdiğiniz, bozup düzelttiğiniz, geliştirme sunucusunu durdurup yeniden başlattığınız vb. **geliştirme** aşamalarının tam 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 durumunuza 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 araç kombinasyonunu kullanarak kendiniz **bir sunucu deploy edebilirsiniz**, yayınlama sürecinin bir kısmını sizin için gerçekleştiren bir **bulut hizmeti** veya diğer olası seçenekleri kullanabilirsiniz. |
||||
|
|
||||
|
Örneğin, FastAPI'nin arkasındaki ekip olarak, FastAPI uygulamalarını buluta mümkün olduğunca akıcı şekilde deploy etmeyi sağlamak için, FastAPI ile çalışmanın aynı geliştirici deneyimini sunarak <a href="https://fastapicloud.com" class="external-link" target="_blank">**FastAPI Cloud**</a>'u oluşturduk. |
||||
|
|
||||
**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). |
**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). |
||||
|
|
||||
Sonraki bölümlerde akılda tutulması gereken diğer ayrıntıları ve yayınlama tekniklerinden bazılarını göreceksiniz. ✨ |
Sonraki bölümlerde akılda tutulması gereken diğer ayrıntıları ve bunu yapmaya yönelik bazı teknikleri göreceksiniz. ✨ |
||||
|
|||||
@ -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 sorulan sorular için dokümantasyonun diğer bölümlerine çeşitli 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 gerekenden daha fazla veri 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 gruplamak 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 Yanıt Açıklaması - 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. |
Lisans, sürüm, iletişim vb. dahil olmak üzere OpenAPI şemanıza meta veriler 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'ini ö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 olarak oluşturulan dokümantasyon kullanıcı arayüzlerinde 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. |
||||
|
|||||
@ -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 ve çoğu durumda bunları yalnızca doğrudan **projenize** uygulanıyorsa incelemeniz yeterli olacaktır. |
||||
|
|
||||
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 (önerilir) **öğrenmek** istiyorsanız bunun yerine [Öğretici - Kullanıcı Rehberi](../tutorial/index.md){.internal-link target=_blank}'ni bölüm bölüm okuyun. |
||||
|
|
||||
/// |
/// |
||||
|
|||||
@ -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. 😎 |
||||
|
|||||
@ -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ırlar. Bu sayede şablonu projenizin gereksinimlerine göre değiştirip uyarlayabilir, çok iyi bir başlangıç noktası olarak kullanabilirsiniz. 🏁 |
||||
|
|
||||
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, güvenliğin, veritabanının ve bazı API endpoint'lerinin önemli bir kısmı sizin için zaten hazırlanmıştır. |
||||
|
|
||||
## 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 Yığını 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/tr). |
||||
|
- 🧰 Python SQL veritabanı etkileşimleri (ORM) için [SQLModel](https://sqlmodel.tiangolo.com). |
||||
* Full **Docker** entegrasyonu (Docker based). |
- 🔍 FastAPI'nin kullandığı; veri doğrulama ve ayarlar 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ını kullanır. |
||||
* Python <a href="https://github.com/fastapi/fastapi" class="external-link" target="_blank">**FastAPI**</a> backend: |
- 🎨 frontend component'leri 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 üretilen bir frontend client. |
||||
* **Sezgisel**: Editor desteğı. <abbr title="auto-complete, IntelliSense gibi isimlerle de bilinir">Otomatik tamamlama</abbr>. Daha az debugging. |
- 🧪 End-to-End testleri 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 password 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. |
- 📫 E-posta tabanlı şifre 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'sini nasıl kuracağınız 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. |
|
||||
|
|||||
@ -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ı. ✈️ |
||||
|
|||||
@ -1,35 +1,45 @@ |
|||||
# Çerez (Cookie) Parametreleri |
# Çerez (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: |
Öncelikle, `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. |
Ardından, `Path` ve `Query` ile aynı yapıyı kullanarak Cookie parametrelerini 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. |
Ancak `fastapi`'dan `Query`, `Path`, `Cookie` ve diğerlerini import ettiğinizde, bunlar aslında özel sınıflar döndüren fonksiyonlardır, bunu 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. |
Çerezleri tanımlamak için `Cookie` kullanmanız gerekir, aksi halde parametreler query parametreleri olarak yorumlanır. |
||||
|
|
||||
/// |
/// |
||||
|
|
||||
## Özet |
/// info | Bilgi |
||||
|
|
||||
|
**Tarayıcılar çerezleri** özel şekillerde ve arka planda işlediği için, **JavaScript**'in onlara dokunmasına kolayca izin **vermezler**. |
||||
|
|
||||
|
`/docs` adresindeki **API docs UI**'a giderseniz, *path operation*'larınız için çerezlerin **dokümantasyonunu** görebilirsiniz. |
||||
|
|
||||
|
Ancak **veriyi doldurup** "Execute" düğmesine tıklasanız bile, docs UI **JavaScript** ile çalıştığı için çerezler 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. |
`Query` ve `Path` ile aynı ortak deseni kullanarak, çerezleri `Cookie` ile tanımlayın. |
||||
|
|||||
@ -1,69 +1,73 @@ |
|||||
# Form Verisi |
# Form Verisi { #form-data } |
||||
|
|
||||
İstek gövdesinde JSON verisi yerine form alanlarını karşılamanız gerketiğinde `Form` sınıfını kullanabilirsiniz. |
JSON yerine form alanlarını 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, onu etkinleştirdiğinizden emin olun 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 bir `username` ve `password` göndermek zorunludur. |
||||
|
|
||||
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 adının tam olarak `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ı konfigürasyonları tanımlayabilirsiniz; validasyon, örnekler, alias (örn. `username` yerine `user-name`) vb. dahil. |
||||
|
|
||||
/// 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 tanımlamak için `Form`'u açıkça kullanmanız gerekir; çünkü bunu yapmazsanız parametreler query parametreleri veya body (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 veri için JSON'dan farklı "özel" bir encoding kullanır. |
||||
|
|
||||
**FastAPI** bu verilerin JSON yerine doğru şekilde okunmasını sağlayacaktır. |
**FastAPI** bu veriyi JSON yerine doğru yerden okuyacaktır. |
||||
|
|
||||
/// note | Teknik Detaylar |
/// note | Teknik Detaylar |
||||
|
|
||||
Form verileri normalde `application/x-www-form-urlencoded` medya tipiyle kodlanır. |
Formlardan gelen veri normalde "media type" `application/x-www-form-urlencoded` kullanılarak encode edilir. |
||||
|
|
||||
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 encode edilir. Dosyaları ele almayı bir sonraki bölümde 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 encoding'ler ve form alanları hakkında daha fazla okumak 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 tanımlayabilirsiniz, ancak JSON olarak almayı beklediğiniz `Body` alanlarını da ayrıca tanımlayamazsınız; çünkü bu durumda request'in body'si `application/json` yerine `application/x-www-form-urlencoded` ile encode edilmiş olur. |
||||
|
|
||||
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ıtlaması 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 girdi parametrelerini tanımlamak için `Form` kullanın. |
||||
|
|||||
@ -1,40 +1,40 @@ |
|||||
# Statik Dosyalar |
# Statik Dosyalar { #static-files } |
||||
|
|
||||
`StaticFiles`'ı kullanarak statik dosyaları bir yol altında sunabilirsiniz. |
`StaticFiles` kullanarak bir dizindeki statik dosyaları otomatik olarak sunabilirsiniz. |
||||
|
|
||||
## `StaticFiles` Kullanımı |
## `StaticFiles` Kullanımı { #use-staticfiles } |
||||
|
|
||||
* `StaticFiles` sınıfını projenize dahil edin. |
* `StaticFiles`'ı import edin. |
||||
* Bir `StaticFiles()` örneğini belirli bir yola bağlayın. |
* Belirli bir path'te 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. |
`from starlette.staticfiles import StaticFiles` da 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 size kolaylık olsun diye `starlette.staticfiles`'ı `fastapi.staticfiles` olarak da 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'te tamamen "bağımsız" bir uygulama eklemek ve sonrasında tüm alt path'leri handle etmesini sağlamak demektir. |
||||
|
|
||||
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 edilen uygulama tamamen bağımsızdır. Ana uygulamanızın OpenAPI ve docs'ları, mount edilen 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 fazla bilgiyi [Advanced User Guide](../advanced/index.md){.internal-link target=_blank} içinde 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" "mount" edileceği alt path'i ifade eder. Dolayısıyla `"/static"` ile başlayan herhangi bir path bunun tarafından handle edilir. |
||||
|
|
||||
`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**'nin dahili olarak kullanabileceği bir isim verir. |
||||
|
|
||||
Bu parametrelerin hepsi "`static`"den farklı olabilir, bunları kendi uygulamanızın ihtiyaçlarına göre belirleyebilirsiniz. |
Bu parametrelerin hepsi "`static`" ile aynı olmak zorunda değildir; kendi uygulamanızın ihtiyaçlarına ve özel 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">Starlette'in Statik Dosyalar hakkındaki dokümanlarını</a> inceleyin. |
||||
|
|||||
@ -1,83 +1,75 @@ |
|||||
# FastAPI CLI |
# FastAPI CLI { #fastapi-cli } |
||||
|
|
||||
**FastAPI CLI** це програма командного рядка, яку Ви можете використовувати, щоб обслуговувати Ваш додаток FastAPI, керувати Вашими FastApi проектами, тощо. |
**FastAPI CLI** — це програма командного рядка, яку ви можете використовувати, щоб обслуговувати ваш застосунок FastAPI, керувати вашим проєктом FastAPI тощо. |
||||
|
|
||||
Коли Ви встановлюєте FastApi (тобто виконуєте `pip install "fastapi[standard]"`), Ви також встановлюєте пакунок `fastapi-cli`, цей пакунок надає команду `fastapi` в терміналі. |
Коли ви встановлюєте FastAPI (наприклад, за допомогою `pip install "fastapi[standard]"`), він включає пакет під назвою `fastapi-cli`, цей пакет надає команду `fastapi` у терміналі. |
||||
|
|
||||
Для запуску Вашого FastAPI проекту для розробки, Ви можете скористатись командою `fastapi dev`: |
Щоб запустити ваш застосунок FastAPI для розробки, ви можете використати команду `fastapi dev`: |
||||
|
|
||||
<div class="termy"> |
<div class="termy"> |
||||
|
|
||||
```console |
```console |
||||
$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:single">main.py</u> |
$ <font color="#4E9A06">fastapi</font> dev <u style="text-decoration-style:solid">main.py</u> |
||||
<font color="#3465A4">INFO </font> Using path <font color="#3465A4">main.py</font> |
|
||||
<font color="#3465A4">INFO </font> Resolved absolute path <font color="#75507B">/home/user/code/awesomeapp/</font><font color="#AD7FA8">main.py</font> |
<span style="background-color:#009485"><font color="#D3D7CF"> FastAPI </font></span> Starting development server 🚀 |
||||
<font color="#3465A4">INFO </font> Searching for package file structure from directories with <font color="#3465A4">__init__.py</font> files |
|
||||
<font color="#3465A4">INFO </font> Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font> |
Searching for package file structure from directories with |
||||
|
<font color="#3465A4">__init__.py</font> files |
||||
╭─ <font color="#8AE234"><b>Python module file</b></font> ─╮ |
Importing from <font color="#75507B">/home/user/code/</font><font color="#AD7FA8">awesomeapp</font> |
||||
│ │ |
|
||||
│ 🐍 main.py │ |
<span style="background-color:#007166"><font color="#D3D7CF"> module </font></span> 🐍 main.py |
||||
│ │ |
|
||||
╰──────────────────────╯ |
<span style="background-color:#007166"><font color="#D3D7CF"> code </font></span> Importing the FastAPI app object from the module with the |
||||
|
following code: |
||||
<font color="#3465A4">INFO </font> Importing module <font color="#4E9A06">main</font> |
|
||||
<font color="#3465A4">INFO </font> Found importable FastAPI app |
<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> |
||||
|
|
||||
╭─ <font color="#8AE234"><b>Importable FastAPI app</b></font> ─╮ |
<span style="background-color:#007166"><font color="#D3D7CF"> app </font></span> Using import string: <font color="#3465A4">main:app</font> |
||||
│ │ |
|
||||
│ <span style="background-color:#272822"><font color="#FF4689">from</font></span><span style="background-color:#272822"><font color="#F8F8F2"> main </font></span><span style="background-color:#272822"><font color="#FF4689">import</font></span><span style="background-color:#272822"><font color="#F8F8F2"> app</font></span><span style="background-color:#272822"> </span> │ |
<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: |
||||
<font color="#3465A4">INFO </font> Using import string <font color="#8AE234"><b>main:app</b></font> |
<b>fastapi run</b> |
||||
|
|
||||
<span style="background-color:#C4A000"><font color="#2E3436">╭────────── FastAPI CLI - Development mode ───────────╮</font></span> |
Logs: |
||||
<span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span> |
|
||||
<span style="background-color:#C4A000"><font color="#2E3436">│ Serving at: http://127.0.0.1:8000 │</font></span> |
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Will watch for changes in these directories: |
||||
<span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span> |
<b>[</b><font color="#4E9A06">'/home/user/code/awesomeapp'</font><b>]</b> |
||||
<span style="background-color:#C4A000"><font color="#2E3436">│ API docs: http://127.0.0.1:8000/docs │</font></span> |
<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 |
||||
<span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span> |
quit<b>)</b> |
||||
<span style="background-color:#C4A000"><font color="#2E3436">│ Running in development mode, for production use: │</font></span> |
<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:#C4A000"><font color="#2E3436">│ │</font></span> |
<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:#C4A000"><font color="#2E3436">│ </font></span><span style="background-color:#C4A000"><font color="#555753"><b>fastapi run</b></font></span><span style="background-color:#C4A000"><font color="#2E3436"> │</font></span> |
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Waiting for application startup. |
||||
<span style="background-color:#C4A000"><font color="#2E3436">│ │</font></span> |
<span style="background-color:#007166"><font color="#D3D7CF"> INFO </font></span> Application startup complete. |
||||
<span style="background-color:#C4A000"><font color="#2E3436">╰─────────────────────────────────────────────────────╯</font></span> |
|
||||
|
|
||||
<font color="#4E9A06">INFO</font>: Will watch for changes in these directories: ['/home/user/code/awesomeapp'] |
|
||||
<font color="#4E9A06">INFO</font>: Uvicorn running on <b>http://127.0.0.1:8000</b> (Press CTRL+C to quit) |
|
||||
<font color="#4E9A06">INFO</font>: Started reloader process [<font color="#34E2E2"><b>2265862</b></font>] using <font color="#34E2E2"><b>WatchFiles</b></font> |
|
||||
<font color="#4E9A06">INFO</font>: Started server process [<font color="#06989A">2265873</font>] |
|
||||
<font color="#4E9A06">INFO</font>: Waiting for application startup. |
|
||||
<font color="#4E9A06">INFO</font>: Application startup complete. |
|
||||
``` |
``` |
||||
|
|
||||
</div> |
</div> |
||||
|
|
||||
Програма командного рядка `fastapi` це **FastAPI CLI**. |
Програма командного рядка під назвою `fastapi` — це **FastAPI CLI**. |
||||
|
|
||||
FastAPI CLI приймає шлях до Вашої Python програми (напр. `main.py`) і автоматично виявляє екземпляр `FastAPI` (зазвичай названий `app`), обирає коректний процес імпорту, а потім обслуговує його. |
FastAPI CLI бере шлях до вашої Python-програми (наприклад, `main.py`) і автоматично виявляє екземпляр `FastAPI` (зазвичай з назвою `app`), визначає правильний процес імпорту, а потім обслуговує його. |
||||
|
|
||||
Натомість, для запуску у продакшн використовуйте `fastapi run`. 🚀 |
Натомість, для продакшн ви використали б `fastapi run`. 🚀 |
||||
|
|
||||
Всередині **FastAPI CLI** використовує <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a>, високопродуктивний, production-ready, ASGI cервер. 😎 |
Внутрішньо **FastAPI CLI** використовує <a href="https://www.uvicorn.dev" class="external-link" target="_blank">Uvicorn</a>, високопродуктивний, production-ready, ASGI сервер. 😎 |
||||
|
|
||||
## `fastapi dev` |
## `fastapi dev` { #fastapi-dev } |
||||
|
|
||||
Використання `fastapi dev` ініціює режим розробки. |
Запуск `fastapi dev` ініціює режим розробки. |
||||
|
|
||||
За замовчуванням, **автоматичне перезавантаження** увімкнене, автоматично перезавантажуючи сервер кожного разу, коли Ви змінюєте Ваш код. Це ресурсо-затратно, та може бути менш стабільним, ніж коли воно вимкнене. Ви повинні використовувати його тільки під час розробки. Воно також слухає IP-адресу `127.0.0.1`, що є IP Вашого девайсу для самостійної комунікації з самим собою (`localhost`). |
За замовчуванням **auto-reload** увімкнено, і сервер автоматично перезавантажується, коли ви вносите зміни у ваш код. Це ресурсоємно та може бути менш стабільним, ніж коли його вимкнено. Вам слід використовувати це лише для розробки. Також він слухає IP-адресу `127.0.0.1`, яка є IP-адресою для того, щоб ваша машина могла взаємодіяти лише сама з собою (`localhost`). |
||||
|
|
||||
## `fastapi run` |
## `fastapi run` { #fastapi-run } |
||||
|
|
||||
Виконання `fastapi run` запустить FastAPI у продакшн-режимі за замовчуванням. |
Виконання `fastapi run` за замовчуванням запускає FastAPI у продакшн-режимі. |
||||
|
|
||||
За замовчуванням, **автоматичне перезавантаження** вимкнене. Воно також прослуховує IP-адресу `0.0.0.0`, що означає всі доступні IP адреси, тим самим даючи змогу будь-кому комунікувати з девайсом. Так Ви зазвичай будете запускати його у продакшн, наприклад у контейнері. |
За замовчуванням **auto-reload** вимкнено. Також він слухає IP-адресу `0.0.0.0`, що означає всі доступні IP-адреси, таким чином він буде публічно доступним для будь-кого, хто може взаємодіяти з машиною. Зазвичай саме так ви запускатимете його в продакшн, наприклад у контейнері. |
||||
|
|
||||
В більшості випадків Ви можете (і маєте) мати "termination proxy", який обробляє HTTPS для Вас, це залежить від способу розгортання вашого додатку, Ваш провайдер може зробити це для Вас, або Вам потрібно налаштувати його самостійно. |
У більшості випадків ви (і вам слід) матимете «termination proxy», який обробляє HTTPS для вас зверху; це залежатиме від того, як ви розгортаєте ваш застосунок: ваш провайдер може зробити це за вас, або вам може знадобитися налаштувати це самостійно. |
||||
|
|
||||
/// tip |
/// tip | Порада |
||||
|
|
||||
Ви можете дізнатись більше про це у [документації про розгортування](deployment/index.md){.internal-link target=_blank}. |
Ви можете дізнатися більше про це в [документації з розгортання](deployment/index.md){.internal-link target=_blank}. |
||||
|
|
||||
/// |
/// |
||||
|
|||||
@ -1 +1,3 @@ |
|||||
from starlette.middleware.wsgi import WSGIMiddleware as WSGIMiddleware # noqa |
from starlette.middleware.wsgi import ( |
||||
|
WSGIMiddleware as WSGIMiddleware, |
||||
|
) # pragma: no cover # noqa |
||||
|
|||||
@ -0,0 +1,123 @@ |
|||||
|
""" |
||||
|
Regression test: Ensure app-level responses with Union models and content/examples |
||||
|
don't accumulate duplicate $ref entries in anyOf arrays. |
||||
|
See https://github.com/fastapi/fastapi/pull/14463 |
||||
|
""" |
||||
|
|
||||
|
from typing import Union |
||||
|
|
||||
|
from fastapi import FastAPI |
||||
|
from fastapi.testclient import TestClient |
||||
|
from pydantic import BaseModel |
||||
|
|
||||
|
|
||||
|
class ModelA(BaseModel): |
||||
|
a: str |
||||
|
|
||||
|
|
||||
|
class ModelB(BaseModel): |
||||
|
b: str |
||||
|
|
||||
|
|
||||
|
app = FastAPI( |
||||
|
responses={ |
||||
|
500: { |
||||
|
"model": Union[ModelA, ModelB], |
||||
|
"content": {"application/json": {"examples": {"Case A": {"value": "a"}}}}, |
||||
|
} |
||||
|
} |
||||
|
) |
||||
|
|
||||
|
|
||||
|
@app.get("/route1") |
||||
|
async def route1(): |
||||
|
pass # pragma: no cover |
||||
|
|
||||
|
|
||||
|
@app.get("/route2") |
||||
|
async def route2(): |
||||
|
pass # pragma: no cover |
||||
|
|
||||
|
|
||||
|
client = TestClient(app) |
||||
|
|
||||
|
|
||||
|
def test_openapi_schema(): |
||||
|
response = client.get("/openapi.json") |
||||
|
assert response.status_code == 200, response.text |
||||
|
assert response.json() == { |
||||
|
"openapi": "3.1.0", |
||||
|
"info": {"title": "FastAPI", "version": "0.1.0"}, |
||||
|
"paths": { |
||||
|
"/route1": { |
||||
|
"get": { |
||||
|
"summary": "Route1", |
||||
|
"operationId": "route1_route1_get", |
||||
|
"responses": { |
||||
|
"200": { |
||||
|
"description": "Successful Response", |
||||
|
"content": {"application/json": {"schema": {}}}, |
||||
|
}, |
||||
|
"500": { |
||||
|
"description": "Internal Server Error", |
||||
|
"content": { |
||||
|
"application/json": { |
||||
|
"schema": { |
||||
|
"anyOf": [ |
||||
|
{"$ref": "#/components/schemas/ModelA"}, |
||||
|
{"$ref": "#/components/schemas/ModelB"}, |
||||
|
], |
||||
|
"title": "Response 500 Route1 Route1 Get", |
||||
|
}, |
||||
|
"examples": {"Case A": {"value": "a"}}, |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
} |
||||
|
}, |
||||
|
"/route2": { |
||||
|
"get": { |
||||
|
"summary": "Route2", |
||||
|
"operationId": "route2_route2_get", |
||||
|
"responses": { |
||||
|
"200": { |
||||
|
"description": "Successful Response", |
||||
|
"content": {"application/json": {"schema": {}}}, |
||||
|
}, |
||||
|
"500": { |
||||
|
"description": "Internal Server Error", |
||||
|
"content": { |
||||
|
"application/json": { |
||||
|
"schema": { |
||||
|
"anyOf": [ |
||||
|
{"$ref": "#/components/schemas/ModelA"}, |
||||
|
{"$ref": "#/components/schemas/ModelB"}, |
||||
|
], |
||||
|
"title": "Response 500 Route2 Route2 Get", |
||||
|
}, |
||||
|
"examples": {"Case A": {"value": "a"}}, |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
}, |
||||
|
} |
||||
|
}, |
||||
|
}, |
||||
|
"components": { |
||||
|
"schemas": { |
||||
|
"ModelA": { |
||||
|
"properties": {"a": {"type": "string", "title": "A"}}, |
||||
|
"type": "object", |
||||
|
"required": ["a"], |
||||
|
"title": "ModelA", |
||||
|
}, |
||||
|
"ModelB": { |
||||
|
"properties": {"b": {"type": "string", "title": "B"}}, |
||||
|
"type": "object", |
||||
|
"required": ["b"], |
||||
|
"title": "ModelB", |
||||
|
}, |
||||
|
} |
||||
|
}, |
||||
|
} |
||||
Loading…
Reference in new issue