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: datetime = Body(),
end_datetime: datetime = Body(),
process_after: timedelta = Body(),
repeat_at: Union[time, 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,
"process_after": process_after,
"repeat_at": repeat_at,
"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: datetime = Body(),
end_datetime: datetime = Body(),
process_after: timedelta = Body(),
repeat_at: Union[time, 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,
"process_after": process_after,
"repeat_at": repeat_at,
"start_process": start_process,
"duration": duration,
}