Tipos de dados extras¶
Até agora, você tem usado tipos de dados comuns, tais como:
- int
- float
- str
- bool
Mas você também pode usar tipos de dados mais complexos.
E você ainda terá os mesmos recursos que viu até agora:
- Ótimo suporte do editor.
- Conversão de dados das requisições recebidas.
- Conversão de dados para os dados da resposta.
- Validação de dados.
- Anotação e documentação automáticas.
Outros tipos de dados¶
Aqui estão alguns dos tipos de dados adicionais que você pode usar:
- UUID:- Um "Identificador Universalmente Único" padrão, comumente usado como ID em muitos bancos de dados e sistemas.
- Em requisições e respostas será representado como uma str.
 
- datetime.datetime:- O datetime.datetimedo Python.
- Em requisições e respostas será representado como uma strno formato ISO 8601, exemplo:2008-09-15T15:53:00+05:00.
 
- O 
- datetime.date:- O datetime.datedo Python.
- Em requisições e respostas será representado como uma strno formato ISO 8601, exemplo:2008-09-15.
 
- O 
- datetime.time:- O datetime.timedo Python.
- Em requisições e respostas será representado como uma strno formato ISO 8601, exemplo:14:23:55.003.
 
- O 
- datetime.timedelta:- O datetime.timedeltado Python.
- Em requisições e respostas será representado como um floatde segundos totais.
- O Pydantic também permite representá-lo como uma "codificação ISO 8601 diferença de tempo", cheque a documentação para mais informações.
 
- O 
- frozenset:- Em requisições e respostas, será tratado da mesma forma que um set:- Nas requisições, uma lista será lida, eliminando duplicadas e convertendo-a em um set.
- Nas respostas, o setserá convertido para umalist.
- O esquema gerado vai especificar que os valores do setsão unicos (usando ouniqueItemsdo JSON Schema).
 
- Nas requisições, uma lista será lida, eliminando duplicadas e convertendo-a em um 
 
- Em requisições e respostas, será tratado da mesma forma que um 
- bytes:- O bytespadrão do Python.
- Em requisições e respostas será representado como uma str.
- O esquema gerado vai especificar que é uma strcom o "formato"binary.
 
- O 
- Decimal:- O Decimalpadrão do Python.
- Em requisições e respostas será representado como um float.
 
- O 
- Você pode checar todos os tipos de dados válidos do Pydantic aqui: Tipos de dados do Pydantic.
Exemplo¶
Aqui está um exemplo de operação de rota com parâmetros utilizando-se de alguns dos tipos acima.
from datetime import datetime, time, timedelta
from typing import Union
from uuid import UUID
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_items(
    item_id: UUID,
    start_datetime: Union[datetime, None] = Body(default=None),
    end_datetime: Union[datetime, None] = Body(default=None),
    repeat_at: Union[time, None] = Body(default=None),
    process_after: Union[timedelta, None] = Body(default=None),
):
    start_process = start_datetime + process_after
    duration = end_datetime - start_process
    return {
        "item_id": item_id,
        "start_datetime": start_datetime,
        "end_datetime": end_datetime,
        "repeat_at": repeat_at,
        "process_after": process_after,
        "start_process": start_process,
        "duration": duration,
    }
Note que os parâmetros dentro da função tem seu tipo de dados natural, e você pode, por exemplo, realizar manipulações normais de data, como:
from datetime import datetime, time, timedelta
from typing import Union
from uuid import UUID
from fastapi import Body, FastAPI
app = FastAPI()
@app.put("/items/{item_id}")
async def read_items(
    item_id: UUID,
    start_datetime: Union[datetime, None] = Body(default=None),
    end_datetime: Union[datetime, None] = Body(default=None),
    repeat_at: Union[time, None] = Body(default=None),
    process_after: Union[timedelta, None] = Body(default=None),
):
    start_process = start_datetime + process_after
    duration = end_datetime - start_process
    return {
        "item_id": item_id,
        "start_datetime": start_datetime,
        "end_datetime": end_datetime,
        "repeat_at": repeat_at,
        "process_after": process_after,
        "start_process": start_process,
        "duration": duration,
    }