]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Add Russian translation for `docs/ru/docs/tutorial/schema-extra-example.md` (#9621)
authorAlexandr <alexandrhub@vk.com>
Sat, 10 Jun 2023 20:29:08 +0000 (23:29 +0300)
committerGitHub <noreply@github.com>
Sat, 10 Jun 2023 20:29:08 +0000 (22:29 +0200)
Co-authored-by: ivan-abc <36765187+ivan-abc@users.noreply.github.com>
docs/ru/docs/tutorial/schema-extra-example.md [new file with mode: 0644]
docs/ru/mkdocs.yml

diff --git a/docs/ru/docs/tutorial/schema-extra-example.md b/docs/ru/docs/tutorial/schema-extra-example.md
new file mode 100644 (file)
index 0000000..a0363b9
--- /dev/null
@@ -0,0 +1,189 @@
+# ΠžΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π·Π°ΠΏΡ€ΠΎΡΠ° Π΄Π°Π½Π½Ρ‹Ρ…
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ.
+
+Π’ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ², ΠΊΠ°ΠΊ ΡΡ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ.
+
+## Pydantic `schema_extra`
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΊΠ»ΡŽΡ‡ `example` Π΄Π»Ρ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»Π°ΡΡ `Config` ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ `schema_extra`, ΠΊΠ°ΠΊ ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² <a href="https://pydantic-docs.helpmanual.io/usage/schema/#schema-customization" class="external-link" target="_blank">Pydantic Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ: ΠΠ°ΡΡ‚Ρ€ΠΎΠΉΠΊΠ° ΡΡ…Π΅ΠΌΡ‹</a>:
+
+=== "Python 3.10+"
+
+    ```Python hl_lines="13-21"
+    {!> ../../../docs_src/schema_extra_example/tutorial001_py310.py!}
+    ```
+
+=== "Python 3.6+"
+
+    ```Python hl_lines="15-23"
+    {!> ../../../docs_src/schema_extra_example/tutorial001.py!}
+    ```
+
+Π­Ρ‚Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΈΠ½Ρ„ормация Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² **JSON Schema** Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π΄Π»Ρ ΡΡ‚ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΈ ΠΎΠ½Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΊ API.
+
+!!! tip ΠŸΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°
+    Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π΄Π»Ρ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ JSON-схСмы ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΡΠ²ΠΎΠ΅ΠΉ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.
+
+    ΠΠ°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎ Π΄Π»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ ΠΈΠ½Ρ‚СрфСйса Π² Π²Π°ΡˆΠ΅ΠΌ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΈ Ρ‚.Π΄.
+
+## Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠΎΠ»Ρ `Field`
+
+ΠŸΡ€ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ `Field()` Ρ ΠΌΠΎΠ΄Π΅Π»ΡΠΌΠΈ Pydantic, Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π΄Π»Ρ **JSON Schema**, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ Π»ΡŽΠ±Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.
+
+Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΡ‚ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ `example` Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ:
+
+=== "Python 3.10+"
+
+    ```Python hl_lines="2  8-11"
+    {!> ../../../docs_src/schema_extra_example/tutorial002_py310.py!}
+    ```
+
+=== "Python 3.6+"
+
+    ```Python hl_lines="4  10-13"
+    {!> ../../../docs_src/schema_extra_example/tutorial002.py!}
+    ```
+
+!!! warning Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅
+    Π˜ΠΌΠ΅ΠΉΡ‚Π΅ Π² Π²ΠΈΠ΄Ρƒ, Ρ‡Ρ‚ΠΎ ΡΡ‚ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ Π΄Π»Ρ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
+
+## Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ `example` ΠΈ `examples` Π² OpenAPI
+
+ΠŸΡ€ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π»ΡŽΠ±ΠΎΠΉ ΠΈΠ· ΡΡ‚ΠΈΡ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:
+
+* `Path()`
+* `Query()`
+* `Header()`
+* `Cookie()`
+* `Body()`
+* `Form()`
+* `File()`
+
+Π²Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΠΈΠΉ `example` ΠΈΠ»ΠΈ Π³Ρ€ΡƒΠΏΠΏΡƒ `examples` Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ, ΠΊΠΎΡ‚орая Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² **OpenAPI**.
+
+### ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `Body` Ρ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ `example`
+
+Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‘ΠΌ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ `example`, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Ρ… Π² ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ `Body()`:
+
+=== "Python 3.10+"
+
+    ```Python hl_lines="22-27"
+    {!> ../../../docs_src/schema_extra_example/tutorial003_an_py310.py!}
+    ```
+
+=== "Python 3.9+"
+
+    ```Python hl_lines="22-27"
+    {!> ../../../docs_src/schema_extra_example/tutorial003_an_py39.py!}
+    ```
+
+=== "Python 3.6+"
+
+    ```Python hl_lines="23-28"
+    {!> ../../../docs_src/schema_extra_example/tutorial003_an.py!}
+    ```
+
+=== "Python 3.10+ non-Annotated"
+
+    !!! tip Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°
+        Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Ρ `Annotated`, Π΅ΡΠ»ΠΈ ΡΡ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
+
+    ```Python hl_lines="18-23"
+    {!> ../../../docs_src/schema_extra_example/tutorial003_py310.py!}
+    ```
+
+=== "Python 3.6+ non-Annotated"
+
+    !!! tip Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°
+        Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Ρ `Annotated`, Π΅ΡΠ»ΠΈ ΡΡ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
+
+    ```Python hl_lines="20-25"
+    {!> ../../../docs_src/schema_extra_example/tutorial003.py!}
+    ```
+
+### ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ "example" Π² UI Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
+
+Π‘ Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· Π²Ρ‹ΡˆΠ΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΡΡ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ Π² `/docs`:
+
+<img src="/img/tutorial/body-fields/image01.png">
+
+### `Body` Ρ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ `examples`
+
+Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Ρ‹ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρƒ `example`, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ `examples` ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… `dict` Ρ **нСсколькими ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ**, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΡ‚орая Ρ‚Π°ΠΊΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π² **OpenAPI**.
+
+ΠšΠ»ΡŽΡ‡ΠΈ `dict` ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… - Π½Π° Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ `dict` Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ.
+
+ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΈΠΏΠ° `dict` Π² Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅ `examples` ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:
+
+* `summary`: ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°.
+* `description`: ΠŸΠΎΠ»Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ‚Скст Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Markdown.
+* `value`: Π­Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΡ‚обраТаСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ Ρ‚ΠΈΠΏΠ° `dict`.
+* `externalValue`: Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρƒ `value`, URL-адрСс, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Π₯отя ΡΡ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎΠΌ ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Ρ‚Сстирования API, ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ `value`.
+
+=== "Python 3.10+"
+
+    ```Python hl_lines="23-49"
+    {!> ../../../docs_src/schema_extra_example/tutorial004_an_py310.py!}
+    ```
+
+=== "Python 3.9+"
+
+    ```Python hl_lines="23-49"
+    {!> ../../../docs_src/schema_extra_example/tutorial004_an_py39.py!}
+    ```
+
+=== "Python 3.6+"
+
+    ```Python hl_lines="24-50"
+    {!> ../../../docs_src/schema_extra_example/tutorial004_an.py!}
+    ```
+
+=== "Python 3.10+ non-Annotated"
+
+    !!! tip Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°
+        Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Ρ `Annotated`, Π΅ΡΠ»ΠΈ ΡΡ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
+
+    ```Python hl_lines="19-45"
+    {!> ../../../docs_src/schema_extra_example/tutorial004_py310.py!}
+    ```
+
+=== "Python 3.6+ non-Annotated"
+
+    !!! tip Π—Π°ΠΌΠ΅Ρ‚ΠΊΠ°
+        Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚ся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ Ρ `Annotated`, Π΅ΡΠ»ΠΈ ΡΡ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ.
+
+    ```Python hl_lines="21-47"
+    {!> ../../../docs_src/schema_extra_example/tutorial004.py!}
+    ```
+
+### ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ "examples" Π² UI Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
+
+Π‘ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ `examples`, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹ΠΌ Π² `Body()`, ΡΡ‚Ρ€Π°Π½ΠΈΡ†Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ `/docs` Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Ρ‚Π°ΠΊ:
+
+<img src="/img/tutorial/body-fields/image02.png">
+
+## Π’СхничСскиС Π”Π΅Ρ‚Π°Π»ΠΈ
+
+!!! warning Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅
+    Π­Ρ‚ΠΈ Ρ‚СхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ ΠΎΡ‚носятся ΠΊ ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π°ΠΌ  **JSON Schema** ΠΈ **OpenAPI**.
+
+    Π•сли ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅ ΠΈΠ΄Π΅ΠΈ ΡƒΠΆΠ΅ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π΄Π»Ρ Π²Π°Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‚ΠΎΠ³ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΠΎ ΠΈ ΡΡ‚ΠΈ Π΄Π΅Ρ‚Π°Π»ΠΈ Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ, ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠΏΠΎΠΊΠΎΠΉΠ½ΠΎ ΠΈΡ… ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ.
+
+Когда Π²Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π²Π½ΡƒΡ‚Ρ€ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ `schema_extra` ΠΈΠ»ΠΈ `Field(example="something")`, ΡΡ‚ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ‚ся Π² **JSON Schema** Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic.
+
+И ΡΡ‚Π° **JSON Schema** ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ся Π² **OpenAPI** Π²Π°ΡˆΠ΅Π³ΠΎ API, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся Π² UI Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
+
+Поля `example` ΠΊΠ°ΠΊ Ρ‚Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Π½Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π°Ρ… **JSON Schema**. Π’ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ… Π²Π΅Ρ€ΡΠΈΡΡ… JSON-схСмы ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΎ ΠΏΠΎΠ»Π΅ <a href="https://json-schema.org/draft/2019-09/json-schema-validation.html#rfc.section.9.5" class="external-link" target="_blank">`examples`</a>, Π½ΠΎ OpenAPI 3.0.3 ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° Π±ΠΎΠ»Π΅Π΅ ΡΡ‚Π°Ρ€ΠΎΠΉ Π²Π΅Ρ€ΡΠΈΠΈ JSON-схСмы, ΠΊΠΎΡ‚орая Π½Π΅ ΠΈΠΌΠ΅Π»Π° ΠΏΠΎΠ»Ρ `examples`.
+
+Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, OpenAPI 3.0.3 ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΡΠ²ΠΎΡ‘ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΠΎΠ΅ ΠΏΠΎΠ»Π΅ <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md#fixed-fields-20" class="external-link" target="_blank">`example`</a> Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²Π΅Ρ€ΡΠΈΠΈ **JSON Schema**, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Ρ‚ΠΎΠΉ ΠΆΠ΅ Ρ†Π΅Π»ΠΈ (ΠΎΠ΄Π½Π°ΠΊΠΎ ΡΡ‚ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»Π΅ `example`, Π° Π½Π΅ `examples`), ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ся API Π² UI Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ (с ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠ΅ΠΉ Swagger UI).
+
+Π˜Ρ‚Π°ΠΊ, Ρ…отя ΠΏΠΎΠ»Π΅ `example` Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ‡Π°ΡΡ‚ΡŒΡŽ JSON-схСмы, ΠΎΠ½ΠΎ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ‡Π°ΡΡ‚ΡŒΡŽ Π½Π°ΡΡ‚Ρ€Π°ΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Π²Π΅Ρ€ΡΠΈΠΈ JSON-схСмы Π² OpenAPI, ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡ‚ΠΎ ΠΏΠΎΠ»Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² UI Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ.
+
+Однако, ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅  ΠΏΠΎΠ»Π΅ `example` ΠΈΠ»ΠΈ `examples` Ρ Π»ΡŽΠ±ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ (`Query()`, `Body()`, ΠΈ Ρ‚.Π΄.), ΡΡ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ся Π² JSON-схСму, ΠΊΠΎΡ‚орая ΠΎΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ ΡΡ‚ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ (Π΄Π°ΠΆΠ΅ Π² ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ JSON-схСмы OpenAPI), ΠΎΠ½ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ся Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΠ΅ *ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡƒΡ‚ΠΈ* Π² OpenAPI (Π²Π½Π΅ Ρ‡Π°ΡΡ‚Π΅ΠΉ OpenAPI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ JSON-схСму).
+
+Для Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ `Path()`, `Query()`, `Header()`, ΠΈ `Cookie()`, Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ `example` ΠΈΠ»ΠΈ `examples` Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ся Π² <a href="https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#parameter-object" class="external-link" target="_blank">ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ OpenAPI, ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ `Parameter Object` (Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ)</a>.
+
+И Π΄Π»Ρ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ `Body()`, `File()` ΠΈ `Form()` Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ `example` ΠΈΠ»ΠΈ `examples` Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ся Π² <a href="https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.0.3.md#mediaTypeObject" class="external-link" target="_blank"> ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ OpenAPI, ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ `Request Body Object`, Π² ΠΏΠΎΠ»Π΅ `content` Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅ `Media Type Object` (Π² ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ)</a>.
+
+Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡΡ‚ΠΎΡ€ΠΎΠ½Ρ‹, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ Π½ΠΎΠ²Π°Ρ Π²Π΅Ρ€ΡΠΈΡ OpenAPI: **3.1.0**, Π½Π΅Π΄Π°Π²Π½ΠΎ Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π½Π°Ρ. ΠžΠ½Π° ΠΎΡΠ½ΠΎΠ²Π°Π½Π° Π½Π° ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅Ρ€ΡΠΈΠΈ JSON-схСмы ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ ΠΈΠ· OpenAPI JSON-схСмы ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π² ΠΎΠ±ΠΌΠ΅Π½ Π½Π° Π½ΠΎΠ²Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅Ρ€ΡΠΈΠΈ JSON-схСмы, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π²ΡΠ΅ ΡΡ‚ΠΈ ΠΌΠ΅Π»ΠΊΠΈΠ΅ ΠΎΡ‚личия ΡƒΡΡ‚Ρ€Π°Π½Π΅Π½Ρ‹. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Swagger UI Π² Π½Π°ΡΡ‚оящСС Π²Ρ€Π΅ΠΌΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ OpenAPI 3.1.0, ΠΏΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠΎΠΊΠ° Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹ΡˆΠ΅ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚Ρ‹Π΅ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹.
index e4133389469aba20182aab5716e3cd2173a5f0e4..5fb453dd2ed10283a677264983a3783d8177d326 100644 (file)
@@ -81,6 +81,7 @@ nav:
   - tutorial/body-multiple-params.md
   - tutorial/static-files.md
   - tutorial/debugging.md
+  - tutorial/schema-extra-example.md
 - async.md
 - Π Π°Π·Π²Ρ‘Ρ€Ρ‚Ρ‹Π²Π°Π½ΠΈΠ΅:
   - deployment/index.md