From 301fdb4a3c57be9657323cefb5a9822445224968 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emirhan=20Soyta=C5=9F?= Date: Sat, 3 Feb 2024 23:11:25 +0300 Subject: [PATCH 1/5] Add Turkish translation for `docs/tr/docs/tutorial/body.md` --- docs/tr/docs/tutorial/body.md | 213 ++++++++++++++++++++++++++++++++++ 1 file changed, 213 insertions(+) create mode 100644 docs/tr/docs/tutorial/body.md diff --git a/docs/tr/docs/tutorial/body.md b/docs/tr/docs/tutorial/body.md new file mode 100644 index 000000000..aeae86db1 --- /dev/null +++ b/docs/tr/docs/tutorial/body.md @@ -0,0 +1,213 @@ +# İstek Gövdesi + +API'a, bir istemciden (mesela tarayıcıdan) veri göndermek istenilen durumlarda veri, **istek gövdesi** olarak gönderilir. + +**İstek** gövdesi API'a istemci tarafından gönderilen veriyi temsil eder. **Yanıt** gövdesi ise API'ın istemciye ilettiği veriden meydana gelir. + +API'lar genellikle her zaman bir **yanıt** gövdesi iletmek zorundadır. Fakat, istemcilerin **istek** gövdesi gönderme gibi bir zorunluluğu yoktur. + +Bütün güç ve avantajlarından faydalınılarak Pydantic modelleri, **istek** gövdeleri oluşturmak için kullanılır. + +!!! info "Bilgi" + Veri göndermek için `POST` (en yaygın), `PUT`, `DELETE` veya `PATCH` kullanılır. + + Bir gövde göndermek için `GET` isteği kullanılmasının, spesifikasyonlar üzerinde beklenmedik etkilere sahip olmasına rağmen, bu olay, özellikle fazlasıyla karmaşık veya olağandışı durumlar için FastAPI tarafından desteklenir. + + Bahsedilen durumun uygulanması tavsiye edilmediğinden dolayı `GET` isteği kullanılırken Swagger UI destekli interaktif doküman, gövde için ek alan göstermeyecektir. Ayrıca aradaki proxyler de bunu desteklemeyebilir. + +## Pydantic'in `BaseModel`'ini Projeye Dahil Edelim + +Öncelikle, `BaseModel` sınıfını `pydantic` paketinden projemize dahil edelim: + +=== "Python 3.10+" + + ```Python hl_lines="2" + {!> ../../../docs_src/body/tutorial001_py310.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="4" + {!> ../../../docs_src/body/tutorial001.py!} + ``` + +## Veri Modelimizi Oluşturalım + +Sonra, `BaseModel` sınıfını miras alacak bir veri modeli sınıfı tanımlayalım. + +Özellikler için standart Python tipleri kullanmayı ihmal etmeyelim: + +=== "Python 3.10+" + + ```Python hl_lines="5-9" + {!> ../../../docs_src/body/tutorial001_py310.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="7-11" + {!> ../../../docs_src/body/tutorial001.py!} + ``` + +Sorgu parametrelerinde olduğu gibi, bir model özelliği, varsayılan değere sahipse o özellik zorunlu değildir, eğer sahip değilse zorunludur. `None` kullanılarak özellikler opsiyonel hale getirilebilir. + +Örneğin üstteki model, alttaki gibi bir JSON "`object`"'i (diğer bir adla Python `dict`'i) tanımlar: + +```JSON +{ + "name": "Foo", + "description": "An optional description", + "price": 45.2, + "tax": 3.5 +} +``` + +...`description` ve `tax` alanları (`None` varsayılan değeri sayesinde) opsiyonel olduklarından dolayı alttaki JSON "`object`"'i de geçerli sayılabilirdi: + +```JSON +{ + "name": "Foo", + "price": 45.2 +} +``` + +## Parametre Olarak Tanımlayalım + +Gövdeyi, bir *yol operasyonu* olarak eklemek için yol ve sorgu parametrelerinde yaptığımız gibi tanımlayabiliriz: + +=== "Python 3.10+" + + ```Python hl_lines="16" + {!> ../../../docs_src/body/tutorial001_py310.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="18" + {!> ../../../docs_src/body/tutorial001.py!} + ``` + +...sonrasında yarattığımız `Item` modelini gövde tipi olarak tanımlayalım. + +## Sonuçlar + +Yalnızca bu Python tip tanımlaması ile **FastAPI**: + +* İstek gövdesini JSON olarak yorumlar. +* Karşılık gelen tipleri (eğer gerekiyorsa) dönüştürür. +* Veriyi doğrular. + * Veri geçersiz ise hatalı verinin ne ve nerede olduğunu belirten güzel ve anlaşılır bir hata döndürür. +* `item` parametresi içerisine alınan veriyi aktarır. + * Gövdeyi, fonksiyon içerisinde `Item` tipli olarak tanımladığımızdan ötürü her özellik ve özellik tipi için tüm editör desteğine de (kod tamamlama, vb.) sahip olmuş oluruz. +* Modelimiz için JSON şema tanımları oluşturur ve ek olarak bu tanımları projemizde herhangi bir yerde kullanabilmemize olanak sağlar. +* Bu şemalar, meydana gelen OpenAPI şemasının bir parçası olur ve otomatik dokümantasyon UI'ları tarafından da kullanılır. + +## Otomatik Dokümantasyon + +Modellerimizin JSON şemaları, interaktif API dokümanında gösterilmek üzere OpenAPI tarafından oluşturulan şemanın bir parçası olur: + + + +Ve ayrıca bu şemalar, onlara ihtiyaç duyan her *yol operasyonu* içindeki API dokümanında kullanılır: + + + +## Editör Desteği + +Editörünüz ve fonksiyonunuz içerisindeki her alanda tip ipuçları ve kod tamamlama desteği alırsınız (bu destek, Pydantic modeli yerine `dict` alsaydınız gerçekleşmezdi).: + + + +Yanlış tip operasyonları için de ayrıca hata uyarıları alırsınız: + + + +Bu durum, şansın aksine tüm framework bu tasarım üstüne kurulu olduğundan dolayı meydana gelmektedir. + +Ve ayrıca, tüm editörlerle çalışıyor olmasından emin olmak adına bu durum, herhangi bir devreye alımdan önce tasarım aşamasında en ince ayrıntısına kadar test edilmiştir. + +Hatta, bu durumu desteklemesi amacıyla, Pydantic kütüphanesinin kendi içerisinde bile bazı değişiklikler yapılmıştır. + +En son ekran görüntüleri, Visual Studio Code'da çekilmiştir. + +Halbuki, aynı editör desteğini, PyCharm veya çoğu diğer Python editörleri ile de elde edebilirsiniz: + + + +!!! tip "İpucu" + Eğer, editörünüz olarak PyCharm uygulamasını kullanıyorsanız Pydantic PyCharm Plugin eklentisinden de faydalanabilirsiniz. + + Bu eklenti, aşağıdaki özellikler ile birlikte Pydantic modelleri için editör desteğini güçlendirir: + + * oto-tamamlama + * tip uyarıları + * düzenleme + * arama + * inceleme + +## Modeli Kullanalım + +Fonksiyon içerisinde direkt olarak modelin tüm özelliklerine erişebilirsiniz: + +=== "Python 3.10+" + + ```Python hl_lines="19" + {!> ../../../docs_src/body/tutorial002_py310.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="21" + {!> ../../../docs_src/body/tutorial002.py!} + ``` + +## İstek Gövdesi + Yol Parametreleri + +Yol parametrelerini ve istek gövdesini aynı anda tanımlayabilirsiniz. + +**FastAPI**, yol parametreleri ile eşleşen fonksiyon parametrelerinin **yol kısmından elde edileceklerinin** ve Pydantic modelleri olarak tanımlanan fonksiyon parametrelerinin **istek gövdesinden elde edileceklerinin** bilincindedir. + +=== "Python 3.10+" + + ```Python hl_lines="15-16" + {!> ../../../docs_src/body/tutorial003_py310.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="17-18" + {!> ../../../docs_src/body/tutorial003.py!} + ``` + +## İstek Gövdesi + Yol ve Sorgu Parametreleri + +Ayrıca, **gövde**, **yol** ve **sorgu** parametrelerinin hepsini aynı anda tanımlayabilirsiniz. + +**FastAPI** her birini ayırt edecek ve veriyi doğru yerden elde edecektir. + +=== "Python 3.10+" + + ```Python hl_lines="16" + {!> ../../../docs_src/body/tutorial004_py310.py!} + ``` + +=== "Python 3.8+" + + ```Python hl_lines="18" + {!> ../../../docs_src/body/tutorial004.py!} + ``` + +Fonksiyon parametreleri şu şekilde ayırt edilecektir: + +* Eğer parametre, **yol** kısmında da tanımlıysa yol parametresi olarak değerlendirilecektir. +* Eğer parametre, **tekil tipten** (`int`, `float`, `str`, `bool`, vb. gibi) ise **sorgu** parametresi olarak yorumlanacaktır. +* Eğer parametre, bir **Pydantic modeli** ise istek **gövdesi** olarak yorumlanacaktır. + +!!! note "Not" + FastAPI, `q` değerinin zorunlu olmadığını `= None` varsayılan değerini aldığı için fark edecektir. + + `Union[str, None]` kısmındaki `Union` anahtar kelimesi FastAPI tarafından kullanılmamasına rağmen kullandığınız editörün size daha iyi destek vermesini ve hataları belirlemesini sağlayacaktır. + +## Pydantic Olmadan + +Eğer Pydantic modellerini kullanmak istemiyorsanız **Body** parametresinden faydalanabilirsiniz. Ayrıntılı bilgi için [Body - Çoklu Parametreler: Gövde içinde tekil değerler](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank} sayfasını ziyaret edebilirsiniz. \ No newline at end of file From e1251b451a7cc5011620c024829cdadd50d2ff92 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Sat, 3 Feb 2024 20:14:32 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=8E=A8=20[pre-commit.ci]=20Auto=20for?= =?UTF-8?q?mat=20from=20pre-commit.com=20hooks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/tr/docs/tutorial/body.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tr/docs/tutorial/body.md b/docs/tr/docs/tutorial/body.md index aeae86db1..c69b6e1d3 100644 --- a/docs/tr/docs/tutorial/body.md +++ b/docs/tr/docs/tutorial/body.md @@ -210,4 +210,4 @@ Fonksiyon parametreleri şu şekilde ayırt edilecektir: ## Pydantic Olmadan -Eğer Pydantic modellerini kullanmak istemiyorsanız **Body** parametresinden faydalanabilirsiniz. Ayrıntılı bilgi için [Body - Çoklu Parametreler: Gövde içinde tekil değerler](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank} sayfasını ziyaret edebilirsiniz. \ No newline at end of file +Eğer Pydantic modellerini kullanmak istemiyorsanız **Body** parametresinden faydalanabilirsiniz. Ayrıntılı bilgi için [Body - Çoklu Parametreler: Gövde içinde tekil değerler](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank} sayfasını ziyaret edebilirsiniz. From af2b5b5a775470872d5a975a310e9d58f5166aff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emirhan=20Soyta=C5=9F?= Date: Sat, 17 Feb 2024 15:12:23 +0300 Subject: [PATCH 3/5] =?UTF-8?q?change=20"opsiyonel"=20to=20"iste=C4=9Fe=20?= =?UTF-8?q?ba=C4=9Fl=C4=B1"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/tr/docs/tutorial/body.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/tr/docs/tutorial/body.md b/docs/tr/docs/tutorial/body.md index c69b6e1d3..8a1f90e42 100644 --- a/docs/tr/docs/tutorial/body.md +++ b/docs/tr/docs/tutorial/body.md @@ -49,7 +49,7 @@ Sonra, `BaseModel` sınıfını miras alacak bir veri modeli sınıfı tanımlay {!> ../../../docs_src/body/tutorial001.py!} ``` -Sorgu parametrelerinde olduğu gibi, bir model özelliği, varsayılan değere sahipse o özellik zorunlu değildir, eğer sahip değilse zorunludur. `None` kullanılarak özellikler opsiyonel hale getirilebilir. +Sorgu parametrelerinde olduğu gibi, bir model özelliği, varsayılan değere sahipse o özellik zorunlu değildir, eğer sahip değilse zorunludur. Özellikler, `None` kullanılarak isteğe bağlı hale getirilebilirler. Örneğin üstteki model, alttaki gibi bir JSON "`object`"'i (diğer bir adla Python `dict`'i) tanımlar: @@ -62,7 +62,7 @@ Sorgu parametrelerinde olduğu gibi, bir model özelliği, varsayılan değere s } ``` -...`description` ve `tax` alanları (`None` varsayılan değeri sayesinde) opsiyonel olduklarından dolayı alttaki JSON "`object`"'i de geçerli sayılabilirdi: +...`description` ve `tax` alanları (`None` varsayılan değeri sayesinde) isteğe bağlı olduklarından dolayı alttaki JSON "`object`"'i de geçerli sayılabilirdi: ```JSON { From 363410d915d0aafbe90ee18a3fe798abcc1ded43 Mon Sep 17 00:00:00 2001 From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com> Date: Mon, 16 Jun 2025 11:36:21 +0200 Subject: [PATCH 4/5] Update body.md --- docs/tr/docs/tutorial/body.md | 109 +++++++++------------------------- 1 file changed, 28 insertions(+), 81 deletions(-) diff --git a/docs/tr/docs/tutorial/body.md b/docs/tr/docs/tutorial/body.md index 8a1f90e42..41353349f 100644 --- a/docs/tr/docs/tutorial/body.md +++ b/docs/tr/docs/tutorial/body.md @@ -8,28 +8,21 @@ API'lar genellikle her zaman bir **yanıt** gövdesi iletmek zorundadır. Fakat, Bütün güç ve avantajlarından faydalınılarak Pydantic modelleri, **istek** gövdeleri oluşturmak için kullanılır. -!!! info "Bilgi" - Veri göndermek için `POST` (en yaygın), `PUT`, `DELETE` veya `PATCH` kullanılır. +/// info | Bilgi - Bir gövde göndermek için `GET` isteği kullanılmasının, spesifikasyonlar üzerinde beklenmedik etkilere sahip olmasına rağmen, bu olay, özellikle fazlasıyla karmaşık veya olağandışı durumlar için FastAPI tarafından desteklenir. +Veri göndermek için `POST` (en yaygın), `PUT`, `DELETE` veya `PATCH` kullanılır. - Bahsedilen durumun uygulanması tavsiye edilmediğinden dolayı `GET` isteği kullanılırken Swagger UI destekli interaktif doküman, gövde için ek alan göstermeyecektir. Ayrıca aradaki proxyler de bunu desteklemeyebilir. +Bir gövde göndermek için `GET` isteği kullanılmasının, spesifikasyonlar üzerinde beklenmedik etkilere sahip olmasına rağmen, bu olay, özellikle fazlasıyla karmaşık veya olağandışı durumlar için FastAPI tarafından desteklenir. -## Pydantic'in `BaseModel`'ini Projeye Dahil Edelim - -Öncelikle, `BaseModel` sınıfını `pydantic` paketinden projemize dahil edelim: +Bahsedilen durumun uygulanması tavsiye edilmediğinden dolayı `GET` isteği kullanılırken Swagger UI destekli interaktif doküman, gövde için ek alan göstermeyecektir. Ayrıca aradaki proxyler de bunu desteklemeyebilir. -=== "Python 3.10+" +/// - ```Python hl_lines="2" - {!> ../../../docs_src/body/tutorial001_py310.py!} - ``` +## Pydantic'in `BaseModel`'ini Projeye Dahil Edelim -=== "Python 3.8+" +Öncelikle, `BaseModel` sınıfını `pydantic` paketinden projemize dahil edelim: - ```Python hl_lines="4" - {!> ../../../docs_src/body/tutorial001.py!} - ``` +{* ../../docs_src/body/tutorial001_py310.py hl[2] *} ## Veri Modelimizi Oluşturalım @@ -37,17 +30,7 @@ Sonra, `BaseModel` sınıfını miras alacak bir veri modeli sınıfı tanımlay Özellikler için standart Python tipleri kullanmayı ihmal etmeyelim: -=== "Python 3.10+" - - ```Python hl_lines="5-9" - {!> ../../../docs_src/body/tutorial001_py310.py!} - ``` - -=== "Python 3.8+" - - ```Python hl_lines="7-11" - {!> ../../../docs_src/body/tutorial001.py!} - ``` +{* ../../docs_src/body/tutorial001_py310.py hl[5:9] *} Sorgu parametrelerinde olduğu gibi, bir model özelliği, varsayılan değere sahipse o özellik zorunlu değildir, eğer sahip değilse zorunludur. Özellikler, `None` kullanılarak isteğe bağlı hale getirilebilirler. @@ -75,17 +58,7 @@ Sorgu parametrelerinde olduğu gibi, bir model özelliği, varsayılan değere s Gövdeyi, bir *yol operasyonu* olarak eklemek için yol ve sorgu parametrelerinde yaptığımız gibi tanımlayabiliriz: -=== "Python 3.10+" - - ```Python hl_lines="16" - {!> ../../../docs_src/body/tutorial001_py310.py!} - ``` - -=== "Python 3.8+" - - ```Python hl_lines="18" - {!> ../../../docs_src/body/tutorial001.py!} - ``` +{* ../../docs_src/body/tutorial001_py310.py hl[16] *} ...sonrasında yarattığımız `Item` modelini gövde tipi olarak tanımlayalım. @@ -134,32 +107,25 @@ Halbuki, aynı editör desteğini, -!!! tip "İpucu" - Eğer, editörünüz olarak PyCharm uygulamasını kullanıyorsanız Pydantic PyCharm Plugin eklentisinden de faydalanabilirsiniz. +/// tip | İpucu - Bu eklenti, aşağıdaki özellikler ile birlikte Pydantic modelleri için editör desteğini güçlendirir: +Eğer, editörünüz olarak PyCharm uygulamasını kullanıyorsanız Pydantic PyCharm Plugin eklentisinden de faydalanabilirsiniz. - * oto-tamamlama - * tip uyarıları - * düzenleme - * arama - * inceleme +Bu eklenti, aşağıdaki özellikler ile birlikte Pydantic modelleri için editör desteğini güçlendirir: -## Modeli Kullanalım +* oto-tamamlama +* tip uyarıları +* düzenleme +* arama +* inceleme -Fonksiyon içerisinde direkt olarak modelin tüm özelliklerine erişebilirsiniz: - -=== "Python 3.10+" +/// - ```Python hl_lines="19" - {!> ../../../docs_src/body/tutorial002_py310.py!} - ``` +## Modeli Kullanalım -=== "Python 3.8+" +Fonksiyon içerisinde direkt olarak modelin tüm özelliklerine erişebilirsiniz: - ```Python hl_lines="21" - {!> ../../../docs_src/body/tutorial002.py!} - ``` +{* ../../docs_src/body/tutorial002_py310.py *} ## İstek Gövdesi + Yol Parametreleri @@ -167,17 +133,7 @@ Yol parametrelerini ve istek gövdesini aynı anda tanımlayabilirsiniz. **FastAPI**, yol parametreleri ile eşleşen fonksiyon parametrelerinin **yol kısmından elde edileceklerinin** ve Pydantic modelleri olarak tanımlanan fonksiyon parametrelerinin **istek gövdesinden elde edileceklerinin** bilincindedir. -=== "Python 3.10+" - - ```Python hl_lines="15-16" - {!> ../../../docs_src/body/tutorial003_py310.py!} - ``` - -=== "Python 3.8+" - - ```Python hl_lines="17-18" - {!> ../../../docs_src/body/tutorial003.py!} - ``` +{* ../../docs_src/body/tutorial003_py310.py hl[15:16] *} ## İstek Gövdesi + Yol ve Sorgu Parametreleri @@ -185,17 +141,7 @@ Ayrıca, **gövde**, **yol** ve **sorgu** parametrelerinin hepsini aynı anda ta **FastAPI** her birini ayırt edecek ve veriyi doğru yerden elde edecektir. -=== "Python 3.10+" - - ```Python hl_lines="16" - {!> ../../../docs_src/body/tutorial004_py310.py!} - ``` - -=== "Python 3.8+" - - ```Python hl_lines="18" - {!> ../../../docs_src/body/tutorial004.py!} - ``` +{* ../../docs_src/body/tutorial004_py310.py hl[16] *} Fonksiyon parametreleri şu şekilde ayırt edilecektir: @@ -203,10 +149,11 @@ Fonksiyon parametreleri şu şekilde ayırt edilecektir: * Eğer parametre, **tekil tipten** (`int`, `float`, `str`, `bool`, vb. gibi) ise **sorgu** parametresi olarak yorumlanacaktır. * Eğer parametre, bir **Pydantic modeli** ise istek **gövdesi** olarak yorumlanacaktır. -!!! note "Not" - FastAPI, `q` değerinin zorunlu olmadığını `= None` varsayılan değerini aldığı için fark edecektir. +/// note | Not + +FastAPI, `q` değerinin zorunlu olmadığını `= None` varsayılan değerini aldığı için fark edecektir. - `Union[str, None]` kısmındaki `Union` anahtar kelimesi FastAPI tarafından kullanılmamasına rağmen kullandığınız editörün size daha iyi destek vermesini ve hataları belirlemesini sağlayacaktır. +`Union[str, None]` kısmındaki `Union` anahtar kelimesi FastAPI tarafından kullanılmamasına rağmen kullandığınız editörün size daha iyi destek vermesini ve hataları belirlemesini sağlayacaktır. ## Pydantic Olmadan From 0428f9fd3ca2f5a23516318b7d18c3ee94138c85 Mon Sep 17 00:00:00 2001 From: Motov Yurii <109919500+YuriiMotov@users.noreply.github.com> Date: Mon, 16 Jun 2025 12:33:26 +0200 Subject: [PATCH 5/5] Update pydantic docs link to be in line with original doc --- docs/tr/docs/tutorial/body.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tr/docs/tutorial/body.md b/docs/tr/docs/tutorial/body.md index 41353349f..38a001dd8 100644 --- a/docs/tr/docs/tutorial/body.md +++ b/docs/tr/docs/tutorial/body.md @@ -6,7 +6,7 @@ API'a, bir istemciden (mesela tarayıcıdan) veri göndermek istenilen durumlard API'lar genellikle her zaman bir **yanıt** gövdesi iletmek zorundadır. Fakat, istemcilerin **istek** gövdesi gönderme gibi bir zorunluluğu yoktur. -Bütün güç ve avantajlarından faydalınılarak Pydantic modelleri, **istek** gövdeleri oluşturmak için kullanılır. +Bütün güç ve avantajlarından faydalınılarak Pydantic modelleri, **istek** gövdeleri oluşturmak için kullanılır. /// info | Bilgi