diff --git a/docs/uk/docs/advanced/additional-responses.md b/docs/uk/docs/advanced/additional-responses.md index 2d2005837..3b30645f6 100644 --- a/docs/uk/docs/advanced/additional-responses.md +++ b/docs/uk/docs/advanced/additional-responses.md @@ -34,7 +34,7 @@ /// -/// info | Інформація +/// note | Примітка Ключ `model` не є частиною OpenAPI. @@ -183,7 +183,7 @@ /// -/// info | Інформація +/// note | Примітка Поки ви явно не вкажете інший тип медіа в параметрі `responses`, FastAPI вважатиме, що відповідь має той самий тип медіа, що й основний клас відповіді (типово `application/json`). diff --git a/docs/uk/docs/advanced/advanced-dependencies.md b/docs/uk/docs/advanced/advanced-dependencies.md index 48a10ba4d..2fd7b96f0 100644 --- a/docs/uk/docs/advanced/advanced-dependencies.md +++ b/docs/uk/docs/advanced/advanced-dependencies.md @@ -52,7 +52,7 @@ checker(q="somequery") {* ../../docs_src/dependencies/tutorial011_an_py310.py hl[22] *} -/// tip | Порада +/// tip Усе це може здаватися надуманим. І поки що може бути не дуже зрозуміло, навіщо це корисно. @@ -66,7 +66,7 @@ checker(q="somequery") ## Залежності з `yield`, `HTTPException`, `except` та фоновими задачами { #dependencies-with-yield-httpexception-except-and-background-tasks } -/// warning | Попередження +/// warning Найімовірніше, вам не знадобляться ці технічні деталі. @@ -98,7 +98,7 @@ checker(q="somequery") Цю поведінку змінено у 0.118.0: завершальний код після `yield` знову виконується після відправлення відповіді. -/// info | Інформація +/// note Як побачите нижче, це дуже схоже на поведінку до версії 0.106.0, але з кількома покращеннями та виправленнями помилок у крайових випадках. @@ -150,7 +150,7 @@ checker(q="somequery") У **FastAPI** 0.106.0 це змінено, щоб не утримувати ресурси під час очікування, поки відповідь піде мережею. -/// tip | Порада +/// tip Крім того, фонова задача зазвичай є незалежним набором логіки, який слід обробляти окремо, з власними ресурсами (наприклад, власним з'єднанням з базою даних). diff --git a/docs/uk/docs/advanced/custom-response.md b/docs/uk/docs/advanced/custom-response.md index 4ed7616bf..aa4c39ee0 100644 --- a/docs/uk/docs/advanced/custom-response.md +++ b/docs/uk/docs/advanced/custom-response.md @@ -41,7 +41,7 @@ {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *} -/// info | Інформація +/// note | Примітка Параметр `response_class` також визначатиме «медіа-тип» відповіді. @@ -65,7 +65,7 @@ /// -/// info | Інформація +/// note | Примітка Звісно, фактичні заголовок `Content-Type`, код статусу тощо прийдуть з об'єкта `Response`, який ви повернули. diff --git a/docs/uk/docs/advanced/dataclasses.md b/docs/uk/docs/advanced/dataclasses.md index 1c91304b0..57c03c149 100644 --- a/docs/uk/docs/advanced/dataclasses.md +++ b/docs/uk/docs/advanced/dataclasses.md @@ -18,7 +18,7 @@ FastAPI побудовано поверх **Pydantic**, і я показував Це працює так само, як із моделями Pydantic. Насправді під капотом це також досягається за допомогою Pydantic. -/// info +/// note | Примітка Майте на увазі, що dataclasses не можуть робити все те, що можуть моделі Pydantic. @@ -64,7 +64,7 @@ Dataclass буде автоматично перетворено на dataclass 6. Тут ми повертаємо словник, що містить `items`, який є списком dataclass. - FastAPI усе ще здатний серіалізувати дані до JSON. + FastAPI усе ще здатний серіалізувати дані до JSON. 7. Тут у `response_model` використано анотацію типу список dataclass `Author`. diff --git a/docs/uk/docs/advanced/events.md b/docs/uk/docs/advanced/events.md index 33f6314fe..4a935eeaa 100644 --- a/docs/uk/docs/advanced/events.md +++ b/docs/uk/docs/advanced/events.md @@ -120,7 +120,7 @@ async with lifespan(app): Тут функція-обробник події `shutdown` запише текстовий рядок `"Application shutdown"` у файл `log.txt`. -/// info | Інформація +/// note | Примітка У функції `open()` параметр `mode="a"` означає «append», тож рядок буде додано після всього, що є у файлі, без перезапису попереднього вмісту. @@ -152,7 +152,7 @@ async with lifespan(app): Під капотом, у технічній специфікації ASGI, це частина [Протоколу тривалості життя](https://asgi.readthedocs.io/en/latest/specs/lifespan.html), і там визначені події `startup` і `shutdown`. -/// info | Інформація +/// note | Примітка Ви можете прочитати більше про обробники `lifespan` у [документації Starlette про Lifespan](https://www.starlette.dev/lifespan/). diff --git a/docs/uk/docs/advanced/generate-clients.md b/docs/uk/docs/advanced/generate-clients.md index d1b7e9c0c..b50bb1524 100644 --- a/docs/uk/docs/advanced/generate-clients.md +++ b/docs/uk/docs/advanced/generate-clients.md @@ -31,7 +31,6 @@ FastAPI автоматично генерує специфікації **OpenAPI Наприклад, ви можете спробувати: * [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral) -* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi) Деякі з цих рішень також можуть бути з відкритим кодом або мати безкоштовні тарифи, тож ви можете спробувати їх без фінансових зобов'язань. Інші комерційні генератори SDK також доступні й їх можна знайти онлайн. 🤓 diff --git a/docs/uk/docs/advanced/openapi-callbacks.md b/docs/uk/docs/advanced/openapi-callbacks.md index 5c5c96661..a4bb1c822 100644 --- a/docs/uk/docs/advanced/openapi-callbacks.md +++ b/docs/uk/docs/advanced/openapi-callbacks.md @@ -167,13 +167,13 @@ https://www.external.org/events/invoices/2expen51ve На цьому етапі ви маєте потрібні операції шляху зворотного виклику (ті, які має реалізувати *зовнішній розробник* у *зовнішньому API*) у створеному вище маршрутизаторі зворотного виклику. -Тепер використайте параметр `callbacks` у декораторі операції шляху вашого API, щоб передати атрибут `.routes` (це насправді просто `list` маршрутів/операцій шляху) з цього маршрутизатора зворотного виклику: +Тепер використайте параметр `callbacks` у декораторі операції шляху вашого API, щоб передати атрибут `.routes` з цього маршрутизатора зворотного виклику: {* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *} /// tip | Порада -Зверніть увагу, що ви передаєте не сам маршрутизатор (`invoices_callback_router`) у `callback=`, а атрибут `.routes`, тобто `invoices_callback_router.routes`. +Зверніть увагу, що ви передаєте не сам маршрутизатор (`invoices_callback_router`) у `callbacks=`, а його `.routes`, тобто `invoices_callback_router.routes`. FastAPI використає ці маршрути, щоб згенерувати документацію OpenAPI для зворотних викликів. /// diff --git a/docs/uk/docs/advanced/openapi-webhooks.md b/docs/uk/docs/advanced/openapi-webhooks.md index bf51f5466..b46b0ce46 100644 --- a/docs/uk/docs/advanced/openapi-webhooks.md +++ b/docs/uk/docs/advanced/openapi-webhooks.md @@ -22,7 +22,7 @@ Це значно спростить для ваших користувачів **реалізацію їхніх API** для отримання ваших запитів **вебхуків**; вони навіть зможуть згенерувати частину власного коду API автоматично. -/// info | Інформація +/// note | Примітка Вебхуки доступні в OpenAPI 3.1.0 і вище, підтримуються FastAPI `0.99.0` і вище. @@ -36,7 +36,7 @@ Визначені вами вебхуки потраплять до **схеми OpenAPI** та автоматичного **інтерфейсу документації**. -/// info | Інформація +/// note | Примітка Об'єкт `app.webhooks` насправді є просто `APIRouter` - тим самим типом, який ви використовуєте, структуризуючи застосунок у кількох файлах. diff --git a/docs/uk/docs/advanced/path-operation-advanced-configuration.md b/docs/uk/docs/advanced/path-operation-advanced-configuration.md index f760209ab..07508422c 100644 --- a/docs/uk/docs/advanced/path-operation-advanced-configuration.md +++ b/docs/uk/docs/advanced/path-operation-advanced-configuration.md @@ -16,17 +16,11 @@ ### Використання назви *функції операції шляху* як operationId { #using-the-path-operation-function-name-as-the-operationid } -Якщо ви хочете використовувати назви функцій ваших API як `operationId`, ви можете пройтися по всіх них і переписати `operation_id` кожної *операції шляху*, використовуючи їхній `APIRoute.name`. +Якщо ви хочете використовувати назви функцій ваших API як `operationId`, ви можете передати власну `generate_unique_id_function` до `FastAPI`. -Зробіть це після додавання всіх *операцій шляху*. +Функція отримує кожен `APIRoute` і повертає `operationId`, який слід використовувати для цієї операції шляху. -{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *} - -/// tip | Порада - -Якщо ви вручну викликаєте `app.openapi()`, оновіть усі `operationId` до цього. - -/// +{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *} /// warning | Попередження diff --git a/docs/uk/docs/advanced/response-directly.md b/docs/uk/docs/advanced/response-directly.md index 30d8f5860..18318e6f3 100644 --- a/docs/uk/docs/advanced/response-directly.md +++ b/docs/uk/docs/advanced/response-directly.md @@ -18,7 +18,7 @@ Ви можете повертати `Response` або будь-який його підклас. -/// info | Інформація +/// note | Примітка `JSONResponse` сам є підкласом `Response`. diff --git a/docs/uk/docs/advanced/security/oauth2-scopes.md b/docs/uk/docs/advanced/security/oauth2-scopes.md index 7f5ba9692..769365d24 100644 --- a/docs/uk/docs/advanced/security/oauth2-scopes.md +++ b/docs/uk/docs/advanced/security/oauth2-scopes.md @@ -46,7 +46,7 @@ OAuth2 зі scopes - це механізм, який використовуют - `instagram_basic` використовується Facebook / Instagram. - `https://www.googleapis.com/auth/drive` використовується Google. -/// info | Інформація +/// note | Примітка В OAuth2 «scope» - це просто строка, що декларує конкретний потрібний дозвіл. @@ -126,7 +126,7 @@ OAuth2 зі scopes - це механізм, який використовуют {* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *} -/// info | Технічні деталі +/// note | Технічні деталі `Security` насправді є підкласом `Depends`, і має лише один додатковий параметр, який ми побачимо пізніше. diff --git a/docs/uk/docs/advanced/stream-data.md b/docs/uk/docs/advanced/stream-data.md index 4f12132e0..8ddfa38fb 100644 --- a/docs/uk/docs/advanced/stream-data.md +++ b/docs/uk/docs/advanced/stream-data.md @@ -4,7 +4,7 @@ Але якщо ви хочете передавати потоком чисті бінарні дані або строки, ось як це зробити. -/// info | Інформація +/// note | Примітка Додано у FastAPI 0.134.0. @@ -90,7 +90,7 @@ FastAPI передаватиме кожний фрагмент даних до ` І часто їх читання є блокувальною операцією (що може блокувати цикл подій), адже дані зчитуються з диска або мережі. -/// info | Інформація +/// note | Примітка Наведений вище приклад - виняток, адже об'єкт `io.BytesIO` вже в пам'яті, тож читання нічого не блокує. diff --git a/docs/uk/docs/advanced/strict-content-type.md b/docs/uk/docs/advanced/strict-content-type.md index a244ec901..7d3156b09 100644 --- a/docs/uk/docs/advanced/strict-content-type.md +++ b/docs/uk/docs/advanced/strict-content-type.md @@ -40,7 +40,7 @@ http://localhost:8000 Використовуючи фронтенд, ви можете змушувати AI-агента виконувати дії від вашого імені. -Оскільки він працює локально, а не у відкритому інтернеті, ви вирішуєте не налаштовувати жодної автентифікації, просто покладаючись на доступ до локальної мережі. +Оскільки він працює **локально**, а не у відкритому інтернеті, ви вирішуєте **не налаштовувати жодної автентифікації**, просто покладаючись на доступ до локальної мережі. Один із ваших користувачів може встановити його і запустити локально. @@ -81,7 +81,7 @@ http://localhost:8000/v1/agents/multivac З цим налаштуванням запити без заголовка `Content-Type` матимуть тіло, розібране як JSON, що відповідає поведінці старіших версій FastAPI. -/// info | Інформація +/// note | Примітка Цю поведінку і конфігурацію додано у FastAPI 0.132.0. diff --git a/docs/uk/docs/advanced/websockets.md b/docs/uk/docs/advanced/websockets.md index aa290b389..1d96933be 100644 --- a/docs/uk/docs/advanced/websockets.md +++ b/docs/uk/docs/advanced/websockets.md @@ -111,7 +111,7 @@ $ fastapi dev {* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *} -/// info +/// note Оскільки це WebSocket, не має сенсу піднімати `HTTPException`, натомість ми піднімаємо `WebSocketException`. diff --git a/docs/uk/docs/advanced/wsgi.md b/docs/uk/docs/advanced/wsgi.md index 84d4aa460..51ca6f6fb 100644 --- a/docs/uk/docs/advanced/wsgi.md +++ b/docs/uk/docs/advanced/wsgi.md @@ -6,7 +6,7 @@ ## Використання `WSGIMiddleware` { #using-wsgimiddleware } -/// info | Інформація +/// note | Примітка Для цього потрібно встановити `a2wsgi`, наприклад за допомогою `pip install a2wsgi`. diff --git a/docs/uk/docs/deployment/docker.md b/docs/uk/docs/deployment/docker.md index 9d9afc0d1..ead651b2d 100644 --- a/docs/uk/docs/deployment/docker.md +++ b/docs/uk/docs/deployment/docker.md @@ -132,7 +132,7 @@ Successfully installed fastapi pydantic -/// info | Інформація +/// note | Примітка Існують інші формати та інструменти для визначення і встановлення залежностей пакетів. @@ -291,7 +291,7 @@ COPY ./requirements.txt /code/requirements.txt Docker та інші інструменти збирають ці образи контейнерів інкрементально, додаючи один шар поверх іншого, починаючи з верхньої частини `Dockerfile` і додаючи будь-які файли, створені кожною інструкцією в `Dockerfile`. -Docker та подібні інструменти також використовують внутрішній кеш під час збірки образу. Якщо файл не змінювався з моменту останньої збірки, тоді він повторно використає той самий шар, створений востаннє, замість копіювання файлу знову та створення нового шару з нуля. +Docker та подібні інструменти також використовують внутрішній кеш під час збірки образу. Якщо файл не змінювався з моменту останньої збірки, тоді він повторно використає той самий шар, створений востанє, замість копіювання файлу знову та створення нового шару з нуля. Просте уникнення копіювання файлів не обов’язково суттєво покращує ситуацію, але оскільки для цього кроку використано кеш, він може використати кеш і для наступного кроку. Наприклад, він може використати кеш для інструкції, яка встановлює залежності: @@ -492,7 +492,7 @@ Traefik має інтеграції з Docker, Kubernetes та іншими, т Наявність іншого менеджера процесів всередині контейнера (як це було б із кількома працівниками) лише додасть зайвої складності, яку, найімовірніше, ви вже вирішуєте на рівні кластера. -### Контейнери з кількома процесами та особливі випадки { #containers-with-multiple-processes-and-special-cases } +### Контейнери з кількоми процесами та особливі випадки { #containers-with-multiple-processes-and-special-cases } Звісно, є особливі випадки, коли ви можете захотіти мати контейнер із кількома процесами-працівниками Uvicorn всередині. @@ -556,7 +556,7 @@ CMD ["fastapi", "run", "app/main.py", "--port", "80", "--workers", "4"] Якщо у вас кілька контейнерів, імовірно кожен запускає один процес (наприклад, у кластері Kubernetes), тоді ви, ймовірно, захочете мати окремий контейнер, який виконає попередні кроки в одному контейнері, запустивши один процес, перед запуском реплікованих контейнерів-працівників. -/// info | Інформація +/// note | Примітка Якщо ви використовуєте Kubernetes, це, ймовірно, буде [Init Container](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/). diff --git a/docs/uk/docs/deployment/fastapicloud.md b/docs/uk/docs/deployment/fastapicloud.md index 63d9fa459..cc59caa30 100644 --- a/docs/uk/docs/deployment/fastapicloud.md +++ b/docs/uk/docs/deployment/fastapicloud.md @@ -1,26 +1,6 @@ # FastAPI Cloud { #fastapi-cloud } -Ви можете розгорнути свій застосунок FastAPI на [FastAPI Cloud](https://fastapicloud.com) **однією командою**, приєднуйтесь до списку очікування, якщо ще ні. 🚀 - -## Вхід { #login } - -Переконайтеся, що у вас вже є обліковий запис **FastAPI Cloud** (ми запросили вас зі списку очікування 😉). - -Потім увійдіть: - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -## Розгортання { #deploy } - -Тепер розгорніть свій застосунок **однією командою**: +Ви можете розгорнути свій застосунок FastAPI на [FastAPI Cloud](https://fastapicloud.com) лише **однією командою**. 🚀
@@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
+CLI автоматично визначить ваш застосунок FastAPI та розгорне його у хмарі. Якщо ви не увійшли, ваш браузер відкриється, щоб завершити процес автентифікації. + Ось і все! Тепер ви можете отримати доступ до свого застосунку за цим URL. ✨ ## Про FastAPI Cloud { #about-fastapi-cloud } diff --git a/docs/uk/docs/deployment/manually.md b/docs/uk/docs/deployment/manually.md index 7ea2c78e3..9a6507403 100644 --- a/docs/uk/docs/deployment/manually.md +++ b/docs/uk/docs/deployment/manually.md @@ -56,13 +56,12 @@ FastAPI використовує стандарт для побудови Python * [Hypercorn](https://hypercorn.readthedocs.io/): ASGI-сервер, сумісний з HTTP/2 і Trio, серед інших можливостей. * [Daphne](https://github.com/django/daphne): ASGI-сервер, створений для Django Channels. * [Granian](https://github.com/emmett-framework/granian): Rust HTTP-сервер для Python-застосунків. -* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit - легке й універсальне середовище виконання вебзастосунків. ## Серверна машина і серверна програма { #server-machine-and-server-program } Є невелика деталь щодо назв, яку варто пам'ятати. 💡 -Слово «**сервер**» зазвичай означає і віддалений/хмарний комп'ютер (фізична або віртуальна машина), і програму, що працює на цій машині (наприклад, Uvicorn). +Слово «сервер» зазвичай означає і віддалений/хмарний комп'ютер (фізична або віртуальна машина), і програму, що працює на цій машині (наприклад, Uvicorn). Майте на увазі, що коли ви бачите слово «сервер» загалом, воно може стосуватися будь-якого з цих двох значень. diff --git a/docs/uk/docs/deployment/server-workers.md b/docs/uk/docs/deployment/server-workers.md index f165bb707..3bbf4454a 100644 --- a/docs/uk/docs/deployment/server-workers.md +++ b/docs/uk/docs/deployment/server-workers.md @@ -17,7 +17,7 @@ Тут я покажу, як використовувати Uvicorn із процесами-працівниками за допомогою команди `fastapi` або безпосередньо команди `uvicorn`. -/// info | Інформація +/// note | Примітка Якщо ви використовуєте контейнери, наприклад з Docker або Kubernetes, я розповім про це більше в наступному розділі: [FastAPI у контейнерах - Docker](docker.md). diff --git a/docs/uk/docs/how-to/extending-openapi.md b/docs/uk/docs/how-to/extending-openapi.md index fcd0982a9..4267d37b9 100644 --- a/docs/uk/docs/how-to/extending-openapi.md +++ b/docs/uk/docs/how-to/extending-openapi.md @@ -25,9 +25,17 @@ - `openapi_version`: Версія специфікації OpenAPI, що використовується. Типово остання: `3.1.0`. - `summary`: Короткий підсумок API. - `description`: Опис вашого API; може містити markdown і буде показаний у документації. -- `routes`: Список маршрутів, це кожна з зареєстрованих *операцій шляху*. Їх беруть з `app.routes`. +- `routes`: Маршрути із застосунку, взяті з `app.routes`. FastAPI використовує їх для збирання зареєстрованих *операцій шляху*, включно з тими, що з підключених роутерів. -/// info | Інформація +/// tip | Технічні деталі + +`app.routes` - це нижчорівневе дерево маршрутів. Воно може містити кандидати маршрутів, які FastAPI внутрішньо використовує для підключених роутерів, а не лише кінцеві об'єкти `APIRoute`. + +Ви все одно можете передати `app.routes` до `get_openapi()`. FastAPI обійде це дерево маршрутів, щоб зібрати фактичні операції шляху. + +/// + +/// note | Примітка Параметр `summary` доступний в OpenAPI 3.1.0 і вище, підтримується FastAPI 0.99.0 і вище. diff --git a/docs/uk/docs/how-to/separate-openapi-schemas.md b/docs/uk/docs/how-to/separate-openapi-schemas.md index 7e6fcbf5f..3903aac7f 100644 --- a/docs/uk/docs/how-to/separate-openapi-schemas.md +++ b/docs/uk/docs/how-to/separate-openapi-schemas.md @@ -1,6 +1,6 @@ # Окремі схеми OpenAPI для введення та виведення, чи ні { #separate-openapi-schemas-for-input-and-output-or-not } -Відколи вийшов **Pydantic v2**, згенерований OpenAPI став трохи точнішим і більш коректним, ніж раніше. 😎 +Відколи вийшов **Pydantic v2**, згенерований OpenAPI став трохи точнішим і більш **коректним**, ніж раніше. 😎 Насправді подекуди буде навіть **дві схеми JSON** в OpenAPI для тієї самої моделі Pydantic: для введення та для виведення - залежно від наявності значень за замовчуванням. @@ -84,7 +84,7 @@ У такому разі ви можете вимкнути цю можливість у **FastAPI** параметром `separate_input_output_schemas=False`. -/// info | Інформація +/// note | Примітка Підтримку `separate_input_output_schemas` додано у FastAPI `0.102.0`. 🤓 diff --git a/docs/uk/docs/index.md b/docs/uk/docs/index.md index 2b770ff39..bcc429c7e 100644 --- a/docs/uk/docs/index.md +++ b/docs/uk/docs/index.md @@ -492,9 +492,7 @@ item: Item ### Розгортання застосунку (необовʼязково) { #deploy-your-app-optional } -За бажання ви можете розгорнути ваш застосунок FastAPI у [FastAPI Cloud](https://fastapicloud.com), перейдіть і приєднайтеся до списку очікування, якщо ви ще цього не зробили. 🚀 - -Якщо у вас вже є обліковий запис **FastAPI Cloud** (ми запросили вас зі списку очікування 😉), ви можете розгорнути ваш застосунок однією командою. +За бажання ви можете розгорнути ваш застосунок FastAPI у [FastAPI Cloud](https://fastapicloud.com) однією командою. 🚀
@@ -510,6 +508,8 @@ Deploying to FastAPI Cloud...
+CLI автоматично визначить ваш застосунок FastAPI і розгорне його в хмарі. Якщо ви не ввійшли в обліковий запис, ваш браузер відкриється для завершення процесу автентифікації. + Ось і все! Тепер ви можете отримати доступ до вашого застосунку за цією URL-адресою. ✨ #### Про FastAPI Cloud { #about-fastapi-cloud } diff --git a/docs/uk/docs/tutorial/bigger-applications.md b/docs/uk/docs/tutorial/bigger-applications.md index 3a31ece46..db2bf11c6 100644 --- a/docs/uk/docs/tutorial/bigger-applications.md +++ b/docs/uk/docs/tutorial/bigger-applications.md @@ -382,11 +382,11 @@ from .routers.users import router {* ../../docs_src/bigger_applications/app_an_py310/main.py hl[10:11] title["app/main.py"] *} -/// note | Примітка +/// note | Технічні деталі -`users.router` містить `APIRouter` у файлі `app/routers/users.py`. +FastAPI зберігає оригінальний `APIRouter` і його `APIRoute` активними після включення router'а до основного застосунку. -А `items.router` містить `APIRouter` у файлі `app/routers/items.py`. +Це означає, що користувацькі підкласи `APIRouter` і `APIRoute` і надалі братимуть участь після включення router'а. /// @@ -394,19 +394,11 @@ from .routers.users import router Це включить усі маршрути з цього router'а як частину застосунку. -/// note | Технічні деталі - -Фактично, всередині для кожної *операції шляху*, оголошеної в `APIRouter`, буде створена окрема *операція шляху*. - -Тобто за лаштунками все працюватиме так, ніби це один і той самий застосунок. - -/// - /// tip | Порада Вам не потрібно перейматися продуктивністю під час включення router'ів. -Це займе мікросекунди і відбуватиметься лише під час запуску. +Це спроєктовано як легковагове рішення і не додає накладних витрат до кожного запиту. Тож це не вплине на продуктивність. ⚡ @@ -461,7 +453,7 @@ from .routers.users import router Це тому, що ми хочемо включати їхні *операції шляху* в схему OpenAPI та інтерфейси користувача. -Оскільки ми не можемо просто ізолювати їх і «змонтувати» незалежно від решти, *операції шляху* «клонуються» (створюються заново), а не включаються безпосередньо. +FastAPI зберігає оригінальні router'и та операції шляху активними й поєднує префікси router'ів, залежності, мітки, відповіді та інші метадані під час обробки запитів і генерації OpenAPI. /// @@ -532,4 +524,16 @@ $ fastapi dev router.include_router(other_router) ``` -Переконайтеся, що ви робите це до включення `router` в застосунок `FastAPI`, щоб *операції шляху* з `other_router` також були включені. +Ви можете зробити це до або після включення `router` у застосунок `FastAPI`. FastAPI все одно включить *операції шляху* з `other_router` у маршрутизацію та OpenAPI. + +Те саме стосується *операцій шляху*, доданих пізніше до router'ів. Вони також будуть видимі через попереднє включення. + +/// warning | Технічні деталі + +Уникайте прямої мутації `router.routes` після включення router'а. FastAPI розглядає включення router'а як «живе», тому оригінальний router і його маршрути залишаються частиною маршрутизації та генерації OpenAPI. + +Використовуйте задокументовані API, такі як декоратори *операцій шляху* і `.include_router()`, щоб додавати маршрути та router'и. + +Сприймайте `router.routes` як нижчорівневе дерево маршрутів, яке може містити визначення маршрутів і включені router'и, і уникайте покладатися на нього як на плаский список кінцевих *операцій шляху*. + +/// diff --git a/docs/uk/docs/tutorial/body-multiple-params.md b/docs/uk/docs/tutorial/body-multiple-params.md index a0db2b186..8658e4a9b 100644 --- a/docs/uk/docs/tutorial/body-multiple-params.md +++ b/docs/uk/docs/tutorial/body-multiple-params.md @@ -111,7 +111,7 @@ q: str | None = None {* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *} -/// info | Інформація +/// note | Примітка `Body` також має всі ті самі додаткові параметри валідації та метаданих, що й `Query`, `Path` та інші, які ви побачите пізніше. @@ -126,7 +126,7 @@ q: str | None = None Але якщо ви хочете, щоб він очікував JSON з ключем `item`, а всередині нього - вміст моделі, як це відбувається, коли ви оголошуєте додаткові параметри тіла, ви можете використати спеціальний параметр `Body` - `embed`: ```Python -item: Item = Body(embed=True) +item: Annotated[Item, Body(embed=True)] ``` як у прикладі: diff --git a/docs/uk/docs/tutorial/body-nested-models.md b/docs/uk/docs/tutorial/body-nested-models.md index 97fea36dc..6919d3e11 100644 --- a/docs/uk/docs/tutorial/body-nested-models.md +++ b/docs/uk/docs/tutorial/body-nested-models.md @@ -136,7 +136,7 @@ my_list: list[str] } ``` -/// info | Інформація +/// note | Примітка Зверніть увагу, що тепер ключ `images` містить список об'єктів зображень. @@ -148,7 +148,7 @@ my_list: list[str] {* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *} -/// info | Інформація +/// note | Примітка Зверніть увагу, що в моделі `Offer` є список `Item`ів, які, своєю чергою, можуть мати необов'язковий список `Image`ів. diff --git a/docs/uk/docs/tutorial/body.md b/docs/uk/docs/tutorial/body.md index 91c4b4252..bd1a8f128 100644 --- a/docs/uk/docs/tutorial/body.md +++ b/docs/uk/docs/tutorial/body.md @@ -8,7 +8,7 @@ Щоб оголосити тіло **запиту**, ви використовуєте [Pydantic](https://docs.pydantic.dev/) моделі з усією їх потужністю та перевагами. -/// info | Інформація +/// note | Примітка Щоб надіслати дані, ви повинні використовувати один із: `POST` (більш поширений), `PUT`, `DELETE` або `PATCH`. diff --git a/docs/uk/docs/tutorial/cookie-param-models.md b/docs/uk/docs/tutorial/cookie-param-models.md index dab57c536..add562dfd 100644 --- a/docs/uk/docs/tutorial/cookie-param-models.md +++ b/docs/uk/docs/tutorial/cookie-param-models.md @@ -32,13 +32,13 @@ -/// info | Інформація +/// note | Примітка Майте на увазі, що оскільки **браузери обробляють cookies** особливим чином і «за лаштунками», вони **не** дозволяють **JavaScript** легко з ними працювати. Якщо ви зайдете до **інтерфейсу документації API** за адресою `/docs`, ви зможете побачити **документацію** для cookies у ваших *операціях шляху*. -Але навіть якщо ви заповните дані й натиснете "Execute", оскільки інтерфейс документації працює з **JavaScript**, cookies не будуть відправлені, і ви побачите **помилку**, ніби ви не ввели жодних значень. +Але навіть якщо ви **заповните дані** й натиснете "Execute", оскільки інтерфейс документації працює з **JavaScript**, cookies не будуть відправлені, і ви побачите **помилку**, ніби ви не ввели жодних значень. /// @@ -73,4 +73,4 @@ ## Підсумок { #summary } -Ви можете використовувати **Pydantic-моделі** для оголошення **cookies** у **FastAPI**. 😎 +Ви можете використовувати **Pydantic-моделі** для оголошення **кукі** у **FastAPI**. 😎 diff --git a/docs/uk/docs/tutorial/cookie-params.md b/docs/uk/docs/tutorial/cookie-params.md index 3a2e6fa24..b55c37774 100644 --- a/docs/uk/docs/tutorial/cookie-params.md +++ b/docs/uk/docs/tutorial/cookie-params.md @@ -24,13 +24,13 @@ /// -/// info +/// note Для визначення кукі ви маєте використовувати `Cookie`, тому що в іншому випадку параметри будуть інтерпретовані як параметри запиту. /// -/// info +/// note Майте на увазі, що оскільки **браузери обробляють кукі** спеціальним чином і за лаштунками, вони **не** дозволяють **JavaScript** легко взаємодіяти з ними. diff --git a/docs/uk/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md b/docs/uk/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md index a82461c8d..f82150919 100644 --- a/docs/uk/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md +++ b/docs/uk/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md @@ -28,7 +28,7 @@ /// -/// info | Інформація +/// note | Примітка У цьому прикладі ми використовуємо вигадані власні заголовки `X-Key` і `X-Token`. diff --git a/docs/uk/docs/tutorial/dependencies/dependencies-with-yield.md b/docs/uk/docs/tutorial/dependencies/dependencies-with-yield.md index 53b49e61b..348cbf25b 100644 --- a/docs/uk/docs/tutorial/dependencies/dependencies-with-yield.md +++ b/docs/uk/docs/tutorial/dependencies/dependencies-with-yield.md @@ -170,7 +170,7 @@ participant tasks as Background tasks end ``` -/// info | Інформація +/// note | Примітка Лише **одна відповідь** буде надіслана клієнту. Це може бути одна з помилкових відповідей або відповідь від *операції шляху*. diff --git a/docs/uk/docs/tutorial/dependencies/index.md b/docs/uk/docs/tutorial/dependencies/index.md index bea5f598d..2021db260 100644 --- a/docs/uk/docs/tutorial/dependencies/index.md +++ b/docs/uk/docs/tutorial/dependencies/index.md @@ -51,7 +51,7 @@ Потім вона просто повертає `dict`, що містить ці значення. -/// info | Інформація +/// note | Примітка FastAPI додав підтримку `Annotated` (і почав її рекомендувати) у версії 0.95.0. @@ -106,7 +106,7 @@ common_parameters --> read_users Таким чином ви пишете спільний код один раз, а **FastAPI** подбає про його виклик для ваших *операцій шляху*. -/// check | Перевірте +/// tip | Порада Зверніть увагу, що вам не потрібно створювати спеціальний клас і передавати його кудись у **FastAPI**, щоб «зареєструвати» його чи щось подібне. @@ -138,7 +138,7 @@ commons: Annotated[dict, Depends(common_parameters)] Залежності продовжать працювати як очікується, і **найкраще** те, що **інформація про типи буде збережена**, а це означає, що ваш редактор зможе й надалі надавати **автозаповнення**, **помилки в рядку** тощо. Те саме і для інших інструментів, як-от `mypy`. -Це буде особливо корисно у **великій кодовій базі**, де ви використовуєте **одні й ті самі залежності** знову і знову в **багатьох *операціях шляху***. +Це буде особливо корисно у **великій кодовій базі**, де ви використовуєте **одні й ті ж залежності** знову і знову в **багатьох *операціях шляху***. ## Бути `async` чи не бути `async` { #to-async-or-not-to-async } diff --git a/docs/uk/docs/tutorial/dependencies/sub-dependencies.md b/docs/uk/docs/tutorial/dependencies/sub-dependencies.md index 4e7488086..c98d917c1 100644 --- a/docs/uk/docs/tutorial/dependencies/sub-dependencies.md +++ b/docs/uk/docs/tutorial/dependencies/sub-dependencies.md @@ -4,7 +4,7 @@ Вони можуть бути настільки глибокими, наскільки потрібно. -FastAPI подбає про їх розв'язання. +**FastAPI** подбає про їх розв'язання. ## Перша залежність «dependable» { #first-dependency-dependable } @@ -35,11 +35,11 @@ FastAPI подбає про їх розв'язання. {* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *} -/// info | Інформація +/// note | Примітка Зверніть увагу, що ми оголошуємо лише одну залежність у функції операції шляху — `query_or_cookie_extractor`. -Але FastAPI знатиме, що спочатку треба розв'язати `query_extractor`, щоб передати його результат у `query_or_cookie_extractor` під час виклику. +Але **FastAPI** знатиме, що спочатку треба розв'язати `query_extractor`, щоб передати його результат у `query_or_cookie_extractor` під час виклику. /// @@ -56,7 +56,7 @@ query_extractor --> query_or_cookie_extractor --> read_query ## Використання тієї ж залежності кілька разів { #using-the-same-dependency-multiple-times } -Якщо одна з ваших залежностей оголошена кілька разів для однієї операції шляху, наприклад, кілька залежностей мають спільну підзалежність, FastAPI знатиме, що цю підзалежність потрібно викликати лише один раз на запит. +Якщо одна з ваших залежностей оголошена кілька разів для однієї операції шляху, наприклад, кілька залежностей мають спільну підзалежність, **FastAPI** знатиме, що цю підзалежність потрібно викликати лише один раз на запит. І він збереже повернуте значення у «кеш» і передасть його всім «dependants», яким воно потрібне в цьому конкретному запиті, замість того щоб викликати залежність кілька разів для одного й того ж запиту. @@ -88,7 +88,7 @@ async def needy_dependency(fresh_value: str = Depends(get_value, use_cache=False ## Підсумок { #recap } -Попри всі модні терміни, система впровадження залежностей досить проста. +Попри всі модні терміни, система **впровадження залежностей** досить проста. Це просто функції, які виглядають так само, як функції операцій шляху. diff --git a/docs/uk/docs/tutorial/first-steps.md b/docs/uk/docs/tutorial/first-steps.md index 0f46890d9..2557d646c 100644 --- a/docs/uk/docs/tutorial/first-steps.md +++ b/docs/uk/docs/tutorial/first-steps.md @@ -180,7 +180,7 @@ entrypoint = "backend.main:app" from backend.main import app ``` -### `fastapi dev` із шляхом { #fastapi-dev-with-path } +### `fastapi dev` із шляхом або з параметром CLI `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option } Ви також можете передати шлях до файлу в команду `fastapi dev`, і вона вгадає обʼєкт FastAPI app, який слід використовувати: @@ -188,29 +188,19 @@ from backend.main import app $ fastapi dev main.py ``` -Але вам доведеться щоразу памʼятати передавати правильний шлях під час виклику команди `fastapi`. +Або ви також можете передати параметр `--entrypoint` команді `fastapi dev`: + +```console +$ fastapi dev --entrypoint main:app +``` + +Але вам доведеться щоразу памʼятати передавати правильний шлях\entrypoint під час виклику команди `fastapi`. Крім того, інші інструменти можуть не знайти його, наприклад [Розширення VS Code](../editor-support.md) або [FastAPI Cloud](https://fastapicloud.com), тому рекомендується використовувати `entrypoint` у `pyproject.toml`. ### Розгорніть ваш застосунок (необовʼязково) { #deploy-your-app-optional } -За бажанням ви можете розгорнути ваш FastAPI-застосунок у [FastAPI Cloud](https://fastapicloud.com), перейдіть і приєднайтеся до списку очікування, якщо ви цього ще не зробили. 🚀 - -Якщо у вас вже є обліковий запис **FastAPI Cloud** (ми запросили вас зі списку очікування 😉), ви можете розгорнути ваш застосунок однією командою. - -Перед розгортанням переконайтеся, що ви увійшли: - -
- -```console -$ fastapi login - -You are logged in to FastAPI Cloud 🚀 -``` - -
- -Потім розгорніть ваш застосунок: +За бажанням ви можете розгорнути ваш FastAPI-застосунок у [FastAPI Cloud](https://fastapicloud.com) однією командою. 🚀
@@ -226,6 +216,8 @@ Deploying to FastAPI Cloud...
+CLI автоматично визначить ваш застосунок FastAPI і розгорне його в хмарі. Якщо ви не ввійшли, ваш браузер відкриється для завершення процесу автентифікації. + Ось і все! Тепер ви можете отримати доступ до вашого застосунку за цим URL. ✨ ## Підібʼємо підсумки, крок за кроком { #recap-step-by-step } @@ -270,7 +262,7 @@ https://example.com/items/foo /items/foo ``` -/// info +/// note | Примітка «Шлях» також зазвичай називають «ендпоінтом» або «маршрутом». @@ -322,7 +314,7 @@ https://example.com/items/foo * шляху `/` * використовуючи get операція -/// info | `@decorator` Інформація +/// note | `@decorator` Інформація Синтаксис `@something` у Python називається «декоратором». @@ -349,7 +341,7 @@ https://example.com/items/foo * `@app.patch()` * `@app.trace()` -/// tip +/// tip | Порада Ви можете використовувати кожну операцію (HTTP-метод) як забажаєте. @@ -383,7 +375,7 @@ https://example.com/items/foo {* ../../docs_src/first_steps/tutorial003_py310.py hl[7] *} -/// note +/// note | Примітка Якщо ви не знаєте різницю, подивіться [Асинхронність: *«Поспішаєте?»*](../async.md#in-a-hurry). diff --git a/docs/uk/docs/tutorial/metadata.md b/docs/uk/docs/tutorial/metadata.md index ee1fdaf6d..d34b83b38 100644 --- a/docs/uk/docs/tutorial/metadata.md +++ b/docs/uk/docs/tutorial/metadata.md @@ -1,6 +1,6 @@ # Метадані та URL-адреси документації { #metadata-and-docs-urls } -Ви можете налаштувати кілька конфігурацій метаданих у Вашому додатку **FastAPI**. +Ви можете налаштувати кілька конфігурацій метаданих у вашому додатку **FastAPI**. ## Метадані для API { #metadata-for-api } @@ -11,7 +11,7 @@ | `title` | `str` | Назва API. | | `summary` | `str` | Короткий підсумок API. Доступно з OpenAPI 3.1.0, FastAPI 0.99.0. | | `description` | `str` | Короткий опис API. Може використовувати Markdown. | -| `version` | `string` | Версія API. Це версія Вашого додатка, а не OpenAPI. Наприклад, `2.5.0`. | +| `version` | `string` | Версія API. Це версія вашого додатка, а не OpenAPI. Наприклад, `2.5.0`. | | `terms_of_service` | `str` | URL до умов використання API. Якщо вказано, має бути у форматі URL. | | `contact` | `dict` | Інформація для контакту з опублікованим API. Може містити кілька полів.
contact поля
ПараметрТипОпис
namestrІдентифікаційне ім'я контактної особи або організації.
urlstrURL, що вказує на контактну інформацію. МАЄ бути у форматі URL.
emailstrАдреса електронної пошти контактної особи або організації. МАЄ бути у форматі адреси електронної пошти.
| | `license_info` | `dict` | Інформація про ліцензію для опублікованого API. Може містити кілька полів.
license_info поля
ПараметрТипОпис
namestrОБОВ'ЯЗКОВО (якщо встановлено license_info). Назва ліцензії для API.
identifierstrЛіцензійний вираз за [SPDX](https://spdx.org/licenses/) для API. Поле identifier взаємовиключне з полем url. Доступно з OpenAPI 3.1.0, FastAPI 0.99.0.
urlstrURL до ліцензії, яка використовується для API. МАЄ бути у форматі URL.
| @@ -32,7 +32,7 @@ ## Ідентифікатор ліцензії { #license-identifier } -З початку використання OpenAPI 3.1.0 та FastAPI 0.99.0 Ви також можете налаштувати `license_info` за допомогою `identifier` замість `url`. +З початку використання OpenAPI 3.1.0 та FastAPI 0.99.0 ви також можете налаштувати `license_info` за допомогою `identifier` замість `url`. Наприклад: @@ -46,7 +46,7 @@ Кожен словник може містити: -* `name` (**обов'язково**): `str` з тією ж назвою тегу, яку Ви використовуєте у параметрі `tags` у Ваших *операціях шляху* та `APIRouter`s. +* `name` (**обов'язково**): `str` з тією ж назвою тегу, яку ви використовуєте у параметрі `tags` у ваших *операціях шляху* та `APIRouter`s. * `description`: `str` з коротким описом тегу. Може містити Markdown і буде показано в інтерфейсі документації. * `externalDocs`: `dict`, який описує зовнішню документацію з такими полями: * `description`: `str` з коротким описом зовнішньої документації. @@ -64,7 +64,7 @@ /// tip | Порада -Вам не потрібно додавати метадані для всіх тегів, які Ви використовуєте. +Вам не потрібно додавати метадані для всіх тегів, які ви використовуєте. /// @@ -74,7 +74,7 @@ {* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *} -/// info | Інформація +/// note | Примітка Детальніше про теги читайте в розділі [Конфігурація операції шляху](path-operation-configuration.md#tags). @@ -82,7 +82,7 @@ ### Перевірте документацію { #check-the-docs } -Тепер, якщо Ви перевірите документацію, вона покаже всі додаткові метадані: +Тепер, якщо ви перевірите документацію, вона покаже всі додаткові метадані: @@ -96,13 +96,13 @@ За замовчуванням схема OpenAPI надається за адресою `/openapi.json`. -Але Ви можете налаштувати це за допомогою параметра `openapi_url`. +Але ви можете налаштувати це за допомогою параметра `openapi_url`. Наприклад, щоб налаштувати його на `/api/v1/openapi.json`: {* ../../docs_src/metadata/tutorial002_py310.py hl[3] *} -Якщо Ви хочете повністю вимкнути схему OpenAPI, Ви можете встановити `openapi_url=None`, це також вимкне інтерфейси документації, які її використовують. +Якщо ви хочете повністю вимкнути схему OpenAPI, ви можете встановити `openapi_url=None`, це також вимкне інтерфейси документації, які її використовують. ## URL-адреси документації { #docs-urls } diff --git a/docs/uk/docs/tutorial/path-operation-configuration.md b/docs/uk/docs/tutorial/path-operation-configuration.md index 292066c1f..47ae65f3e 100644 --- a/docs/uk/docs/tutorial/path-operation-configuration.md +++ b/docs/uk/docs/tutorial/path-operation-configuration.md @@ -72,13 +72,13 @@ FastAPI підтримує це так само, як і зі звичайним {* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *} -/// info | Інформація +/// note | Примітка Зверніть увагу, що `response_description` стосується саме відповіді, а `description` стосується «операції шляху» загалом. /// -/// check | Перевірте +/// tip | Порада OpenAPI визначає, що кожна «операція шляху» потребує опису відповіді. diff --git a/docs/uk/docs/tutorial/path-params-numeric-validations.md b/docs/uk/docs/tutorial/path-params-numeric-validations.md index 39397a3b1..8320ee8c4 100644 --- a/docs/uk/docs/tutorial/path-params-numeric-validations.md +++ b/docs/uk/docs/tutorial/path-params-numeric-validations.md @@ -8,7 +8,7 @@ {* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *} -/// info | Інформація +/// note | Примітка FastAPI додав підтримку `Annotated` (і почав рекомендувати його використання) у версії 0.95.0. @@ -131,7 +131,7 @@ Python нічого не зробить із цією `*`, але розпізн * `lt`: `l`ess `t`han * `le`: `l`ess than or `e`qual -/// info | Інформація +/// note | Примітка `Query`, `Path` та інші класи, які ви побачите пізніше, є підкласами спільного класу `Param`. diff --git a/docs/uk/docs/tutorial/path-params.md b/docs/uk/docs/tutorial/path-params.md index eb05a4412..12fdecae3 100644 --- a/docs/uk/docs/tutorial/path-params.md +++ b/docs/uk/docs/tutorial/path-params.md @@ -20,7 +20,7 @@ У цьому випадку `item_id` оголошено як `int`. -/// check | Перевірте +/// tip | Порада Це дасть вам підтримку редактора всередині функції з перевірками помилок, автодоповненням тощо. @@ -34,7 +34,7 @@ {"item_id":3} ``` -/// check | Перевірте +/// tip | Порада Зверніть увагу, що значення, яке отримала (і повернула) ваша функція, — це `3`, як Python `int`, а не рядок `"3"`. @@ -66,7 +66,7 @@ Та сама помилка з’явиться, якщо ви передасте `float` замість `int`, як у: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2) -/// check | Перевірте +/// tip | Порада Отже, з тим самим оголошенням типу в Python **FastAPI** надає вам валідацію даних. @@ -82,7 +82,7 @@ -/// check | Перевірте +/// tip | Порада Знову ж таки, лише з тим самим оголошенням типу в Python **FastAPI** надає вам автоматичну, інтерактивну документацію (з інтеграцією Swagger UI). diff --git a/docs/uk/docs/tutorial/query-params-str-validations.md b/docs/uk/docs/tutorial/query-params-str-validations.md index afe86d482..bca5874c2 100644 --- a/docs/uk/docs/tutorial/query-params-str-validations.md +++ b/docs/uk/docs/tutorial/query-params-str-validations.md @@ -29,7 +29,7 @@ FastAPI знатиме, що значення `q` не є обов’язков {* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *} -/// info | Інформація +/// note | Примітка FastAPI додав підтримку `Annotated` (і почав рекомендувати його) у версії 0.95.0. @@ -381,7 +381,7 @@ Pydantic також має [`BeforeValidator`](https://docs.pydantic.dev/latest/ {* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *} -/// info | Інформація +/// note | Примітка Це доступно з версії Pydantic 2 або вище. 😎 diff --git a/docs/uk/docs/tutorial/query-params.md b/docs/uk/docs/tutorial/query-params.md index b665a620e..755b9e21a 100644 --- a/docs/uk/docs/tutorial/query-params.md +++ b/docs/uk/docs/tutorial/query-params.md @@ -65,7 +65,7 @@ http://127.0.0.1:8000/items/?skip=20 У цьому випадку параметр функції `q` буде необов’язковим і за замовчуванням матиме значення `None`. -/// check | Перевірте +/// tip | Порада Також зверніть увагу, що **FastAPI** достатньо розумний, щоб визначити, що параметр шляху `item_id` є параметром шляху, а `q` — ні, отже, це параметр query. diff --git a/docs/uk/docs/tutorial/request-files.md b/docs/uk/docs/tutorial/request-files.md index f81e468d0..b7179c393 100644 --- a/docs/uk/docs/tutorial/request-files.md +++ b/docs/uk/docs/tutorial/request-files.md @@ -2,7 +2,7 @@ Ви можете визначити файли, які будуть завантажуватися клієнтом, використовуючи `File`. -/// info | Інформація +/// note | Примітка Щоб отримувати завантажені файли, спочатку встановіть [`python-multipart`](https://github.com/Kludex/python-multipart). @@ -28,7 +28,7 @@ $ pip install python-multipart {* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *} -/// info | Інформація +/// note | Примітка `File` — це клас, який безпосередньо успадковує `Form`. diff --git a/docs/uk/docs/tutorial/request-form-models.md b/docs/uk/docs/tutorial/request-form-models.md index 6f785016d..c61eeeaab 100644 --- a/docs/uk/docs/tutorial/request-form-models.md +++ b/docs/uk/docs/tutorial/request-form-models.md @@ -2,7 +2,7 @@ У FastAPI ви можете використовувати **Pydantic-моделі** для оголошення **полів форми**. -/// info +/// note | Примітка Щоб використовувати форми, спочатку встановіть [`python-multipart`](https://github.com/Kludex/python-multipart). @@ -14,7 +14,7 @@ $ pip install python-multipart /// -/// note +/// note | Примітка Це підтримується, починаючи з FastAPI версії `0.113.0`. 🤓 @@ -40,7 +40,7 @@ $ pip install python-multipart У деяких особливих випадках (ймовірно, не дуже поширених) ви можете **обмежити** поля форми лише тими, які були оголошені в Pydantic-моделі. І **заборонити** будь-які **додаткові** поля. -/// note +/// note | Примітка Це підтримується, починаючи з FastAPI версії `0.114.0`. 🤓 diff --git a/docs/uk/docs/tutorial/request-forms-and-files.md b/docs/uk/docs/tutorial/request-forms-and-files.md index c6d254808..74de8018c 100644 --- a/docs/uk/docs/tutorial/request-forms-and-files.md +++ b/docs/uk/docs/tutorial/request-forms-and-files.md @@ -2,7 +2,7 @@ Ви можете одночасно визначати файли та поля форми, використовуючи `File` і `Form`. -/// info | Інформація +/// note | Примітка Щоб отримувати завантажені файли та/або дані форми, спочатку встановіть [`python-multipart`](https://github.com/Kludex/python-multipart). diff --git a/docs/uk/docs/tutorial/request-forms.md b/docs/uk/docs/tutorial/request-forms.md index d02b85068..382826a40 100644 --- a/docs/uk/docs/tutorial/request-forms.md +++ b/docs/uk/docs/tutorial/request-forms.md @@ -2,7 +2,7 @@ Коли вам потрібно отримувати поля форми замість JSON, ви можете використовувати `Form`. -/// info | Інформація +/// note | Примітка Щоб використовувати форми, спочатку встановіть [`python-multipart`](https://github.com/Kludex/python-multipart). @@ -26,13 +26,13 @@ $ pip install python-multipart {* ../../docs_src/request_forms/tutorial001_an_py310.py hl[9] *} -Наприклад, один зі способів використання специфікації OAuth2 (так званий «password flow») вимагає надсилати `username` та `password` як поля форми. +Наприклад, один зі способів використання специфікації OAuth2 (так званий «потік паролю») вимагає надсилати `username` та `password` як поля форми. специфікація вимагає, щоб ці поля мали точні назви `username` і `password` та надсилалися у вигляді полів форми, а не JSON. З `Form` ви можете оголошувати ті ж конфігурації, що і з `Body` (та `Query`, `Path`, `Cookie`), включаючи валідацію, приклади, псевдоніми (наприклад, `user-name` замість `username`) тощо. -/// info | Інформація +/// note | Примітка `Form` — це клас, який безпосередньо наслідується від `Body`. diff --git a/docs/uk/docs/tutorial/response-model.md b/docs/uk/docs/tutorial/response-model.md index 86f12bff4..a5c297289 100644 --- a/docs/uk/docs/tutorial/response-model.md +++ b/docs/uk/docs/tutorial/response-model.md @@ -72,7 +72,7 @@ FastAPI використовуватиме цей `response_model` для вик {* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *} -/// info | Інформація +/// note | Примітка Щоб використовувати `EmailStr`, спочатку встановіть [`email-validator`](https://github.com/JoshData/python-email-validator). @@ -182,7 +182,7 @@ FastAPI виконує кілька внутрішніх операцій з Pyd ### Повернути Response напряму { #return-a-response-directly } -Найпоширенішим випадком буде [повернення Response напряму, як пояснюється пізніше у розширеній документації](../advanced/response-directly.md). +Найпоширенішим випадком буде [повернення Response напряму, як пояснюється пізніше у просунутому посібнику користувача](../advanced/response-directly.md). {* ../../docs_src/response_model/tutorial003_02_py310.py hl[8,10:11] *} @@ -251,7 +251,7 @@ FastAPI виконує кілька внутрішніх операцій з Pyd } ``` -/// info | Інформація +/// note | Примітка Ви також можете використовувати: diff --git a/docs/uk/docs/tutorial/response-status-code.md b/docs/uk/docs/tutorial/response-status-code.md index d453510f9..3915a53ed 100644 --- a/docs/uk/docs/tutorial/response-status-code.md +++ b/docs/uk/docs/tutorial/response-status-code.md @@ -18,7 +18,7 @@ Параметр `status_code` приймає число з HTTP кодом статусу. -/// info | Інформація +/// note | Примітка `status_code` також може, як альтернативу, приймати `IntEnum`, наприклад, Python [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus). diff --git a/docs/uk/docs/tutorial/schema-extra-example.md b/docs/uk/docs/tutorial/schema-extra-example.md index 742871e39..b63a2d253 100644 --- a/docs/uk/docs/tutorial/schema-extra-example.md +++ b/docs/uk/docs/tutorial/schema-extra-example.md @@ -24,7 +24,7 @@ /// -/// info | Інформація +/// note | Примітка OpenAPI 3.1.0 (який використовується починаючи з FastAPI 0.99.0) додав підтримку `examples`, що є частиною стандарту **Схеми JSON**. @@ -155,7 +155,7 @@ OpenAPI також додала поля `example` і `examples` до інших * `File()` * `Form()` -/// info | Інформація +/// note | Примітка Цей старий специфічний для OpenAPI параметр `examples` тепер називається `openapi_examples`, починаючи з FastAPI `0.103.0`. @@ -171,7 +171,7 @@ OpenAPI також додала поля `example` і `examples` до інших Це нове поле `examples` у Схемі JSON - це **просто `list`** прикладів, а не `dict` з додатковими метаданими, як в інших місцях OpenAPI (описаних вище). -/// info | Інформація +/// note | Примітка Навіть після релізу OpenAPI 3.1.0 з цією новою простішою інтеграцією зі Схемою JSON, протягом певного часу Swagger UI, інструмент, який надає автоматичну документацію, не підтримував OpenAPI 3.1.0 (тепер підтримує, починаючи з версії 5.0.0 🎉). diff --git a/docs/uk/docs/tutorial/security/first-steps.md b/docs/uk/docs/tutorial/security/first-steps.md index bfe196223..aa0d21e2e 100644 --- a/docs/uk/docs/tutorial/security/first-steps.md +++ b/docs/uk/docs/tutorial/security/first-steps.md @@ -24,7 +24,7 @@ ## Запустіть { #run-it } -/// info | Інформація +/// note | Примітка Пакет [`python-multipart`](https://github.com/Kludex/python-multipart) автоматично встановлюється з **FastAPI**, коли ви виконуєте команду `pip install "fastapi[standard]"`. @@ -60,7 +60,7 @@ $ fastapi dev -/// check | Кнопка Authorize! +/// tip | Кнопка Authorize! У вас уже є нова блискуча кнопка «Authorize». @@ -118,7 +118,7 @@ OAuth2 був спроєктований так, щоб backend або API мо У цьому прикладі ми використаємо **OAuth2** з потоком **Password**, використовуючи токен **Bearer**. Це робиться за допомогою класу `OAuth2PasswordBearer`. -/// info | Інформація +/// note | Примітка «Bearer»-токен - не єдиний варіант. @@ -148,7 +148,7 @@ OAuth2 був спроєктований так, щоб backend або API мо Незабаром ми також створимо фактичну операцію шляху. -/// info | Інформація +/// note | Примітка Якщо ви дуже строгий «Pythonista», вам може не подобатися стиль імені параметра `tokenUrl` замість `token_url`. @@ -176,7 +176,7 @@ oauth2_scheme(some, parameters) **FastAPI** знатиме, що може використати цю залежність, щоб визначити «схему безпеки» в схемі OpenAPI (і в автоматичній документації API). -/// info | Технічні деталі +/// note | Технічні деталі **FastAPI** знатиме, що може використати клас `OAuth2PasswordBearer` (оголошений у залежності), щоб визначити схему безпеки в OpenAPI, тому що він наслідує `fastapi.security.oauth2.OAuth2`, який своєю чергою наслідує `fastapi.security.base.SecurityBase`. diff --git a/docs/uk/docs/tutorial/security/get-current-user.md b/docs/uk/docs/tutorial/security/get-current-user.md index 2371ad9fc..b3643a439 100644 --- a/docs/uk/docs/tutorial/security/get-current-user.md +++ b/docs/uk/docs/tutorial/security/get-current-user.md @@ -52,7 +52,7 @@ /// -/// check | Перевірте +/// tip | Порада Те, як спроєктована ця система залежностей, дозволяє мати різні залежності (різні «залежні»), які всі повертають модель `User`. diff --git a/docs/uk/docs/tutorial/security/oauth2-jwt.md b/docs/uk/docs/tutorial/security/oauth2-jwt.md index 64774af6d..1213afe7b 100644 --- a/docs/uk/docs/tutorial/security/oauth2-jwt.md +++ b/docs/uk/docs/tutorial/security/oauth2-jwt.md @@ -42,7 +42,7 @@ $ pip install pyjwt -/// info | Інформація +/// note | Примітка Якщо ви плануєте використовувати алгоритми цифрового підпису на кшталт RSA або ECDSA, слід встановити залежність криптобібліотеки `pyjwt[crypto]`. @@ -213,7 +213,7 @@ JWT може використовуватися й для інших речей, Username: `johndoe` Password: `secret` -/// check | Перевірте +/// tip | Порада Зверніть увагу, що ніде в коді немає відкритого пароля "`secret`", ми маємо лише хешовану версію. diff --git a/docs/uk/docs/tutorial/security/simple-oauth2.md b/docs/uk/docs/tutorial/security/simple-oauth2.md index 7c83e4c2a..686839982 100644 --- a/docs/uk/docs/tutorial/security/simple-oauth2.md +++ b/docs/uk/docs/tutorial/security/simple-oauth2.md @@ -32,7 +32,7 @@ OAuth2 визначає, що під час використання «пото - `instagram_basic` використовується Facebook / Instagram. - `https://www.googleapis.com/auth/drive` використовується Google. -/// info | Інформація +/// note | Примітка У OAuth2 «scope» — це просто строка, що оголошує конкретний потрібний дозвіл. @@ -72,7 +72,7 @@ OAuth2 визначає, що під час використання «пото - Необов'язковим `client_id` (для нашого прикладу не потрібно). - Необов'язковим `client_secret` (для нашого прикладу не потрібно). -/// info | Інформація +/// note | Примітка `OAuth2PasswordRequestForm` — не спеціальний клас для **FastAPI**, як `OAuth2PasswordBearer`. @@ -144,7 +144,7 @@ UserInDB( ) ``` -/// info | Інформація +/// note | Примітка Для повнішого пояснення `**user_dict` перегляньте [документацію для **Додаткових моделей**](../extra-models.md#about-user-in-dict). @@ -196,7 +196,7 @@ UserInDB( {* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *} -/// info | Інформація +/// note | Примітка Додатковий заголовок `WWW-Authenticate` зі значенням `Bearer`, який ми тут повертаємо, також є частиною специфікації. diff --git a/docs/uk/docs/tutorial/server-sent-events.md b/docs/uk/docs/tutorial/server-sent-events.md index 8234085cf..ffb56e3cb 100644 --- a/docs/uk/docs/tutorial/server-sent-events.md +++ b/docs/uk/docs/tutorial/server-sent-events.md @@ -4,7 +4,7 @@ Це подібно до [Потік JSON Lines](stream-json-lines.md), але використовує формат `text/event-stream`, який нативно підтримується браузерами через [API `EventSource`](https://developer.mozilla.org/en-US/docs/Web/API/EventSource). -/// info | Інформація +/// note | Примітка Додано у FastAPI 0.135.0. @@ -81,7 +81,7 @@ FastAPI подбає про коректне виконання, щоб воно ## Сирі дані { #raw-data } -Якщо потрібно надіслати дані **без** кодування в JSON, використовуйте `raw_data` замість `data`. +Якщо потрібно надіслати дані без кодування в JSON, використовуйте `raw_data` замість `data`. Це корисно для надсилання попередньо відформатованого тексту, рядків логів або спеціальних значень «значення-сторож», як-от `[DONE]`. @@ -103,7 +103,7 @@ FastAPI подбає про коректне виконання, щоб воно ## SSE з POST { #sse-with-post } -SSE працює з **будь-яким HTTP-методом**, не лише з `GET`. +SSE працює з будь-яким HTTP-методом, не лише з `GET`. Це корисно для протоколів на кшталт [MCP](https://modelcontextprotocol.io), які транслюють SSE через `POST`: @@ -113,8 +113,8 @@ SSE працює з **будь-яким HTTP-методом**, не лише з FastAPI реалізує деякі найкращі практики SSE «з коробки». -- Надсилати **коментар «keep alive» `ping`** кожні 15 секунд, коли не було жодного повідомлення, щоб запобігти закриттю з'єднання деякими проксі, як рекомендовано у [Специфікації HTML: Події, надіслані сервером](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes). -- Встановити заголовок `Cache-Control: no-cache`, щоб **запобігти кешуванню** потоку. -- Встановити спеціальний заголовок `X-Accel-Buffering: no`, щоб **запобігти буферизації** у деяких проксі, наприклад Nginx. +- Надсилати коментар «keep alive» `ping` кожні 15 секунд, коли не було жодного повідомлення, щоб запобігти закриттю з'єднання деякими проксі, як рекомендовано у [Специфікації HTML: Події, надіслані сервером](https://html.spec.whatwg.org/multipage/server-sent-events.html#authoring-notes). +- Встановити заголовок `Cache-Control: no-cache`, щоб запобігти кешуванню потоку. +- Встановити спеціальний заголовок `X-Accel-Buffering: no`, щоб запобігти буферизації у деяких проксі, наприклад Nginx. Вам не потрібно нічого з цим робити, воно працює «з коробки». 🤓 diff --git a/docs/uk/docs/tutorial/stream-json-lines.md b/docs/uk/docs/tutorial/stream-json-lines.md index f7be4a1b2..488e36e75 100644 --- a/docs/uk/docs/tutorial/stream-json-lines.md +++ b/docs/uk/docs/tutorial/stream-json-lines.md @@ -2,7 +2,7 @@ У вас може бути послідовність даних, яку ви хочете надсилати у **«потоці»**, це можна зробити за допомогою **JSON Lines**. -/// info | Інформація +/// note | Примітка Додано в FastAPI 0.134.0. @@ -48,7 +48,7 @@ sequenceDiagram Це дуже схоже на масив JSON (еквівалент списку Python), але замість того, щоб бути загорнутим у `[]` і мати `,` між елементами, тут є **по одному об’єкту JSON на рядок**, вони розділені символом нового рядка. -/// info | Інформація +/// note | Примітка Важливо те, що ваш застосунок зможе по черзі створювати кожен рядок, поки клієнт споживає попередні рядки. diff --git a/docs/uk/docs/tutorial/testing.md b/docs/uk/docs/tutorial/testing.md index ccae2303a..059e5cec0 100644 --- a/docs/uk/docs/tutorial/testing.md +++ b/docs/uk/docs/tutorial/testing.md @@ -8,7 +8,7 @@ ## Використання `TestClient` { #using-testclient } -/// info | Інформація +/// note | Примітка Щоб використовувати `TestClient`, спочатку встановіть [`httpx`](https://www.python-httpx.org). @@ -144,7 +144,7 @@ $ pip install httpx Докладніше про передачу даних у бекенд (за допомогою `httpx` або `TestClient`) можна знайти в [документації HTTPX](https://www.python-httpx.org). -/// info | Інформація +/// note | Примітка Зверніть увагу, що `TestClient` отримує дані, які можна конвертувати в JSON, а не Pydantic-моделі.