8000 🌐 Add Ukrainian translation for `docs/uk/docs/tutorial/body.md` by ss-o-furda · Pull Request #4574 · fastapi/fastapi · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🌐 Add Ukrainian translation for docs/uk/docs/tutorial/body.md #4574

Merged
merged 9 commits into from
Jul 27, 2023
213 changes: 213 additions & 0 deletions docs/uk/docs/tutorial/body.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
# Тіло запиту

Коли вам потрібно надіслати дані з клієнта (скажімо, браузера) до вашого API, ви надсилаєте їх як **тіло запиту**.

Тіло **запиту** — це дані, надіслані клієнтом до вашого API. Тіло **відповіді** — це дані, які ваш API надсилає клієнту.

Ваш API майже завжди має надсилати тіло **відповіді**. Але клієнтам не обов’язково потрібно постійно надсилати тіла **запитів**.

Щоб оголосити тіло **запиту**, ви використовуєте <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> моделі з усією їх потужністю та перевагами.

!!! info
Щоб надіслати дані, ви повинні використовувати один із: `POST` (більш поширений), `PUT`, `DELETE` або `PATCH`.

Надсилання тіла із запитом `GET` має невизначену поведінку в специфікаціях, проте воно підтримується FastAPI лише для дуже складних/екстремальних випадків використання.

Оскільки це не рекомендується, інтерактивна документація з Swagger UI не відображатиме документацію для тіла запиту під час використання `GET`, і проксі-сервери в середині можуть не підтримувати її.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Оскільки це не рекомендується, інтерактивна документація з Swagger UI не відображатиме документацію для тіла запиту під час використання `GET`, і проксі-сервери в середині можуть не підтримувати її.
Оскільки це не рекомендується, інтерактивна документація з Swagger UI не відображатиме документацію для тіла запиту під час використання `GET`, і проксі-сервери вcередині можуть не підтримувати її.


## Імпортуйте `BaseModel` від Pydantic

Спочатку вам потрібно імпортувати `BaseModel` з `pydantic`:

=== "Python 3.6 і вище"

```Python hl_lines="4"
{!> ../../../docs_src/body/tutorial001.py!}
```

=== "Python 3.10 і вище"

```Python hl_lines="2"
{!> ../../../docs_src/body/tutorial001_py310.py!}
```

## Створіть свою модель даних

Потім ви оголошуєте свою модель даних як клас, який успадковується від `BaseModel`.

Використовуйте стандартні типи Python для всіх атрибутів:

=== "Python 3.6 і вище"

```Python hl_lines="7-11"
{!> ../../../docs_src/body/tutorial001.py!}
```

=== "Python 3.10 і вище"

```Python hl_lines="5-9"
{!> ../../../docs_src/body/tutorial001_py310.py!}
```

Так само, як і при оголошенні параметрів запиту, коли атрибут моделі має значення за замовчуванням, він не є обов’язковим. В іншому випадку це потрібно. Використовуйте `None`, щоб зробити його необов'язковим.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Так само, як і при оголошенні параметрів запиту, коли атрибут моделі має значення за замовчуванням, він не є обов’язковим. В іншому випадку це потрібно. Використовуйте `None`, щоб зробити його необов'язковим.
Так само, як і при оголошенні параметрів запиту, коли атрибут моделі має значення за замовчуванням, він не є обов’язковим. В іншому випадку - він потрібен. Використовуйте `None`, щоб зробити його необов'язковим.


Наприклад, ця модель вище оголошує JSON "`об'єкт`" (або Python `dict`), як:

```JSON
{
"name": "Foo",
"description": "An optional description",
"price": 45.2,
"tax": 3.5
}
```

...оскільки `description` і `tax` є необов'язковими (зі значенням за замовчуванням `None`), цей JSON "`об'єкт`" також буде дійсним:

```JSON
{
"name": "Foo",
"price": 45.2
}
```

## Оголоси її як параметр

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
## Оголоси її як параметр
## Оголосіть її як параметр


Щоб додати модель даних до вашої *операції шляху*, оголосіть її так само, як ви оголосили параметри шляху та запиту:

=== "Python 3.6 і вище"

```Python hl_lines="18"
{!> ../../../docs_src/body/tutorial001.py!}
```

=== "Python 3.10 і вище"

```Python hl_lines="16"
{!> ../../../docs_src/body/tutorial001_py310.py!}
```

...і вкажіть її тип як модель, яку ви створили, `Item`.

## Результати

Лише з цим оголошенням типу Python **FastAPI** буде:

* Читати тіло запиту як JSON.
* Перетворювати відповідні типи (якщо потрібно).
* Валідувати дані.
* Якщо дані недійсні, він поверне гарну та чітку помилку, вказуючи, де саме і які дані були неправильними.
* Надавати отримані дані у параметрі `item`.
* Оскільки ви оголосили його у функції як тип `Item`, ви також матимете всю підтримку редактора (автозаповнення, тощо) для всіх атрибутів та їх типів.
* Генерувати <a href="https://json-schema.org" class="external-link" target="_blank">JSON Schema</a> визначення для вашої моделі, ви також можете використовувати їх де завгодно, якщо це має сенс для вашого проекту.
* Ці схеми будуть частиною згенерованої схеми OpenAPI і використовуватимуться автоматичною документацією інтерфейсу користувача.

## Автоматична документація

Схеми JSON ваших моделей будуть частиною вашої схеми, згенерованої OpenAPI, і будуть показані в інтерактивній API документації:

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Схеми JSON ваших моделей будуть частиною вашої схеми, згенерованої OpenAPI, і будуть показані в інтерактивній API документації:
Схеми JSON ваших моделей будуть частиною вашої схеми, згенерованої OpenAPI, і відображатимуться в інтерактивній API документації:


<img src="/img/tutorial/body/image01.png">

А також використовуватимуться в API документації всередині кожної *операції шляху*, якій вони потрібні:

<img src="/img/tutorial/body/image02.png">

## Підтримка редактора

У вашому редакторі, всередині вашої функції, ви будете отримувати підказки типу та завершення скрізь (це б не сталося, якби ви отримали `dict` замість моделі Pydantic):

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
У вашому редакторі, всередині вашої функції, ви будете отримувати підказки типу та завершення скрізь (це б не сталося, якби ви отримали `dict` замість моделі Pydantic):
У вашому редакторі, всередині вашої функції, ви будете отримувати підказки типу та завершення скрізь (цього не сталося б, якби ви отримали `dict` замість моделі Pydantic):


<img src="/img/tutorial/body/image03.png">

Ви також отримуєте перевірку помилок на наявність операцій з неправильним типом:

<img src="/img/tutorial/body/image04.png">

Це не випадково, весь каркас був побудований навколо цього дизайну.

І він був ретельно перевірений на етапі проектування, перед будь-яким впровадженням, щоб переконатися, що він працюватиме з усіма редакторами.

Були навіть деякі зміни в самому Pydantic, щоб підтримати це.

Попередні скріншоти були зроблені у <a href="https://code.visualstudio.com" class="external-link" target="_blank">Visual Studio Code</a>.

Але ви отримаєте ту саму підтримку редактора у <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> та більшість інших редакторів Python:

<img src="/img/tutorial/body/image05.png">

!!! tip

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
!!! tip
!!! підказка

Якщо ви використовуєте <a href="https://www.jetbrains.com/pycharm/" class="external-link" target="_blank">PyCharm</a> як ваш редактор, ви можете використати <a href="https://github.com/koxudaxi/pydantic-pycharm-plugin/" class="external-link" target="_blank">Pydantic PyCharm Plugin</a>.

Він покращує підтримку редакторів для моделей Pydantic за допомогою:

* автозаповнення
* перевірки типу
* рефакторингу
* пошуку
* інспекції

## Використовуйте модель

Усередині функції ви можете отримати прямий доступ до всіх атрибутів об’єкта моделі:

=== "Python 3.6 і вище"

```Python hl_lines="21"
{!> ../../../docs_src/body/tutorial002.py!}
```

=== "Python 3.10 і вище"

```Python hl_lines="19"
{!> ../../../docs_src/body/tutorial002_py310.py!}
```

## Тіло запиту + параметри шляху

Ви можете одночасно оголошувати параметри шляху та тіло запиту.

**FastAPI** розпізнає, що параметри функції, які відповідають параметрам шляху, мають бути **взяті з шляху**, а параметри функції, які оголошуються як моделі Pydantic, **взяті з тіла запиту**.

=== "Python 3.6 і вище"

```Python hl_lines="17-18"
{!> ../../../docs_src/body/tutorial003.py!}
```

=== "Python 3.10 і вище"

```Python hl_lines="15-16"
{!> ../../../docs_src/body/tutorial003_py310.py!}
```

## Тіло запиту + шлях + параметри запиту

Ви також можете оголосити параметри **тіло**, **шлях** і **запит** одночасно.

**FastAPI** розпізнає кожен з них і візьме дані з потрібного місця.

=== "Python 3.6 і вище"

```Python hl_lines="18"
{!> ../../../docs_src/body/tutorial004.py!}
```

=== "Python 3.10 і вище"

```Python hl_lines="16"
{!> ../../../docs_src/body/tutorial004_py310.py!}
```

Параметри функції будуть розпізнаватися наступним чином:

* Якщо параметр також оголошено в **шляху**, він використовуватиметься як параметр шляху.
* Якщо параметр має **сингулярний тип** (наприклад, `int`, `float`, `str`, `bool` тощо), він буде інтерпретуватися як параметр **запиту**.
* Якщо параметр оголошується як тип **Pydantic моделі**, він інтерпретується як **тіло** запиту.

!!! note

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
!!! note
!!! примітка

FastAPI буде знати, що значення "q" не є обов'язковим через значення за замовчуванням "= None".

`Optional` у `Optional[str]` не використовується FastAPI, але дозволить вашому редактору надати вам кращу підтримку та виявляти помилки.

## Без Pydantic

Якщо ви не хочете використовувати моделі Pydantic, ви також можете використовувати параметри **Body**. Перегляньте документацію для [Тіло – Кілька параметрів: си 6D07 нгулярні значення в тілі](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
Якщо ви не хочете використовувати моделі Pydantic, ви також можете використовувати параметри **Body**. Перегляньте документацію для [Тіло – Кілька параметрів: сингулярні значення в тілі](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}.
Якщо ви не хочете використовувати моделі Pydantic, ви також можете використовувати параметри **Тіла**. Перегляньте документацію для [Тіло – Кілька параметрів: сингулярні значення в тілі](body-multiple-params.md#singular-values-in-body){.internal-link target=_blank}.

0