mirror of
https://github.com/fastapi/fastapi.git
synced 2026-10-11 14:10:09 -04:00
Co-authored-by: pr-submit[bot] <pr-submit[bot]@users.noreply.github.com> Co-authored-by: Yurii Motov <109919500+YuriiMotov@users.noreply.github.com> Co-authored-by: pr-push[bot] <pr-push[bot]@users.noreply.github.com>
252 lines
14 KiB
Markdown
252 lines
14 KiB
Markdown
# Path Parameters { #path-parameters }
|
|
|
|
рдЖрдк Python format strings рджреНрд╡рд╛рд░рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдорд╛рди syntax рдХреЗ рд╕рд╛рде path "parameters" рдпрд╛ "variables" declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/path_params/tutorial001_py310.py hl[6:7] *}
|
|
|
|
path parameter `item_id` рдХреА value рдЖрдкрдХреЗ function рдХреЛ argument `item_id` рдХреЗ рд░реВрдк рдореЗрдВ pass рдХреА рдЬрд╛рдПрдЧреАред
|
|
|
|
рдЗрд╕рд▓рд┐рдП, рдЕрдЧрд░ рдЖрдк рдпрд╣ example run рдХрд░рддреЗ рд╣реИрдВ рдФрд░ [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ response рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
|
|
|
|
```JSON
|
|
{"item_id":"foo"}
|
|
```
|
|
|
|
## Types рдХреЗ рд╕рд╛рде Path parameters { #path-parameters-with-types }
|
|
|
|
рдЖрдк standard Python type annotations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ function рдореЗрдВ рдХрд┐рд╕реА path parameter рдХрд╛ type declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/path_params/tutorial002_py310.py hl[7] *}
|
|
|
|
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, `item_id` рдХреЛ `int` declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдЗрд╕рд╕реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ function рдХреЗ рдЕрдВрджрд░ editor support рдорд┐рд▓реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ error checks, completion рдЖрджрд┐ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
|
|
|
|
///
|
|
|
|
## Data <dfn title="рдЗрд╕рдХреЗ рдирд╛рдо рд╕реЗ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ: serialization, parsing, marshalling">conversion</dfn> { #data-conversion }
|
|
|
|
рдЕрдЧрд░ рдЖрдк рдпрд╣ example run рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ browser рдореЗрдВ [http://127.0.0.1:8000/items/3](http://127.0.0.1:8000/items/3) рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ response рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
|
|
|
|
```JSON
|
|
{"item_id":3}
|
|
```
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЖрдкрдХреЗ function рдиреЗ рдЬреЛ value рдкреНрд░рд╛рдкреНрдд рдХреА (рдФрд░ return рдХреА) рд╡рд╣ `3` рд╣реИ, Python `int` рдХреЗ рд░реВрдк рдореЗрдВ, рди рдХрд┐ string `"3"`ред
|
|
|
|
рддреЛ, рдЙрд╕ type declaration рдХреЗ рд╕рд╛рде, **FastAPI** рдЖрдкрдХреЛ automatic request <dfn title="HTTP request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА string рдХреЛ Python data рдореЗрдВ рдмрджрд▓рдирд╛">"parsing"</dfn> рджреЗрддрд╛ рд╣реИред
|
|
|
|
///
|
|
|
|
## Data validation { #data-validation }
|
|
|
|
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк browser рдореЗрдВ [http://127.0.0.1:8000/items/foo](http://127.0.0.1:8000/items/foo) рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ рдЕрдЪреНрдЫрд╛ HTTP error рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
|
|
|
|
```JSON
|
|
{
|
|
"detail": [
|
|
{
|
|
"type": "int_parsing",
|
|
"loc": [
|
|
"path",
|
|
"item_id"
|
|
],
|
|
"msg": "Input should be a valid integer, unable to parse string as an integer",
|
|
"input": "foo"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
рдХреНрдпреЛрдВрдХрд┐ path parameter `item_id` рдХреА value `"foo"` рдереА, рдЬреЛ рдХрд┐ `int` рдирд╣реАрдВ рд╣реИред
|
|
|
|
рдЕрдЧрд░ рдЖрдкрдиреЗ `int` рдХреЗ рдмрдЬрд╛рдп `float` рджрд┐рдпрд╛, рддреЛ рднреА рд╡рд╣реА error рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдЬреИрд╕реЗ: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рддреЛ, рдЙрд╕реА Python type declaration рдХреЗ рд╕рд╛рде, **FastAPI** рдЖрдкрдХреЛ data validation рджреЗрддрд╛ рд╣реИред
|
|
|
|
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ error рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ validation рдХрд┐рд╕ рдЬрдЧрд╣ pass рдирд╣реАрдВ рд╣реБрдЖред
|
|
|
|
рдпрд╣ рдЖрдкрдХреЗ API рдХреЗ рд╕рд╛рде interact рдХрд░рдиреЗ рд╡рд╛рд▓реЗ code рдХреЛ develop рдФрд░ debug рдХрд░рддреЗ рд╕рдордп рдмреЗрд╣рдж рдорджрджрдЧрд╛рд░ рд╣реЛрддрд╛ рд╣реИред
|
|
|
|
///
|
|
|
|
## Documentation { #documentation }
|
|
|
|
рдФрд░ рдЬрдм рдЖрдк рдЕрдкрдиреЗ browser рдореЗрдВ [http://127.0.0.1:8000/docs](http://127.0.0.1:8000/docs) рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдРрд╕рд╛ automatic, interactive, API documentation рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
|
|
|
|
<img src="/img/tutorial/path-params/image01.png">
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдлрд┐рд░ рд╕реЗ, рдмрд╕ рдЙрд╕реА Python type declaration рдХреЗ рд╕рд╛рде, **FastAPI** рдЖрдкрдХреЛ automatic, interactive documentation рджреЗрддрд╛ рд╣реИ (Swagger UI рдХреЛ integrate рдХрд░рддреЗ рд╣реБрдП)ред
|
|
|
|
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ path parameter рдХреЛ integer рдХреЗ рд░реВрдк рдореЗрдВ declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
|
|
|
|
///
|
|
|
|
## Standard-рдЖрдзрд╛рд░рд┐рдд рд▓рд╛рдн, рд╡реИрдХрд▓реНрдкрд┐рдХ documentation { #standards-based-benefits-alternative-documentation }
|
|
|
|
рдФрд░ рдХреНрдпреЛрдВрдХрд┐ generate рдХрд┐рдпрд╛ рдЧрдпрд╛ schema [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/3.1.0.md) standard рд╕реЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ compatible tools рд╣реИрдВред
|
|
|
|
рдЗрд╕реА рд╡рдЬрд╣ рд╕реЗ, **FastAPI** рд╕реНрд╡рдпрдВ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ API documentation рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (ReDoc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП), рдЬрд┐рд╕реЗ рдЖрдк [http://127.0.0.1:8000/redoc](http://127.0.0.1:8000/redoc) рдкрд░ access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
<img src="/img/tutorial/path-params/image02.png">
|
|
|
|
рдЗрд╕реА рддрд░рд╣, рдХрдИ compatible tools рд╣реИрдВред рдЗрдирдореЗрдВ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП code generation tools рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
|
|
|
|
## Pydantic { #pydantic }
|
|
|
|
рд╕рд╛рд░рд╛ data validation рдЕрдВрджрд░реВрдиреА рддреМрд░ рдкрд░ [Pydantic](https://pydantic.dev/docs/) рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд╕рднреА рд▓рд╛рдн рдорд┐рд▓рддреЗ рд╣реИрдВред рдФрд░ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЕрдЪреНрдЫреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рд╣реИрдВред
|
|
|
|
рдЖрдк `str`, `float`, `bool` рдФрд░ рдХрдИ рдЕрдиреНрдп рдЬрдЯрд┐рд▓ data types рдХреЗ рд╕рд╛рде рд╡рд╣реА type declarations рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рдЗрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ tutorial рдХреЗ рдЕрдЧрд▓реЗ chapters рдореЗрдВ explore рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
|
|
|
|
## рдХреНрд░рдо рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ { #order-matters }
|
|
|
|
*path operations* рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ рдЬрд╣рд╛рдБ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ fixed path рд╣реЛред
|
|
|
|
рдЬреИрд╕реЗ `/users/me`, рдорд╛рди рд▓реЗрдВ рдХрд┐ рдпрд╣ current user рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ data рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред
|
|
|
|
рдФрд░ рдлрд┐рд░ рдЖрдкрдХреЗ рдкрд╛рд╕ `/users/{user_id}` path рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдХрд┐рд╕реА specific user рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд┐рд╕реА user ID рд╕реЗ data рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
|
|
|
|
рдХреНрдпреЛрдВрдХрд┐ *path operations* рдХрд╛ evaluation рдХреНрд░рдо рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ `/users/me` рдХреЗ рд▓рд┐рдП path, `/users/{user_id}` рд╡рд╛рд▓реЗ path рд╕реЗ рдкрд╣рд▓реЗ declare рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛ:
|
|
|
|
{* ../../docs_src/path_params/tutorial003_py310.py hl[6,11] *}
|
|
|
|
рдЕрдиреНрдпрдерд╛, `/users/{user_id}` рдХреЗ рд▓рд┐рдП path `/users/me` рд╕реЗ рднреА match рдХрд░реЗрдЧрд╛, рдпрд╣ "рд╕реЛрдЪрддреЗ рд╣реБрдП" рдХрд┐ рдЙрд╕реЗ `user_id` parameter рдорд┐рд▓ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдХреА value `"me"` рд╣реИред
|
|
|
|
рдЗрд╕реА рддрд░рд╣, рдЖрдк рдХрд┐рд╕реА path operation рдХреЛ рдлрд┐рд░ рд╕реЗ define рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ:
|
|
|
|
{* ../../docs_src/path_params/tutorial003b_py310.py hl[6,11] *}
|
|
|
|
рдкрд╣рд▓рд╛ рд╡рд╛рд▓рд╛ рд╣рдореЗрд╢рд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ path рдкрд╣рд▓реЗ match рдХрд░рддрд╛ рд╣реИред
|
|
|
|
## рдкрд╣рд▓реЗ рд╕реЗ рддрдп values { #predefined-values }
|
|
|
|
рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕рд╛ *path operation* рд╣реИ рдЬреЛ рдПрдХ *path parameter* рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдВрднрд╡ valid *path parameter* values рдкрд╣рд▓реЗ рд╕реЗ рддрдп рд╣реЛрдВ, рддреЛ рдЖрдк standard Python <abbr title="Enumeration">`Enum`</abbr> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
### рдПрдХ `Enum` class рдмрдирд╛рдПрдВ { #create-an-enum-class }
|
|
|
|
`Enum` import рдХрд░реЗрдВ рдФрд░ рдПрдХ sub-class рдмрдирд╛рдПрдВ рдЬреЛ `str` рдФрд░ `Enum` рд╕реЗ inherit рдХрд░рддреА рд╣реЛред
|
|
|
|
`str` рд╕реЗ inherit рдХрд░рдиреЗ рдкрд░ API docs рдпрд╣ рдЬрд╛рди рдкрд╛рдПрдВрдЧреЗ рдХрд┐ values рдХрд╛ type `string` рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╕рд╣реА рддрд░рд╣ рд╕реЗ render рдХрд░ рдкрд╛рдПрдВрдЧреЗред
|
|
|
|
рдлрд┐рд░ fixed values рдХреЗ рд╕рд╛рде class attributes рдмрдирд╛рдПрдВ, рдЬреЛ рдЙрдкрд▓рдмреНрдз valid values рд╣реЛрдВрдЧреА:
|
|
|
|
{* ../../docs_src/path_params/tutorial005_py310.py hl[1,6:9] *}
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдЕрдЧрд░ рдЖрдк рд╕реЛрдЪ рд░рд╣реЗ рд╣реИрдВ, "AlexNet", "ResNet", рдФрд░ "LeNet" рдмрд╕ Machine Learning <dfn title="рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ, Deep Learning model architectures">models</dfn> рдХреЗ рдирд╛рдо рд╣реИрдВред
|
|
|
|
///
|
|
|
|
### рдПрдХ *path parameter* declare рдХрд░реЗрдВ { #declare-a-path-parameter }
|
|
|
|
рдлрд┐рд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ enum class (`ModelName`) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ type annotation рдХреЗ рд╕рд╛рде рдПрдХ *path parameter* рдмрдирд╛рдПрдВ:
|
|
|
|
{* ../../docs_src/path_params/tutorial005_py310.py hl[16] *}
|
|
|
|
### Docs рджреЗрдЦреЗрдВ { #check-the-docs }
|
|
|
|
рдХреНрдпреЛрдВрдХрд┐ *path parameter* рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз values рдкрд╣рд▓реЗ рд╕реЗ рддрдп рд╣реИрдВ, interactive docs рдЙрдиреНрд╣реЗрдВ рдЕрдЪреНрдЫреЗ рд╕реЗ рджрд┐рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
<img src="/img/tutorial/path-params/image03.png">
|
|
|
|
### Python *enumerations* рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ { #working-with-python-enumerations }
|
|
|
|
*path parameter* рдХреА value рдПрдХ *enumeration member* рд╣реЛрдЧреАред
|
|
|
|
#### *Enumeration members* рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ { #compare-enumeration-members }
|
|
|
|
рдЖрдк рдЗрд╕рдХреА рддреБрд▓рдирд╛ рдЕрдкрдиреЗ рдмрдирд╛рдП рд╣реБрдП enum `ModelName` рдореЗрдВ рдореМрдЬреВрдж *enumeration member* рд╕реЗ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/path_params/tutorial005_py310.py hl[17] *}
|
|
|
|
#### *Enumeration value* рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ { #get-the-enumeration-value }
|
|
|
|
рдЖрдк `model_name.value` рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ actual value (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ `str`) рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, `your_enum_member.value`:
|
|
|
|
{* ../../docs_src/path_params/tutorial005_py310.py hl[20] *}
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдЖрдк `ModelName.lenet.value` рдХреЗ рд╕рд╛рде value `"lenet"` рднреА access рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
///
|
|
|
|
#### *Enumeration members* return рдХрд░реЗрдВ { #return-enumeration-members }
|
|
|
|
рдЖрдк рдЕрдкрдиреЗ *path operation* рд╕реЗ *enum members* return рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рддрдХ рдХрд┐ JSON body рдореЗрдВ nested рднреА (рдЬреИрд╕реЗ рдПрдХ `dict`)ред
|
|
|
|
Client рдХреЛ return рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЙрдиреНрд╣реЗрдВ рдЙрдирдХреА рд╕рдВрдмрдВрдзрд┐рдд values (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ strings) рдореЗрдВ convert рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
|
|
|
|
{* ../../docs_src/path_params/tutorial005_py310.py hl[18,21,23] *}
|
|
|
|
рдЕрдкрдиреЗ client рдореЗрдВ рдЖрдкрдХреЛ рдРрд╕рд╛ JSON response рдорд┐рд▓реЗрдЧрд╛:
|
|
|
|
```JSON
|
|
{
|
|
"model_name": "alexnet",
|
|
"message": "Deep Learning FTW!"
|
|
}
|
|
```
|
|
|
|
## Paths рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ Path parameters { #path-parameters-containing-paths }
|
|
|
|
рдорд╛рди рд▓реЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ path `/files/{file_path}` рдХреЗ рд╕рд╛рде рдПрдХ *path operation* рд╣реИред
|
|
|
|
рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ `file_path` рдореЗрдВ рд╕реНрд╡рдпрдВ рдПрдХ *path* рд░рдЦрдирд╛ рд╣реИ, рдЬреИрд╕реЗ `home/johndoe/myfile.txt`ред
|
|
|
|
рддреЛ, рдЙрд╕ file рдХреЗ рд▓рд┐рдП URL рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛: `/files/home/johndoe/myfile.txt`ред
|
|
|
|
### OpenAPI support { #openapi-support }
|
|
|
|
OpenAPI рдХрд┐рд╕реА *path parameter* рдХреЛ рдЙрд╕рдХреЗ рдЕрдВрджрд░ рдПрдХ *path* рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП declare рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ support рдирд╣реАрдВ рдХрд░рддрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рд╕реЗ рдРрд╕реЗ scenarios рдмрди рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ test рдФрд░ define рдХрд░рдирд╛ рдХрдард┐рди рд╣реЛред
|
|
|
|
рдлрд┐рд░ рднреА, рдЖрдк **FastAPI** рдореЗрдВ Starlette рдХреЗ internal tools рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
|
|
|
|
рдФрд░ docs рдлрд┐рд░ рднреА рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдХреЛрдИ documentation рдирд╣реАрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рдмрддрд╛рдП рдХрд┐ parameter рдореЗрдВ path рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
|
|
|
|
### Path convertor { #path-convertor }
|
|
|
|
Starlette рд╕реЗ рд╕реАрдзреЗ рдПрдХ option рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреЗ URL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ *path* рд░рдЦрдиреЗ рд╡рд╛рд▓рд╛ *path parameter* declare рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
```
|
|
/files/{file_path:path}
|
|
```
|
|
|
|
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, parameter рдХрд╛ рдирд╛рдо `file_path` рд╣реИ, рдФрд░ рдЖрдЦрд┐рд░реА рд╣рд┐рд╕реНрд╕рд╛, `:path`, рдЗрд╕реЗ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ parameter рдХрд┐рд╕реА рднреА *path* рд╕реЗ match рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
|
|
|
|
рддреЛ, рдЖрдк рдЗрд╕реЗ рдЗрд╕рдХреЗ рд╕рд╛рде рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
|
|
{* ../../docs_src/path_params/tutorial004_py310.py hl[6] *}
|
|
|
|
/// tip | рд╕реБрдЭрд╛рд╡
|
|
|
|
рдЖрдкрдХреЛ parameter рдореЗрдВ `/home/johndoe/myfile.txt` рд░рдЦрдирд╛ рдкрдбрд╝ рд╕рдХрддрд╛ рд╣реИ, leading slash (`/`) рдХреЗ рд╕рд╛рдеред
|
|
|
|
рдЙрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, URL рд╣реЛрдЧрд╛: `/files//home/johndoe/myfile.txt`, `files` рдФрд░ `home` рдХреЗ рдмреАрдЪ double slash (`//`) рдХреЗ рд╕рд╛рдеред
|
|
|
|
///
|
|
|
|
## Recap { #recap }
|
|
|
|
**FastAPI** рдХреЗ рд╕рд╛рде, рдЫреЛрдЯреЗ, рд╕рд╣рдЬ рдФрд░ standard Python type declarations рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдкрдХреЛ рдорд┐рд▓рддрд╛ рд╣реИ:
|
|
|
|
* Editor support: error checks, autocompletion рдЖрджрд┐ред
|
|
* Data "<dfn title="HTTP request рд╕реЗ рдЖрдиреЗ рд╡рд╛рд▓реА string рдХреЛ Python data рдореЗрдВ рдмрджрд▓рдирд╛">parsing</dfn>"
|
|
* Data validation
|
|
* API annotation рдФрд░ automatic documentation
|
|
|
|
рдФрд░ рдЖрдкрдХреЛ рдЗрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ declare рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИред
|
|
|
|
рд╡реИрдХрд▓реНрдкрд┐рдХ frameworks рдХреА рддреБрд▓рдирд╛ рдореЗрдВ **FastAPI** рдХрд╛ рд╢рд╛рдпрдж рдпрд╣реА рдореБрдЦреНрдп рджрд┐рдЦрдиреЗ рд╡рд╛рд▓рд╛ рд▓рд╛рдн рд╣реИ (raw performance рдХреЗ рдЕрд▓рд╛рд╡рд╛)ред
|