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/3] 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/3] =?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/3] =?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 {