Ir para o conteúdo

Cabeçalhos de resposta

Usando um parâmetro Response

Você pode declarar um parâmetro do tipo Response na sua função de operação de rota (assim como você pode fazer para cookies).

Então você pode definir os cabeçalhos nesse objeto de resposta temporário.

from readyapi import ReadyAPI, Response

app = ReadyAPI()


@app.get("/headers-and-object/")
def get_headers(response: Response):
    response.headers["X-Cat-Dog"] = "alone in the world"
    return {"message": "Hello World"}

Em seguida você pode retornar qualquer objeto que precisar, da maneira que faria normalmente (um dict, um modelo de banco de dados, etc.).

Se você declarou um response_model, ele ainda será utilizado para filtrar e converter o objeto que você retornou.

ReadyAPI usará essa resposta temporária para extrair os cabeçalhos (cookies e código de status também) e os colocará na resposta final que contém o valor que você retornou, filtrado por qualquer response_model.

Você também pode declarar o parâmetro Response em dependências e definir cabeçalhos (e cookies) nelas.

Retornar uma Response diretamente

Você também pode adicionar cabeçalhos quando retornar uma Response diretamente.

Crie uma resposta conforme descrito em Retornar uma resposta diretamente e passe os cabeçalhos como um parâmetro adicional:

from readyapi import ReadyAPI
from readyapi.responses import JSONResponse

app = ReadyAPI()


@app.get("/headers/")
def get_headers():
    content = {"message": "Hello World"}
    headers = {"X-Cat-Dog": "alone in the world", "Content-Language": "en-US"}
    return JSONResponse(content=content, headers=headers)

Detalhes técnicos

Você também pode usar from starlette.responses import Response ou from starlette.responses import JSONResponse.

ReadyAPI fornece as mesmas starlette.responses como readyapi.responses apenas como uma conveniência para você, desenvolvedor. Mas a maioria das respostas disponíveis vem diretamente do Starlette.

E como a Response pode ser usada frequentemente para definir cabeçalhos e cookies, ReadyAPI também a fornece em readyapi.Response.

Cabeçalhos personalizados

Tenha em mente que cabeçalhos personalizados proprietários podem ser adicionados usando o prefixo 'X-'.

Porém, se voce tiver cabeçalhos personalizados que deseja que um cliente no navegador possa ver, você precisa adicioná-los às suas configurações de CORS (saiba mais em CORS (Cross-Origin Resource Sharing)), usando o parâmetro expose_headers descrito na documentação de CORS do Starlette.