Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
# DependĂȘncias em decoradores de operaçÔes de rota

Em alguns casos vocĂȘ nĂŁo precisa necessariamente retornar o valor de uma dependĂȘncia dentro de uma *função de operação de rota*.

Ou a dependĂȘncia nĂŁo retorna nenhum valor.

Mas vocĂȘ ainda precisa que ela seja executada/resolvida.

Para esses casos, em vez de declarar um parĂąmetro em uma *função de operação de rota* com `Depends`, vocĂȘ pode adicionar um argumento `dependencies` do tipo `list` ao decorador da operação de rota.

## Adicionando `dependencies` ao decorador da operação de rota

O *decorador da operação de rota* recebe um argumento opcional `dependencies`.

Ele deve ser uma lista de `Depends()`:

=== "Python 3.9+"

```Python hl_lines="19"
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!}
```

=== "Python 3.8+"

```Python hl_lines="18"
{!> ../../../docs_src/dependencies/tutorial006_an.py!}
```

=== "Python 3.8 non-Annotated"

!!! tip "Dica"
Utilize a versĂŁo com `Annotated` se possĂ­vel

```Python hl_lines="17"
{!> ../../../docs_src/dependencies/tutorial006.py!}
```
Essas dependĂȘncias serĂŁo executadas/resolvidas da mesma forma que dependĂȘncias comuns. Mas o valor delas (se existir algum) nĂŁo serĂĄ passado para a sua *função de operação de rota*.

!!! tip "Dica"
Alguns editores de texto checam parùmetros de funçÔes não utilizados, e os mostram como erros.

Utilizando `dependencies` no *decorador da operação de rota* vocĂȘ pode garantir que elas serĂŁo executadas enquanto evita errors de editores/ferramentas.

Isso tambĂ©m pode ser Ăștil para evitar confundir novos desenvolvedores que ao ver um parĂąmetro nĂŁo usado no seu cĂłdigo podem pensar que ele Ă© desnecessĂĄrio.

!!! info "Informação"
Neste exemplo utilizamos cabeçalhos personalizados inventados `X-Keys` e `X-Token`.

Mas em situaçÔes reais, como implementaçÔes de segurança, vocĂȘ pode obter mais vantagens em usar as [Ferramentas de segurança integradas (o prĂłximo capĂ­tulo)](../security/index.md){.internal-link target=_blank}.

## Erros das dependĂȘncias e valores de retorno

VocĂȘ pode utilizar as mesmas *funçÔes* de dependĂȘncias que vocĂȘ usaria normalmente.

### Requisitos de DependĂȘncias

DependĂȘncias podem declarar requisitos de requisiçÔes (como cabeçalhos) ou outras subdependĂȘncias:

=== "Python 3.9+"

```Python hl_lines="8 13"
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!}
```

=== "Python 3.8+"

```Python hl_lines="7 12"
{!> ../../../docs_src/dependencies/tutorial006_an.py!}
```

=== "Python 3.8 non-Annotated"

!!! tip "Dica"
Utilize a versĂŁo com `Annotated` se possĂ­vel

```Python hl_lines="6 11"
{!> ../../../docs_src/dependencies/tutorial006.py!}
```

### Levantando exceçÔes

Essas dependĂȘncias podem levantar exceçÔes, da mesma forma que dependĂȘncias comuns:

=== "Python 3.9+"

```Python hl_lines="10 15"
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!}
```

=== "Python 3.8+"

```Python hl_lines="9 14"
{!> ../../../docs_src/dependencies/tutorial006_an.py!}
```

=== "Python 3.8 non-Annotated"

!!! tip "Dica"
Utilize a versĂŁo com `Annotated` se possĂ­vel

```Python hl_lines="8 13"
{!> ../../../docs_src/dependencies/tutorial006.py!}
```

### Valores de retorno

E elas também podem ou não retornar valores, eles não serão utilizados.

EntĂŁo, vocĂȘ pode reutilizar uma dependĂȘncia comum (que retorna um valor) que jĂĄ seja utilizada em outro lugar, e mesmo que o valor nĂŁo seja utilizado, a dependĂȘncia serĂĄ executada:

=== "Python 3.9+"

```Python hl_lines="11 16"
{!> ../../../docs_src/dependencies/tutorial006_an_py39.py!}
```

=== "Python 3.8+"

```Python hl_lines="10 15"
{!> ../../../docs_src/dependencies/tutorial006_an.py!}
```

=== "Python 3.8 non-Annotated"

!!! tip "Dica"
Utilize a versĂŁo com `Annotated` se possĂ­vel

```Python hl_lines="9 14"
{!> ../../../docs_src/dependencies/tutorial006.py!}
```

## DependĂȘncias para um grupo de *operaçÔes de rota*

Mais a frente, quando vocĂȘ ler sobre como estruturar aplicaçÔes maiores ([Bigger Applications - Multiple Files](../../tutorial/bigger-applications.md){.internal-link target=_blank}), possivelmente com mĂșltiplos arquivos, vocĂȘ aprenderĂĄ a declarar um Ășnico parĂąmetro `dependencies` para um grupo de *operaçÔes de rota*.

## DependĂȘncias globais

No prĂłximo passo veremos como adicionar dependĂȘncias para uma aplicação `FastAPI` inteira, para que ela seja aplicada em toda *operação de rota*.