Atualizado: 10/11/2024

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". Durante o envio dessa resposta, os dados são automaticamente serializados no formato JSON, amplamente utilizado para comunicação entre cliente e servidor. Além disso, o cabeçalho de tipo de conteúdo (Content-Type) da resposta é configurado como 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. O envio da resposta é gerenciado pela classe 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 define os dados a serem enviados. Alternativamente, é possível omitir a serialização explícita e passar os dados diretamente ao 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 ou de suas subclasses, como JSONResponse.

A classe fastapi.Response serve como base para outras classes de resposta e permite enviar respostas em formatos personalizados. Seu construtor aceita os seguintes parâmetros:

  • content: o conteúdo da resposta.

  • status_code: o código de status HTTP.

  • media_type: o tipo MIME da resposta.

  • headers: cabeçalhos personalizados.

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!") com o tipo MIME definido como text/plain.

PlainTextResponse

Para enviar texto simples, é possível utilizar a subclasse PlainTextResponse que define o tipo MIME como text/plain automaticamente:

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 para 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)
Classe HTMLResponse e envio de respostas ao cliente usando FastAPI

Definindo o Tipo de Resposta com response_class

Os métodos de FastAPI, como @app.get() e @app.post(), permitem especificar o tipo de resposta diretamente utilizando o parâmetro response_class. Veja o exemplo:

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>"
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com