Enviando respostas - FastAPI
Um dos aspectos fundamentais do FastAPI é sua capacidade de processar solicitações HTTP utilizando funções simples. Considere o exemplo básico abaixo:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"message": "Hello www.programicio.com!"}
Neste exemplo, a função root
processa as solicitações HTTP do tipo GET
na raiz da aplicação e retorna um dicionário contendo o elemento "message"
Content-Type
application/json
Serialização de Dados em FastAPI
Por padrão, uma função pode retornar qualquer tipo de dado em FastAPI como, por exemplo, dicionários, listas, strings, números, etc.
Esses dados são automaticamente serializados em JSON utilizando o codificador fastapi.encoders.jsonable_encoder
fastapi.responses.JSONResponse
O código inicial, na verdade, é equivalente a este:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
from fastapi.encoders import jsonable_encoder
app = FastAPI()
@app.get("/")
def root():
data = {"message": "Hello www.programicio.com!"}
json_data = jsonable_encoder(data)
return JSONResponse(content=json_data)
Aqui, o parâmetro content
JSONResponse
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@app.get("/")
def root():
return JSONResponse(content={"message": "Hello www.programicio.com!"})
Caso seja necessário enviar dados que não podem ser serializados diretamente ou personalizar a serialização padrão, é possível definir um serializador JSON próprio.
Respostas Não JSON
Uma função em FastAPI não precisa obrigatoriamente retornar dados em formato JSON. É possível enviar respostas em outros formatos, utilizando objetos da classe Response
JSONResponse
A classe fastapi.Response
: o conteúdo da resposta.content
: o código de status HTTP.status_code
: o tipo MIME da resposta.media_type
: cabeçalhos personalizados.headers
Veja um exemplo básico:
from fastapi import FastAPI, Response
app = FastAPI()
@app.get("/")
def root():
data = "Hello www.programicio.com!"
return Response(content=data, media_type="text/plain")
Nesse caso, a resposta é um texto simples ("Hello www.programicio.com!
text/plain
PlainTextResponse
Para enviar texto simples, é possível utilizar a subclasse PlainTextResponse
text/plain
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse
app = FastAPI()
@app.get("/")
def root():
data = "Hello www.programicio.com!"
return PlainTextResponse(content=data)
HTMLResponse
Para facilitar o envio de código HTML, a classe HTMLResponse ajusta automaticamente o cabeçalho Content-Type
text/html
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
app = FastAPI()
@app.get("/")
def root():
data = "<h2>Hello www.programicio.com!</h2>"
return HTMLResponse(content=data)

Definindo o Tipo de Resposta com response_class
Os métodos de FastAPI, como @app.get()
@app.post()
response_class
from fastapi import FastAPI
from fastapi.responses import PlainTextResponse, JSONResponse, HTMLResponse
app = FastAPI()
@app.get("/hello", response_class=PlainTextResponse)
def root_text():
return "Hello www.programicio.com!"
@app.get("/goodbye", response_class=HTMLResponse)
def root_html():
return "<h2>Goodbye www.programicio.com!</h2>"