Quando você precisa enviar dados de um cliente (como de um navegador web) para sua API, você o envia como um corpo da requisição.
O corpo da requisição é a informação enviada pelo cliente para sua API. O corpo da resposta é a informação que sua API envia para o cliente.
Sua API quase sempre irá enviar um corpo na resposta. Mas os clientes não necessariamente precisam enviar um corpo em toda requisição.
Para declarar um corpo da requisição, você utiliza os modelos do Pydantic com todos os seus poderes e benefícios.
Informação
Para enviar dados, você deve usar utilizar um dos métodos: POST (Mais comum), PUT, DELETE ou PATCH.
Enviar um corpo em uma requisição GET não tem um comportamento definido nas especificações, porém é suportado pelo FastAPI, apenas para casos de uso bem complexos/extremos.
Como é desencorajado, a documentação interativa com Swagger UI não irá mostrar a documentação para o corpo da requisição para um GET, e proxies que intermediarem podem não suportar o corpo da requisição.
Assim como quando declaramos parâmetros de consulta, quando um atributo do modelo possui um valor padrão, ele se torna opcional. Caso contrário, se torna obrigatório. Use None para torná-lo opcional.
Por exemplo, o modelo acima declara um JSON "object" (ou dict no Python) como esse:
No seu editor de texto, dentro da função você receberá dicas de tipos e completação em todo lugar (isso não aconteceria se você recebesse um dict em vez de um modelo Pydantic):
Você também poderá receber verificações de erros para operações de tipos incorretas:
Isso não é por acaso, todo o framework foi construído em volta deste design.
E foi imensamente testado na fase de design, antes de qualquer implementação, para garantir que funcionaria para todos os editores de texto.
Houveram mudanças no próprio Pydantic para que isso fosse possível.
Você pode declarar parâmetros de rota e corpo da requisição ao mesmo tempo.
O FastAPI irá reconhecer que os parâmetros da função que combinam com parâmetros de rota devem ser retirados da rota, e parâmetros da função que são declarados como modelos Pydantic sejam retirados do corpo da requisição.