Tipos de dados extras¶
Até agora, você tem usado tipos de dados comuns, tais como:
intfloatstrbool
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,
    }