You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3.8 KiB

Modelos de Parâmetros do Cabeçalho

Se você possui um grupo de parâmetros de cabeçalho relacionados, você pode criar um modelo do Pydantic para declará-los.

Isso vai lhe permitir reusar o modelo em múltiplos lugares e também declarar validações e metadadados para todos os parâmetros de uma vez. 😎

/// note | Nota

Isso é possível desde a versão 0.115.0 do FastAPI. 🤓

///

Parâmetros do Cabeçalho com um Modelo Pydantic

Declare os parâmetros de cabeçalho que você precisa em um modelo do Pydantic, e então declare o parâmetro como Header:

//// tab | Python 3.10+

{!> ../../docs_src/header_param_models/tutorial001_an_py310.py!}

////

//// tab | Python 3.9+

{!> ../../docs_src/header_param_models/tutorial001_an_py39.py!}

////

//// tab | Python 3.8+

{!> ../../docs_src/header_param_models/tutorial001_an.py!}

////

//// tab | Python 3.10+ non-Annotated

/// tip | Dica

Utilize a versão com Annotated se possível.

///

{!> ../../docs_src/header_param_models/tutorial001_py310.py!}

////

//// tab | Python 3.9+ non-Annotated

/// tip | Dica

Utilize a versão com Annotated se possível.

///

{!> ../../docs_src/header_param_models/tutorial001_py39.py!}

////

//// tab | Python 3.8+ non-Annotated

/// tip | Dica

Utilize a versão com Annotated se possível.

///

{!> ../../docs_src/header_param_models/tutorial001_py310.py!}

////

O FastAPI irá extrair os dados de cada campo a partir dos cabeçalhos da requisição e te retornará o modelo do Pydantic que você definiu.

Checando a documentação

Você pode ver os headers necessários na interface gráfica da documentação em /docs:

Proibindo Cabeçalhos adicionais

Em alguns casos de uso especiais (provavelmente não muito comuns), você pode querer restringir os cabeçalhos que você quer receber.

Você pode usar a configuração dos modelos do Pydantic para proibir (forbid) quaisquer campos extra:

//// tab | Python 3.10+

{!> ../../docs_src/header_param_models/tutorial002_an_py310.py!}

////

//// tab | Python 3.9+

{!> ../../docs_src/header_param_models/tutorial002_an_py39.py!}

////

//// tab | Python 3.8+

{!> ../../docs_src/header_param_models/tutorial002_an.py!}

////

//// tab | Python 3.10+ non-Annotated

/// tip | Dica

Utilize a versão com Annotated se possível.

///

{!> ../../docs_src/header_param_models/tutorial002_py310.py!}

////

//// tab | Python 3.9+ non-Annotated

/// tip | Dica

Utilize a versão com Annotated se possível.

///

{!> ../../docs_src/header_param_models/tutorial002_py39.py!}

////

//// tab | Python 3.8+ non-Annotated

/// tip | Dica

Utilize a versão com Annotated se possível.

///

{!> ../../docs_src/header_param_models/tutorial002.py!}

////

Se um cliente tentar enviar alguns cabeçalhos extra, eles irão receber uma resposta de erro.

Por exemplo, se o cliente tentar enviar um cabeçalho tool com o valor plumbus, ele irá receber uma resposta de erro informando que o parâmetro do cabeçalho tool não é permitido:

{
    "detail": [
        {
            "type": "extra_forbidden",
            "loc": ["header", "tool"],
            "msg": "Extra inputs are not permitted",
            "input": "plumbus",
        }
    ]
}

Resumo

Você pode utilizar modelos do Pydantic para declarar cabeçalhos no FastAPI. 😎