Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

🌐 Add Russian translation for docs/tutorial/first-steps.md #3562

Closed
wants to merge 10 commits into from
333 changes: 333 additions & 0 deletions docs/ru/docs/tutorial/first-steps.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,333 @@
# ΠŸΠ΅Ρ€Π²Ρ‹Π΅ шаги

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ°Ρ рСализация прилоТСния Π½Π° FastAPI выглядит Ρ‚Π°ΠΊ:

```Python
{!../../../docs_src/first_steps/tutorial001.py!}
```

Π‘ΠΊΠΎΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ этот тСкст Π² Ρ„Π°ΠΉΠ» `main.py`.

ЗапуститС сСрвСр:

<div class="termy">

```console
$ uvicorn main:app --reload

<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
<span style="color: green;">INFO</span>: Started reloader process [28720]
<span style="color: green;">INFO</span>: Started server process [28722]
<span style="color: green;">INFO</span>: Waiting for application startup.
<span style="color: green;">INFO</span>: Application startup complete.
```

</div>

!!! note "ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅"
Π’ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ `uvicorn main:app`:

* `main`: это Ρ„Π°ΠΉΠ» `main.py` ("ΠΌΠΎΠ΄ΡƒΠ»ΡŒ" Python).
* `app`: это ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, созданный Π²Π½ΡƒΡ‚Ρ€ΠΈ `main.py` Π² строкС `app = FastAPI()`.
* `--reload`: заставляСт сСрвСр ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’ Π²Ρ‹Π²ΠΎΠ΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ строка, Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅:

```hl_lines="4"
INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```

Π­Ρ‚ΠΎ строка ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ URL, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ доступно ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π° вашСй локальной машинС.

## ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

ΠžΡ‚ΠΊΡ€ΠΎΠΉΡ‚Π΅ Π² вашСм Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ адрСс <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ JSON-ΠΎΡ‚Π²Π΅Ρ‚:

```JSON
{"message": "Hello World"}
```

## Π˜Π½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Π°Ρ докумСнтация

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</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)

## ΠΠ»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Π°Ρ докумСнтация

А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.

Π’Ρ‹ ΡƒΠ²ΠΈΠ΄ΠΈΡ‚Π΅ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ автоматичСски ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ API (ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ <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)

## OpenAPI

**FastAPI** Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ "схСму" ΠΏΠΎ всСму Π²Π°ΡˆΠ΅ΠΌΡƒ API с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ **OpenAPI** стандарта.

### Π‘Ρ…Π΅ΠΌΠ°

Π‘Ρ…Π΅ΠΌΠ° - это ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ описаниС Ρ‡Π΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ. НС ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚, Π° просто абстрактноС описаниС.

### Π‘Ρ…Π΅ΠΌΠ° API

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> - это спСцификация, которая Π΄ΠΈΠΊΡ‚ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ схСму вашСго API.

Π­Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ схСмы Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΡƒΡ‚ΠΈ вашСго API, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ΠΈ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°ΡŽΡ‚, ΠΈ Ρ‚.Π΄.

### Π‘Ρ…Π΅ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ…

Π’Π΅Ρ€ΠΌΠΈΠ½ "схСма" ΠΌΠΎΠΆΠ΅Ρ‚ относится ΠΈ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.

Π’ этом случаС ΠΎΠ½Π° описываСт Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ JSON ΠΈ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹, ΠΈ Ρ‚.ΠΏ.

### OpenAPI ΠΈ JSON Schema

OpenAPI опрСдСляСт схСму API вашСго прилоТСния. И эта схСма Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ опрСдСлСния (ΠΈΠ»ΠΈ "схСмы") Π΄Π°Π½Π½Ρ‹Ρ…, отправляСмых ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹Ρ… вашим API с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ **JSON Schema**, стандарта для схСм Π΄Π°Π½Π½Ρ‹Ρ… JSON.

### ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ `openapi.json`

Если Π²Π°ΠΌ интСрСсно, ΠΊΠ°ΠΊ выглядит "сырая" OpenAPI схСма, FastAPI автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ схСму JSON с описаниСм всСго вашСго APIю

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Ρ‘ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΠΎ адрСсу: <a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a>.

На страницС отобразится информация Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰Π°ΡΡΡ Π½Π°:

```JSON
{
"openapi": "3.0.2",
"info": {
"title": "FastAPI",
"version": "0.1.0"
},
"paths": {
"/items/": {
"get": {
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {



...
```

### Для Ρ‡Π΅Π³ΠΎ Π½ΡƒΠΆΠ΅Π½ OpenAPI

Π‘Ρ…Π΅ΠΌΠ° OpenAPI Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π²ΡƒΡ… систСм ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² поставку.

Π•ΡΡ‚ΡŒ дСсятки Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ², основанных Π½Π° OpenAPI. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π»Π΅Π³ΠΊΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΈΠ· Π½ΠΈΡ… Π² своС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, созданноС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ **FastAPI**.

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΅Ρ‘ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° для клиСнтских ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ с вашим API. НапримСр, интСрфСйсныС, ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅ ΠΈΠ»ΠΈ IoT-прилоТСния.

## РСзюмС, шаг за шагом

### Π¨Π°Π³ 1: ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ `FastAPI`

```Python hl_lines="1"
{!../../../docs_src/first_steps/tutorial001.py!}
```

`FastAPI` - это класс Python, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ всю Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для вашСго API.

!!! note "ВСхничСскиС Π΄Π΅Ρ‚Π°Π»ΠΈ"
Класс `FastAPI` наслСдуСтся Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΠΎΡ‚ `Starlette`.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ρ‡Π΅Ρ€Π΅Π· `FastAPI` Π²Π°ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ доступны ΠΈ всС возмоТности <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a>.

### Π¨Π°Π³ 2: создаСм экзСмпляр `FastAPI`

```Python hl_lines="3"
{!../../../docs_src/first_steps/tutorial001.py!}
```

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ `app` содСрТит экзСмпляр класса `FastAPI`.

Π­Ρ‚ΠΎ основная Ρ‚ΠΎΡ‡ΠΊΠ° взаимодСйствия для создания вашСго API.

Π­Ρ‚ΠΎ Ρ‚ΠΎ самоС `app`, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΌΡ‹ ссылаСмся Π² ΠΊΠΎΠΌΠ°Π½Π΄Π΅ запуска `uvicorn`:

<div class="termy">

```console
$ uvicorn main:app --reload

<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```

</div>

Если Π²Ρ‹ создадитС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

```Python hl_lines="3"
{!../../../docs_src/first_steps/tutorial002.py!}
```

И размСститС этот ΠΊΠΎΠ΄ Π² Ρ„Π°ΠΉΠ»Π΅ `main.py`, Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ слСдуСт ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ запуска `uvicorn`

<div class="termy">

```console
$ uvicorn main:my_awesome_api --reload

<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
```

</div>

### Π¨Π°Π³ 3: создаСм *дСйствиС-ΠΏΡƒΡ‚ΡŒ*

#### ΠŸΡƒΡ‚ΡŒ

"ΠŸΡƒΡ‚ΡŒ" Π² Π΄Π°Π½Π½ΠΎΠΌ случаС ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ Ρ‡Π°ΡΡ‚ΡŒ URL, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΡƒΡŽΡΡ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ `/` (ΠΏΡ€ΠΈΠΌ.ΠΏΠ΅Ρ€.: послС ΠΈΠΌΠ΅Π½ΠΈ хоста).

В.С., для URL:

```
https://example.com/items/foo
```

...ΠΏΡƒΡ‚Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚:

```
/items/foo
```

!!! info "ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅"
"ΠŸΡƒΡ‚ΡŒ" Ρ‚Π°ΠΊΠΆΠ΅ Π΅Ρ‰Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ "эндпоинтом" (endpoint) ΠΈΠ»ΠΈ "ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΎΠΌ" (route).

Π’ процСссС построСния API "ΠΏΡƒΡ‚ΡŒ" - это основной способ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚ΡŒ "ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹" ΠΈ "рСсурсы".

#### ДСйствиС

Под "дСйствиСм" понимаСтся ΠΎΠ΄ΠΈΠ½ ΠΈΠ· "ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²" HTTP.

Один из:

* `POST`
* `GET`
* `PUT`
* `DELETE`

...ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅ экзотичСских:

* `OPTIONS`
* `HEAD`
* `PATCH`
* `TRACE`

Π’ HTTP-ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ с ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ "ΠΏΡƒΡ‚Π΅ΠΌ", ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄ΠΈΠ½ (ΠΈΠ»ΠΈ Π±ΠΎΠ»Π΅Π΅) ΠΈΠ· этих "ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²".

---

Для API ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ эти HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… дСйствий.

ΠžΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ:

* `POST`: для создания Π΄Π°Π½Π½Ρ‹Ρ….
* `GET`: для чтСния Π΄Π°Π½Π½Ρ‹Ρ….
* `PUT`: для обновлСния Π΄Π°Π½Π½Ρ‹Ρ….
* `DELETE`: для удалСния Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² OpenAPI ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· этих HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² называСтся "дСйствиС".

ΠœΡ‹ Ρ‚ΠΎΠΆΠ΅ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… "**дСйствия**".

#### Π—Π°Π΄Π°Π΅ΠΌ *ΠΏΡƒΡ‚ΡŒ-дСйствиС-Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€*

```Python hl_lines="6"
{!../../../docs_src/first_steps/tutorial001.py!}
```

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ `@app.get("/")` сообщаСт **FastAPI**, Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ Π·Π° Π½ΠΈΠΌ функция ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ запросов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅:

* приходят Π½Π° ΠΏΡƒΡ‚ΡŒ `/`
* ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ <abbr title="HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄ GET">дСйствиС <code>get</code></abbr>

!!! info "`@decorator` синтаксис"
Π’Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ `@something` Π² Python называСтся "Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€".

Π’Ρ‹ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚Π΅ Π΅Π³ΠΎ "ΠΏΠΎΠ²Π΅Ρ€Ρ…" Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Как красивая дСкоративная шляпка (Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, ΠΎΡ‚ΡΡŽΠ΄Π° ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½).

Π”Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ Π½ΠΈΠΆΠ΅, ΠΈ Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ с Π½Π΅ΠΉ Π΄Π΅Π»Π°Π΅Ρ‚.

Π’ нашСм случаС, этот Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ **FastAPI**, Ρ‡Ρ‚ΠΎ функция Π½ΠΈΠΆΠ΅ соотвСтствуСт **ΠΏΡƒΡ‚ΠΈ** `/` с **дСйствиСм** `get`.

Π­Ρ‚ΠΎ ΠΈ Π΅ΡΡ‚ΡŒ "**ΠΏΡƒΡ‚ΡŒ-дСйствиС-Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€**".

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия:

* `@app.post()`
* `@app.put()`
* `@app.delete()`

И Π±ΠΎΠ»Π΅Π΅ экзотичСскиС:

* `@app.options()`
* `@app.head()`
* `@app.patch()`
* `@app.trace()`

!!! tip "Π‘ΠΎΠ²Π΅Ρ‚"
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любоС дСйствиС (HTTP-ΠΌΠ΅Ρ‚ΠΎΠ΄), ΠΊΠ°ΠΊ ΠΏΠΎΠΆΠ΅Π»Π°Π΅Ρ‚Π΅.

**FastAPI** Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ.

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ здСсь прСдставлСна ΠΊΠ°ΠΊ руководство, Π° Π½Π΅ ΠΊΠ°ΠΊ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅.

НапримСр, Π² GraphQL ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ всС дСйствия ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ POST.

### Π¨Π°Π³ 4: Π—Π°Π΄Π°Π΅ΠΌ **ΠΏΡƒΡ‚ΡŒ-дСйствиС-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ**

Π’ΠΎΡ‚ наши "**ΠΏΡƒΡ‚ΡŒ-дСйствиС-функция**":

* **ΠΏΡƒΡ‚ΡŒ**: это `/`.
* **дСйствиС**: это `get`.
* **функция**: это функция ΠΏΠΎΠ΄ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ (Π½ΠΈΠΆΠ΅ `@app.get("/")`).

```Python hl_lines="7"
{!../../../docs_src/first_steps/tutorial001.py!}
```

Π­Ρ‚ΠΎ функция Python.

Она Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½Π° **FastAPI**, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ запрос Π½Π° URL `/` с ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ `GET`.

Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это асинхронная (`async`) функция.

---

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π΅Π΅ ΠΊΠ°ΠΊ ΠΎΠ±Ρ‹Ρ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ вмСсто `async def`:
solomein-sv marked this conversation as resolved.
Show resolved Hide resolved

```Python hl_lines="7"
{!../../../docs_src/first_steps/tutorial003.py!}
```

!!! note "ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅"
Если Π²Ρ‹ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅, Π² Ρ‡Π΅ΠΌ Ρ€Π°Π·Π½ΠΈΡ†Π°, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с Ρ€Π°Π·Π΄Π΅Π»ΠΎΠΌ [Async: *"Π’ΠΎΡ€ΠΎΠΏΠΈΡ‚Π΅ΡΡŒ?"*](../async.md#in-a-hurry){.internal-link target=_blank}.

### Π¨Π°Π³ 5: Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌ Π΄Π°Π½Π½Ρ‹Π΅

```Python hl_lines="8"
{!../../../docs_src/first_steps/tutorial001.py!}
```

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ `dict`, `list`, простыС значСния, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ `str`, `int` ΠΈ Ρ‚.ΠΏ.

Π’Π°ΠΊΠΆΠ΅ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ Pydantic (Π²Ρ‹ ΡƒΠ·Π½Π°Π΅Ρ‚Π΅ ΠΎΠ± этом ΠΏΠΎΠ·ΠΆΠ΅).

БущСствуСт мноТСство Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ автоматичСски ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ JSON (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ORM). ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ свои Π»ΡŽΠ±ΠΈΠΌΡ‹Π΅ - скорСС всСго, ΠΎΠ½ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ.

## РСзюмС

* Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ `FastAPI`.
* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ экзСмпляр: `app`.
* ПишСм **ΠΏΡƒΡ‚ΡŒ-дСйствиС-Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€** (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `@app.get("/")`).
* ПишСм **ΠΏΡƒΡ‚ΡŒ-дСйствиС-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ** (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `def root(): ...` Π½ΠΈΠΆΠ΅).
* ЗапускаСм сСрвСр для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `uvicorn main:app --reload`).