Browse Source

🌐 Add Russian translation for `docs/ru/docs/index.md` (#5289)

pull/4200/merge
impocode 3 years ago
committed by GitHub
parent
commit
fd2080aece
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 1
      README.md
  2. 1
      docs/en/docs/index.md
  3. 329
      docs/ru/docs/index.md

1
README.md

@ -32,7 +32,6 @@ FastAPI is a modern, fast (high-performance), web framework for building APIs wi
The key features are: The key features are:
* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance). * **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).
* **Fast to code**: Increase the speed to develop features by about 200% to 300%. * * **Fast to code**: Increase the speed to develop features by about 200% to 300%. *
* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. * * **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *
* **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging. * **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging.

1
docs/en/docs/index.md

@ -32,7 +32,6 @@ FastAPI is a modern, fast (high-performance), web framework for building APIs wi
The key features are: The key features are:
* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance). * **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance).
* **Fast to code**: Increase the speed to develop features by about 200% to 300%. * * **Fast to code**: Increase the speed to develop features by about 200% to 300%. *
* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. * * **Fewer bugs**: Reduce about 40% of human (developer) induced errors. *
* **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging. * **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging.

329
docs/ru/docs/index.md

@ -1,50 +1,48 @@
{!../../../docs/missing-translation.md!}
<p align="center"> <p align="center">
<a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a> <a href="https://fastapi.tiangolo.com"><img src="https://fastapi.tiangolo.com/img/logo-margin/logo-teal.png" alt="FastAPI"></a>
</p> </p>
<p align="center"> <p align="center">
<em>FastAPI framework, high performance, easy to learn, fast to code, ready for production</em> <em>Готовый к внедрению высокопроизводительный фреймворк, простой в изучении и разработке.</em>
</p> </p>
<p align="center"> <p align="center">
<a href="https://travis-ci.com/tiangolo/fastapi" target="_blank"> <a href="https://github.com/tiangolo/fastapi/actions?query=workflow%3ATest+event%3Apush+branch%3Amaster" target="_blank">
<img src="https://travis-ci.com/tiangolo/fastapi.svg?branch=master" alt="Build Status"> <img src="https://github.com/tiangolo/fastapi/workflows/Test/badge.svg?event=push&branch=master" alt="Test">
</a> </a>
<a href="https://codecov.io/gh/tiangolo/fastapi" target="_blank"> <a href="https://codecov.io/gh/tiangolo/fastapi" target="_blank">
<img src="https://img.shields.io/codecov/c/github/tiangolo/fastapi" alt="Coverage"> <img src="https://img.shields.io/codecov/c/github/tiangolo/fastapi?color=%2334D058" alt="Coverage">
</a> </a>
<a href="https://pypi.org/project/fastapi" target="_blank"> <a href="https://pypi.org/project/fastapi" target="_blank">
<img src="https://badge.fury.io/py/fastapi.svg" alt="Package version"> <img src="https://img.shields.io/pypi/v/fastapi?color=%2334D058&label=pypi%20package" alt="Package version">
</a>
<a href="https://pypi.org/project/fastapi" target="_blank">
<img src="https://img.shields.io/pypi/pyversions/fastapi.svg?color=%2334D058" alt="Supported Python versions">
</a> </a>
</p> </p>
--- ---
**Documentation**: <a href="https://fastapi.tiangolo.com" target="_blank">https://fastapi.tiangolo.com</a> **Документация**: <a href="https://fastapi.tiangolo.com" target="_blank">https://fastapi.tiangolo.com</a>
**Source Code**: <a href="https://github.com/tiangolo/fastapi" target="_blank">https://github.com/tiangolo/fastapi</a> **Исходный код**: <a href="https://github.com/tiangolo/fastapi" target="_blank">https://github.com/tiangolo/fastapi</a>
--- ---
FastAPI is a modern, fast (high-performance), web framework for building APIs with Python 3.6+ based on standard Python type hints. FastAPI — это современный, быстрый (высокопроизводительный) веб-фреймворк для создания API используя Python 3.6+, в основе которого лежит стандартная аннотация типов Python.
The key features are:
* **Fast**: Very high performance, on par with **NodeJS** and **Go** (thanks to Starlette and Pydantic). [One of the fastest Python frameworks available](#performance). Ключевые особенности:
* **Fast to code**: Increase the speed to develop features by about 200% to 300%. * * **Скорость**: Очень высокая производительность, на уровне **NodeJS** и **Go** (благодаря Starlette и Pydantic). [Один из самых быстрых фреймворков Python](#_10).
* **Fewer bugs**: Reduce about 40% of human (developer) induced errors. * * **Быстрота разработки**: Увеличьте скорость разработки примерно на 200–300%. *
* **Intuitive**: Great editor support. <abbr title="also known as auto-complete, autocompletion, IntelliSense">Completion</abbr> everywhere. Less time debugging. * **Меньше ошибок**: Сократите примерно на 40% количество ошибок, вызванных человеком (разработчиком). *
* **Easy**: Designed to be easy to use and learn. Less time reading docs. * **Интуитивно понятный**: Отличная поддержка редактора. <abbr title="также известное как автозаполнение, автодополнение, IntelliSense">Автозавершение</abbr> везде. Меньше времени на отладку.
* **Short**: Minimize code duplication. Multiple features from each parameter declaration. Fewer bugs. * **Лёгкость**: Разработан так, чтобы его было легко использовать и осваивать. Меньше времени на чтение документации.
* **Robust**: Get production-ready code. With automatic interactive documentation. * **Краткость**: Сведите к минимуму дублирование кода. Каждый объявленный параметр - определяет несколько функций. Меньше ошибок.
* **Standards-based**: Based on (and fully compatible with) the open standards for APIs: <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (previously known as Swagger) and <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>. * **Надежность**: Получите готовый к работе код. С автоматической интерактивной документацией.
* **На основе стандартов**: Основан на открытых стандартах API и полностью совместим с ними: <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> (ранее известном как Swagger) и <a href="https://json-schema.org/" class="external-link" target="_blank">JSON Schema</a>.
<small>* estimation based on tests on an internal development team, building production applications.</small> <small>* оценка на основе тестов внутренней команды разработчиков, создающих производственные приложения.</small>
## Sponsors ## Спонсоры
<!-- sponsors --> <!-- sponsors -->
@ -59,66 +57,66 @@ The key features are:
<!-- /sponsors --> <!-- /sponsors -->
<a href="https://fastapi.tiangolo.com/fastapi-people/#sponsors" class="external-link" target="_blank">Other sponsors</a> <a href="https://fastapi.tiangolo.com/fastapi-people/#sponsors" class="external-link" target="_blank">Другие спонсоры</a>
## Opinions ## Отзывы
"_[...] I'm using **FastAPI** a ton these days. [...] I'm actually planning to use it for all of my team's **ML services at Microsoft**. Some of them are getting integrated into the core **Windows** product and some **Office** products._" "_В последнее время я много где использую **FastAPI**. [...] На самом деле я планирую использовать его для всех **сервисов машинного обучения моей команды в Microsoft**. Некоторые из них интегрируются в основной продукт **Windows**, а некоторые — в продукты **Office**._"
<div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/tiangolo/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Kabir Khan - <strong>Microsoft</strong> <a href="https://github.com/tiangolo/fastapi/pull/26" target="_blank"><small>(ref)</small></a></div>
--- ---
"_We adopted the **FastAPI** library to spawn a **REST** server that can be queried to obtain **predictions**. [for Ludwig]_" "_Мы использовали библиотеку **FastAPI** для создания сервера **REST**, к которому можно делать запросы для получения **прогнозов**. [для Ludwig]_"
<div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Piero Molino, Yaroslav Dudin, and Sai Sumanth Miryala - <strong>Uber</strong> <a href="https://eng.uber.com/ludwig-v0-2/" target="_blank"><small>(ref)</small></a></div>
--- ---
"_**Netflix** is pleased to announce the open-source release of our **crisis management** orchestration framework: **Dispatch**! [built with **FastAPI**]_" "_**Netflix** рада объявить о выпуске опенсорсного фреймворка для оркестровки **антикризисного управления**: **Dispatch**! [создана с помощью **FastAPI**]_"
<div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Kevin Glisson, Marc Vilanova, Forest Monsen - <strong>Netflix</strong> <a href="https://netflixtechblog.com/introducing-dispatch-da4b8a2a8072" target="_blank"><small>(ref)</small></a></div>
--- ---
"_I’m over the moon excited about **FastAPI**. It’s so fun!_" "_Я в полном восторге от **FastAPI**. Это так весело!_"
<div style="text-align: right; margin-right: 10%;">Brian Okken - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a> podcast host</strong> <a href="https://twitter.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Brian Okken - <strong><a href="https://pythonbytes.fm/episodes/show/123/time-to-right-the-py-wrongs?time_in_sec=855" target="_blank">Python Bytes</a> podcast host</strong> <a href="https://twitter.com/brianokken/status/1112220079972728832" target="_blank"><small>(ref)</small></a></div>
--- ---
"_Honestly, what you've built looks super solid and polished. In many ways, it's what I wanted **Hug** to be - it's really inspiring to see someone build that._" "_Честно говоря, то, что вы создали, выглядит очень солидно и отполировано. Во многих смыслах я хотел, чтобы **Hug** был именно таким — это действительно вдохновляет, когда кто-то создаёт такое._"
<div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong><a href="https://www.hug.rest/" target="_blank">Hug</a> creator</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Timothy Crosley - <strong><a href="https://www.hug.rest/" target="_blank">Hug</a> creator</strong> <a href="https://news.ycombinator.com/item?id=19455465" target="_blank"><small>(ref)</small></a></div>
--- ---
"_If you're looking to learn one **modern framework** for building REST APIs, check out **FastAPI** [...] It's fast, easy to use and easy to learn [...]_" "_Если вы хотите изучить какой-нибудь **современный фреймворк** для создания REST API, ознакомьтесь с **FastAPI** [...] Он быстрый, лёгкий и простой в изучении [...]_"
"_We've switched over to **FastAPI** for our **APIs** [...] I think you'll like it [...]_" "_Мы перешли на **FastAPI** для наших **API** [...] Я думаю, вам тоже понравится [...]_"
<div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> founders - <a href="https://spacy.io" target="_blank">spaCy</a> creators</strong> <a href="https://twitter.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://twitter.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div> <div style="text-align: right; margin-right: 10%;">Ines Montani - Matthew Honnibal - <strong><a href="https://explosion.ai" target="_blank">Explosion AI</a> founders - <a href="https://spacy.io" target="_blank">spaCy</a> creators</strong> <a href="https://twitter.com/_inesmontani/status/1144173225322143744" target="_blank"><small>(ref)</small></a> - <a href="https://twitter.com/honnibal/status/1144031421859655680" target="_blank"><small>(ref)</small></a></div>
--- ---
## **Typer**, the FastAPI of CLIs ## **Typer**, интерфейс командной строки для FastAPI
<a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a> <a href="https://typer.tiangolo.com" target="_blank"><img src="https://typer.tiangolo.com/img/logo-margin/logo-margin-vector.svg" style="width: 20%;"></a>
If you are building a <abbr title="Command Line Interface">CLI</abbr> app to be used in the terminal instead of a web API, check out <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>. Если вы создаете приложение <abbr title="Интерфейс командной строки">CLI</abbr> для использования в терминале вместо веб-API, ознакомьтесь с <a href="https://typer.tiangolo.com/" class="external-link" target="_blank">**Typer**</a>.
**Typer** is FastAPI's little sibling. And it's intended to be the **FastAPI of CLIs**. ⌨️ 🚀 **Typer** — младший брат FastAPI. И он предназначен для использования в качестве **интерфейса командной строки для FastAPI**. ⌨️ 🚀
## Requirements ## Зависимости
Python 3.6+ Python 3.6+
FastAPI stands on the shoulders of giants: FastAPI стоит на плечах гигантов:
* <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> for the web parts. * <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a> для части связанной с вебом.
* <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> for the data parts. * <a href="https://pydantic-docs.helpmanual.io/" class="external-link" target="_blank">Pydantic</a> для части связанной с данными.
## Installation ## Установка
<div class="termy"> <div class="termy">
@ -130,7 +128,7 @@ $ pip install fastapi
</div> </div>
You will also need an ASGI server, for production such as <a href="https://www.uvicorn.org" class="external-link" target="_blank">Uvicorn</a> or <a href="https://gitlab.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>. Вам также понадобится сервер ASGI для производства, такой как <a href="https://www.uvicorn.org" class="external-link" target="_blank">Uvicorn</a> или <a href="https://gitlab.com/pgjones/hypercorn" class="external-link" target="_blank">Hypercorn</a>.
<div class="termy"> <div class="termy">
@ -142,11 +140,11 @@ $ pip install "uvicorn[standard]"
</div> </div>
## Example ## Пример
### Create it ### Создание
* Create a file `main.py` with: * Создайте файл `main.py` со следующим содержимым:
```Python ```Python
from typing import Union from typing import Union
@ -167,9 +165,9 @@ def read_item(item_id: int, q: Union[str, None] = None):
``` ```
<details markdown="1"> <details markdown="1">
<summary>Or use <code>async def</code>...</summary> <summary>Или используйте <code>async def</code>...</summary>
If your code uses `async` / `await`, use `async def`: Если ваш код использует `async` / `await`, используйте `async def`:
```Python hl_lines="9 14" ```Python hl_lines="9 14"
from typing import Union from typing import Union
@ -189,15 +187,15 @@ async def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q} return {"item_id": item_id, "q": q}
``` ```
**Note**: **Примечание**:
If you don't know, check the _"In a hurry?"_ section about <a href="https://fastapi.tiangolo.com/async/#in-a-hurry" target="_blank">`async` and `await` in the docs</a>. Если вы не знаете, проверьте раздел _"Торопитесь?"_ <a href="https://fastapi.tiangolo.com/async/#in-a-hurry" target="_blank">в документации об `async` и `await`</a>.
</details> </details>
### Run it ### Запуск
Run the server with: Запустите сервер с помощью:
<div class="termy"> <div class="termy">
@ -214,54 +212,54 @@ INFO: Application startup complete.
</div> </div>
<details markdown="1"> <details markdown="1">
<summary>About the command <code>uvicorn main:app --reload</code>...</summary> <summary>О команде <code>uvicorn main:app --reload</code>...</summary>
The command `uvicorn main:app` refers to: Команда `uvicorn main:app` относится к:
* `main`: the file `main.py` (the Python "module"). * `main`: файл `main.py` (модуль Python).
* `app`: the object created inside of `main.py` with the line `app = FastAPI()`. * `app`: объект, созданный внутри `main.py` с помощью строки `app = FastAPI()`.
* `--reload`: make the server restart after code changes. Only do this for development. * `--reload`: перезапуск сервера после изменения кода. Делайте это только во время разработки.
</details> </details>
### Check it ### Проверка
Open your browser at <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>. Откройте браузер на <a href="http://127.0.0.1:8000/items/5?q=somequery" class="external-link" target="_blank">http://127.0.0.1:8000/items/5?q=somequery</a>.
You will see the JSON response as: Вы увидите следующий JSON ответ:
```JSON ```JSON
{"item_id": 5, "q": "somequery"} {"item_id": 5, "q": "somequery"}
``` ```
You already created an API that: Вы уже создали API, который:
* Receives HTTP requests in the _paths_ `/` and `/items/{item_id}`. * Получает HTTP-запросы по _путям_ `/` и `/items/{item_id}`.
* Both _paths_ take `GET` <em>operations</em> (also known as HTTP _methods_). * И первый и второй _путь_ используют `GET` <em>операции</em> (также известные как HTTP _методы_).
* The _path_ `/items/{item_id}` has a _path parameter_ `item_id` that should be an `int`. * _путь_ `/items/{item_id}` имеет _параметр пути_ `item_id`, который должен быть `int`.
* The _path_ `/items/{item_id}` has an optional `str` _query parameter_ `q`. * _путь_ `/items/{item_id}` имеет необязательный `str` _параметр запроса_ `q`.
### Interactive API docs ### Интерактивная документация по API
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>. Перейдите на <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
You will see the automatic interactive API documentation (provided by <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>): Вы увидите автоматическую интерактивную документацию API (предоставленную <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>):
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png) ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-01-swagger-ui-simple.png)
### Alternative API docs ### Альтернативная документация по API
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>. А теперь перейдите на <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
You will see the alternative automatic documentation (provided by <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>): Вы увидите альтернативную автоматическую документацию (предоставленную <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>):
![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png) ![ReDoc](https://fastapi.tiangolo.com/img/index/index-02-redoc-simple.png)
## Example upgrade ## Пример обновления
Now modify the file `main.py` to receive a body from a `PUT` request. Теперь измените файл `main.py`, чтобы получить тело ответа из `PUT` запроса.
Declare the body using standard Python types, thanks to Pydantic. Объявите тело, используя стандартную типизацию Python, спасибо Pydantic.
```Python hl_lines="4 9-12 25-27" ```Python hl_lines="4 9-12 25-27"
from typing import Union from typing import Union
@ -293,174 +291,173 @@ def update_item(item_id: int, item: Item):
return {"item_name": item.name, "item_id": item_id} return {"item_name": item.name, "item_id": item_id}
``` ```
The server should reload automatically (because you added `--reload` to the `uvicorn` command above). Сервер должен перезагрузиться автоматически (потому что вы добавили `--reload` к команде `uvicorn` выше).
### Interactive API docs upgrade ### Интерактивное обновление документации API
Now go to <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>. Перейдите на <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
* The interactive API documentation will be automatically updated, including the new body: * Интерактивная документация API будет автоматически обновляться, включая новое тело:
![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png) ![Swagger UI](https://fastapi.tiangolo.com/img/index/index-03-swagger-02.png)
* Click on the button "Try it out", it allows you to fill the parameters and directly interact with the API: * Нажмите на кнопку "Try it out", это позволит вам заполнить параметры и напрямую взаимодействовать с API:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png) ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-04-swagger-03.png)
* Then click on the "Execute" button, the user interface will communicate with your API, send the parameters, get the results and show them on the screen: * Затем нажмите кнопку "Execute", пользовательский интерфейс свяжется с вашим API, отправит параметры, получит результаты и отобразит их на экране:
![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png) ![Swagger UI interaction](https://fastapi.tiangolo.com/img/index/index-05-swagger-04.png)
### Alternative API docs upgrade ### Альтернативное обновление документации API
And now, go to <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>. А теперь перейдите на <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
* The alternative documentation will also reflect the new query parameter and body: * Альтернативная документация также будет отражать новый параметр и тело запроса:
![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png) ![ReDoc](https://fastapi.tiangolo.com/img/index/index-06-redoc-02.png)
### Recap ### Подведём итоги
In summary, you declare **once** the types of parameters, body, etc. as function parameters. Таким образом, вы объявляете **один раз** типы параметров, тело и т. д. в качестве параметров функции.
You do that with standard modern Python types. Вы делаете это испльзуя стандартную современную типизацию Python.
You don't have to learn a new syntax, the methods or classes of a specific library, etc. Вам не нужно изучать новый синтаксис, методы или классы конкретной библиотеки и т. д.
Just standard **Python 3.6+**. Только стандартный **Python 3.6+**.
For example, for an `int`: Например, для `int`:
```Python ```Python
item_id: int item_id: int
``` ```
or for a more complex `Item` model: или для более сложной модели `Item`:
```Python ```Python
item: Item item: Item
``` ```
...and with that single declaration you get: ... и с этим единственным объявлением вы получаете:
* Editor support, including: * Поддержка редактора, в том числе:
* Completion. * Автозавершение.
* Type checks. * Проверка типов.
* Validation of data: * Валидация данных:
* Automatic and clear errors when the data is invalid. * Автоматические и четкие ошибки, когда данные недействительны.
* Validation even for deeply nested JSON objects. * Проверка даже для глубоко вложенных объектов JSON.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of input data: coming from the network to Python data and types. Reading from: * <abbr title="также известный как: сериализация, синтаксический анализ, маршалинг">Преобразование</abbr> входных данных: поступающие из сети в объекты Python с соблюдением типов. Чтение из:
* JSON. * JSON.
* Path parameters. * Параметров пути.
* Query parameters. * Параметров запроса.
* Cookies. * Cookies.
* Headers. * Заголовков.
* Forms. * Форм.
* Files. * Файлов.
* <abbr title="also known as: serialization, parsing, marshalling">Conversion</abbr> of output data: converting from Python data and types to network data (as JSON): * <abbr title="также известный как: сериализация, синтаксический анализ, маршалинг">Преобразование</abbr> выходных данных: преобразование объектов Python в данные передаваемые по сети интернет (такие как JSON):
* Convert Python types (`str`, `int`, `float`, `bool`, `list`, etc). * Преобразование типов Python (`str`, `int`, `float`, `bool`, `list`, и т.д.).
* `datetime` objects. * Объекты `datetime`.
* `UUID` objects. * Объекты `UUID`.
* Database models. * Модели баз данных.
* ...and many more. * ...и многое другое.
* Automatic interactive API documentation, including 2 alternative user interfaces: * Автоматическая интерактивная документация по API, включая 2 альтернативных пользовательских интерфейса:
* Swagger UI. * Swagger UI.
* ReDoc. * ReDoc.
--- ---
Coming back to the previous code example, **FastAPI** will: Возвращаясь к предыдущему примеру кода, **FastAPI** будет:
* Validate that there is an `item_id` in the path for `GET` and `PUT` requests. * Проверять наличие `item_id` в пути для запросов `GET` и `PUT`.
* Validate that the `item_id` is of type `int` for `GET` and `PUT` requests. * Проверять, что `item_id` имеет тип `int` для запросов `GET` и `PUT`.
* If it is not, the client will see a useful, clear error. * Если это не так, клиент увидит полезную чёткую ошибку.
* Check if there is an optional query parameter named `q` (as in `http://127.0.0.1:8000/items/foo?q=somequery`) for `GET` requests. * Проверять, есть ли необязательный параметр запроса с именем `q` (например, `http://127.0.0.1:8000/items/foo?q=somequery`) для `GET` запросов.
* As the `q` parameter is declared with `= None`, it is optional. * Поскольку параметр `q` объявлен с `= None`, он является необязательным.
* Without the `None` it would be required (as is the body in the case with `PUT`). * Без `None` он был бы необходим (как тело в случае с `PUT`).
* For `PUT` requests to `/items/{item_id}`, Read the body as JSON: * Для `PUT` запросов к `/items/{item_id}` читать тело как JSON:
* Check that it has a required attribute `name` that should be a `str`. * Проверять, что у него есть обязательный атрибут `name`, который должен быть `str`.
* Check that it has a required attribute `price` that has to be a `float`. * Проверять, что у него есть обязательный атрибут `price`, который должен быть `float`.
* Check that it has an optional attribute `is_offer`, that should be a `bool`, if present. * Проверять, что у него есть необязательный атрибут `is_offer`, который должен быть `bool`, если он присутствует.
* All this would also work for deeply nested JSON objects. * Все это также будет работать для глубоко вложенных объектов JSON.
* Convert from and to JSON automatically. * Преобразовывать из и в JSON автоматически.
* Document everything with OpenAPI, that can be used by: * Документировать с помощью OpenAPI все, что может быть использовано:
* Interactive documentation systems. * Системы интерактивной документации.
* Automatic client code generation systems, for many languages. * Системы автоматической генерации клиентского кода для многих языков.
* Provide 2 interactive documentation web interfaces directly. * Обеспечит 2 интерактивных веб-интерфейса документации напрямую.
--- ---
We just scratched the surface, but you already get the idea of how it all works. Мы только немного копнули поверхность, но вы уже поняли, как все это работает.
Try changing the line with: Попробуйте изменить строку с помощью:
```Python ```Python
return {"item_name": item.name, "item_id": item_id} return {"item_name": item.name, "item_id": item_id}
``` ```
...from: ...из:
```Python ```Python
... "item_name": item.name ... ... "item_name": item.name ...
``` ```
...to: ...в:
```Python ```Python
... "item_price": item.price ... ... "item_price": item.price ...
``` ```
...and see how your editor will auto-complete the attributes and know their types: ... и посмотрите, как ваш редактор будет автоматически заполнять атрибуты и узнавать их типы:
![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png) ![editor support](https://fastapi.tiangolo.com/img/vscode-completion.png)
For a more complete example including more features, see the <a href="https://fastapi.tiangolo.com/tutorial/">Tutorial - User Guide</a>. Более полный пример с дополнительными функциями см. в <a href="https://fastapi.tiangolo.com/tutorial/">Учебное руководство - Руководство пользователя</a>.
**Spoiler alert**: the tutorial - user guide includes: **Осторожно, спойлер**: руководство пользователя включает в себя:
* Declaration of **parameters** from other different places as: **headers**, **cookies**, **form fields** and **files**. * Объявление **параметров** из других мест, таких как: **заголовки**, **cookies**, **поля формы** и **файлы**.
* How to set **validation constraints** as `maximum_length` or `regex`. * Как установить **ограничительные проверки** такие как `maximum_length` или `regex`.
* A very powerful and easy to use **<abbr title="also known as components, resources, providers, services, injectables">Dependency Injection</abbr>** system. * Очень мощная и простая в использовании система **<abbr title="также известная как компоненты, ресурсы, провайдеры, сервисы, инъекции">внедрения зависимостей</abbr>**.
* Security and authentication, including support for **OAuth2** with **JWT tokens** and **HTTP Basic** auth. * Безопасность и аутентификация, включая поддержку **OAuth2** с **токенами JWT** и **HTTP Basic** аутентификацию.
* More advanced (but equally easy) techniques for declaring **deeply nested JSON models** (thanks to Pydantic). * Более продвинутые (но столь же простые) методы объявления **глубоко вложенных моделей JSON** (спасибо Pydantic).
* Many extra features (thanks to Starlette) as: * **GraphQL** интеграция с <a href="https://strawberry.rocks" class="external-link" target="_blank">Strawberry</a> и другими библиотеками.
* **WebSockets** * Множество дополнительных функций (благодаря Starlette), таких как:
* **GraphQL** * **Веб-сокеты**
* extremely easy tests based on `requests` and `pytest` * очень простые тесты на основе `requests` и `pytest`
* **CORS** * **CORS**
* **Cookie Sessions** * **Cookie сеансы(сессии)**
* ...and more. * ...и многое другое.
## Performance ## Производительность
Independent TechEmpower benchmarks show **FastAPI** applications running under Uvicorn as <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">one of the fastest Python frameworks available</a>, only below Starlette and Uvicorn themselves (used internally by FastAPI). (*) Независимые тесты TechEmpower показывают приложения **FastAPI**, работающие под управлением Uvicorn, как <a href="https://www.techempower.com/benchmarks/#section=test&runid=7464e520-0dc2-473d-bd34-dbdfd7e85911&hw=ph&test=query&l=zijzen-7" class="external-link" target="_blank">один из самых быстрых доступных фреймворков Python</a>, уступающий только самим Starlette и Uvicorn (используемых внутри FastAPI). (*)
To understand more about it, see the section <a href="https://fastapi.tiangolo.com/benchmarks/" class="internal-link" target="_blank">Benchmarks</a>. Чтобы узнать больше об этом, см. раздел <a href="https://fastapi.tiangolo.com/benchmarks/" class="internal-link" target="_blank">Тесты производительности</a>.
## Optional Dependencies ## Необязательные зависимости
Used by Pydantic: Используется Pydantic:
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - for faster JSON <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>. * <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - для более быстрого JSON <abbr title="преобразования строки, полученной из HTTP-запроса, в данные Python">"парсинга"</abbr>.
* <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email_validator</code></a> - for email validation. * <a href="https://github.com/JoshData/python-email-validator" target="_blank"><code>email_validator</code></a> - для проверки электронной почты.
Used by Starlette: Используется Starlette:
* <a href="https://requests.readthedocs.io" target="_blank"><code>requests</code></a> - Required if you want to use the `TestClient`. * <a href="https://requests.readthedocs.io" target="_blank"><code>requests</code></a> - Обязательно, если вы хотите использовать `TestClient`.
* <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - Required if you want to use the default template configuration. * <a href="https://jinja.palletsprojects.com" target="_blank"><code>jinja2</code></a> - Обязательно, если вы хотите использовать конфигурацию шаблона по умолчанию.
* <a href="https://andrew-d.github.io/python-multipart/" target="_blank"><code>python-multipart</code></a> - Required if you want to support form <abbr title="converting the string that comes from an HTTP request into Python data">"parsing"</abbr>, with `request.form()`. * <a href="https://andrew-d.github.io/python-multipart/" target="_blank"><code>python-multipart</code></a> - Обязательно, если вы хотите поддерживать форму <abbr title="преобразование строки, полученной из HTTP-запроса, в данные Python">"парсинга"</abbr> с помощью `request.form()`.
* <a href="https://pythonhosted.org/itsdangerous/" target="_blank"><code>itsdangerous</code></a> - Required for `SessionMiddleware` support. * <a href="https://pythonhosted.org/itsdangerous/" target="_blank"><code>itsdangerous</code></a> - Обязательно, для поддержки `SessionMiddleware`.
* <a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank"><code>pyyaml</code></a> - Required for Starlette's `SchemaGenerator` support (you probably don't need it with FastAPI). * <a href="https://pyyaml.org/wiki/PyYAMLDocumentation" target="_blank"><code>pyyaml</code></a> - Обязательно, для поддержки `SchemaGenerator` Starlette (возможно, вам это не нужно с FastAPI).
* <a href="https://graphene-python.org/" target="_blank"><code>graphene</code></a> - Required for `GraphQLApp` support. * <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - Обязательно, если вы хотите использовать `UJSONResponse`.
* <a href="https://github.com/esnme/ultrajson" target="_blank"><code>ujson</code></a> - Required if you want to use `UJSONResponse`.
Used by FastAPI / Starlette: Используется FastAPI / Starlette:
* <a href="https://www.uvicorn.org" target="_blank"><code>uvicorn</code></a> - for the server that loads and serves your application. * <a href="https://www.uvicorn.org" target="_blank"><code>uvicorn</code></a> - сервер, который загружает и обслуживает ваше приложение.
* <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - Required if you want to use `ORJSONResponse`. * <a href="https://github.com/ijl/orjson" target="_blank"><code>orjson</code></a> - Обязательно, если вы хотите использовать `ORJSONResponse`.
You can install all of these with `pip install fastapi[all]`. Вы можете установить все это с помощью `pip install "fastapi[all]"`.
## License ## Лицензия
This project is licensed under the terms of the MIT license. Этот проект распространяется на условиях лицензии MIT.

Loading…
Cancel
Save