Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
🌐 Add Portuguese translation for `docs/pt/docs/tutorial/body-multiple…
…-params.md` (#4111) Co-authored-by: Lorhan Sohaky <contato+gi74@lorhan.me> Co-authored-by: Wuerike <35462243+Wuerike@users.noreply.github.com> Co-authored-by: Lorhan Sohaky <16273730+LorhanSohaky@users.noreply.github.com>
- Loading branch information
1 parent
8b20eec
commit 2889b4a
Showing
2 changed files
with
214 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,213 @@ | ||
# Corpo - Múltiplos parâmetros | ||
|
||
Agora que nós vimos como usar `Path` e `Query`, veremos usos mais avançados de declarações no corpo da requisição. | ||
|
||
## Misture `Path`, `Query` e parâmetros de corpo | ||
|
||
Primeiro, é claro, você pode misturar `Path`, `Query` e declarações de parâmetro no corpo da requisição livremente e o **FastAPI** saberá o que fazer. | ||
|
||
E você também pode declarar parâmetros de corpo como opcionais, definindo o valor padrão com `None`: | ||
|
||
=== "Python 3.6 e superiores" | ||
|
||
```Python hl_lines="19-21" | ||
{!> ../../../docs_src/body_multiple_params/tutorial001.py!} | ||
``` | ||
|
||
=== "Python 3.10 e superiores" | ||
|
||
```Python hl_lines="17-19" | ||
{!> ../../../docs_src/body_multiple_params/tutorial001_py310.py!} | ||
``` | ||
|
||
!!! nota | ||
Repare que, neste caso, o `item` que seria capturado a partir do corpo é opcional. Visto que ele possui `None` como valor padrão. | ||
|
||
## Múltiplos parâmetros de corpo | ||
|
||
No exemplo anterior, as *operações de rota* esperariam um JSON no corpo contendo os atributos de um `Item`, exemplo: | ||
|
||
```JSON | ||
{ | ||
"name": "Foo", | ||
"description": "The pretender", | ||
"price": 42.0, | ||
"tax": 3.2 | ||
} | ||
``` | ||
|
||
Mas você pode também declarar múltiplos parâmetros de corpo, por exemplo, `item` e `user`: | ||
|
||
=== "Python 3.6 e superiores" | ||
|
||
```Python hl_lines="22" | ||
{!> ../../../docs_src/body_multiple_params/tutorial002.py!} | ||
``` | ||
|
||
=== "Python 3.10 e superiores" | ||
|
||
```Python hl_lines="20" | ||
{!> ../../../docs_src/body_multiple_params/tutorial002_py310.py!} | ||
``` | ||
|
||
Neste caso, o **FastAPI** perceberá que existe mais de um parâmetro de corpo na função (dois parâmetros que são modelos Pydantic). | ||
|
||
Então, ele usará o nome dos parâmetros como chaves (nome dos campos) no corpo, e espera um corpo como: | ||
|
||
```JSON | ||
{ | ||
"item": { | ||
"name": "Foo", | ||
"description": "The pretender", | ||
"price": 42.0, | ||
"tax": 3.2 | ||
}, | ||
"user": { | ||
"username": "dave", | ||
"full_name": "Dave Grohl" | ||
} | ||
} | ||
``` | ||
|
||
!!! nota | ||
Repare que mesmo que o `item` esteja declarado da mesma maneira que antes, agora é esperado que ele esteja dentro do corpo com uma chave `item`. | ||
|
||
|
||
O **FastAPI** fará a conversão automática a partir da requisição, assim esse parâmetro `item` receberá seu respectivo conteúdo e o mesmo ocorrerá com `user`. | ||
|
||
Ele executará a validação dos dados compostos e irá documentá-los de maneira compatível com o esquema OpenAPI e documentação automática. | ||
|
||
## Valores singulares no corpo | ||
|
||
Assim como existem uma `Query` e uma `Path` para definir dados adicionais para parâmetros de consulta e de rota, o **FastAPI** provê o equivalente para `Body`. | ||
|
||
Por exemplo, extendendo o modelo anterior, você poder decidir por ter uma outra chave `importance` no mesmo corpo, além de `item` e `user`. | ||
|
||
Se você declará-lo como é, porque é um valor singular, o **FastAPI** assumirá que se trata de um parâmetro de consulta. | ||
|
||
Mas você pode instruir o **FastAPI** para tratá-lo como outra chave do corpo usando `Body`: | ||
|
||
=== "Python 3.6 e superiores" | ||
|
||
```Python hl_lines="22" | ||
{!> ../../../docs_src/body_multiple_params/tutorial003.py!} | ||
``` | ||
|
||
=== "Python 3.10 e superiores" | ||
|
||
```Python hl_lines="20" | ||
{!> ../../../docs_src/body_multiple_params/tutorial003_py310.py!} | ||
``` | ||
|
||
Neste caso, o **FastAPI** esperará um corpo como: | ||
|
||
```JSON | ||
{ | ||
"item": { | ||
"name": "Foo", | ||
"description": "The pretender", | ||
"price": 42.0, | ||
"tax": 3.2 | ||
}, | ||
"user": { | ||
"username": "dave", | ||
"full_name": "Dave Grohl" | ||
}, | ||
"importance": 5 | ||
} | ||
``` | ||
|
||
Mais uma vez, ele converterá os tipos de dados, validar, documentar, etc. | ||
|
||
## Múltiplos parâmetros de corpo e consulta | ||
|
||
Obviamente, você também pode declarar parâmetros de consulta assim que você precisar, de modo adicional a quaisquer parâmetros de corpo. | ||
|
||
Dado que, por padrão, valores singulares são interpretados como parâmetros de consulta, você não precisa explicitamente adicionar uma `Query`, você pode somente: | ||
|
||
```Python | ||
q: Union[str, None] = None | ||
``` | ||
|
||
Ou como em Python 3.10 e versões superiores: | ||
|
||
```Python | ||
q: str | None = None | ||
``` | ||
|
||
Por exemplo: | ||
|
||
=== "Python 3.6 e superiores" | ||
|
||
```Python hl_lines="27" | ||
{!> ../../../docs_src/body_multiple_params/tutorial004.py!} | ||
``` | ||
|
||
=== "Python 3.10 e superiores" | ||
|
||
```Python hl_lines="26" | ||
{!> ../../../docs_src/body_multiple_params/tutorial004_py310.py!} | ||
``` | ||
|
||
!!! info "Informação" | ||
`Body` também possui todas as validações adicionais e metadados de parâmetros como em `Query`,`Path` e outras que você verá depois. | ||
|
||
## Declare um único parâmetro de corpo indicando sua chave | ||
|
||
Suponha que você tem um único parâmetro de corpo `item`, a partir de um modelo Pydantic `Item`. | ||
|
||
Por padrão, o **FastAPI** esperará que seu conteúdo venha no corpo diretamente. | ||
|
||
Mas se você quiser que ele espere por um JSON com uma chave `item` e dentro dele os conteúdos do modelo, como ocorre ao declarar vários parâmetros de corpo, você pode usar o parâmetro especial de `Body` chamado `embed`: | ||
|
||
```Python | ||
item: Item = Body(embed=True) | ||
``` | ||
|
||
como em: | ||
|
||
=== "Python 3.6 e superiores" | ||
|
||
```Python hl_lines="17" | ||
{!> ../../../docs_src/body_multiple_params/tutorial005.py!} | ||
``` | ||
|
||
=== "Python 3.10 e superiores" | ||
|
||
```Python hl_lines="15" | ||
{!> ../../../docs_src/body_multiple_params/tutorial005_py310.py!} | ||
``` | ||
|
||
Neste caso o **FastAPI** esperará um corpo como: | ||
|
||
```JSON hl_lines="2" | ||
{ | ||
"item": { | ||
"name": "Foo", | ||
"description": "The pretender", | ||
"price": 42.0, | ||
"tax": 3.2 | ||
} | ||
} | ||
``` | ||
|
||
ao invés de: | ||
|
||
```JSON | ||
{ | ||
"name": "Foo", | ||
"description": "The pretender", | ||
"price": 42.0, | ||
"tax": 3.2 | ||
} | ||
``` | ||
|
||
## Recapitulando | ||
|
||
Você pode adicionar múltiplos parâmetros de corpo para sua *função de operação de rota*, mesmo que a requisição possa ter somente um único corpo. | ||
|
||
E o **FastAPI** vai manipulá-los, mandar para você os dados corretos na sua função, e validar e documentar o schema correto na *operação de rota*. | ||
|
||
Você também pode declarar valores singulares para serem recebidos como parte do corpo. | ||
|
||
E você pode instruir o **FastAPI** para requisitar no corpo a indicação de chave mesmo quando existe somente um único parâmetro declarado. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters