Headers de Respuesta¶
Usar un parámetro Response
¶
Puedes declarar un parámetro de tipo Response
en tu función de operación de path (de manera similar como se hace con las cookies).
Y entonces, podrás configurar las cookies en ese objeto de response temporal.
from fastapi import FastAPI, Response
app = FastAPI()
@app.get("/headers-and-object/")
def get_headers(response: Response):
response.headers["X-Cat-Dog"] = "alone in the world"
return {"message": "Hello World"}
Posteriormente, puedes devolver cualquier objeto que necesites, como normalmente harías (un dict
, un modelo de base de datos, etc).
Si declaraste un response_model
, este se continuará usando para filtrar y convertir el objeto que devolviste.
FastAPI usará ese response temporal para extraer los headers (al igual que las cookies y el status code), además las pondrá en el response final que contendrá el valor retornado y filtrado por algún response_model
.
También puedes declarar el parámetro Response
en dependencias, así como configurar los headers (y las cookies) en ellas.
Retornar una Response
directamente¶
Adicionalmente, puedes añadir headers cuando se retorne una Response
directamente.
Crea un response tal como se describe en Retornar una respuesta directamente y pasa los headers como un parámetro adicional:
from fastapi import FastAPI
from fastapi.responses import JSONResponse
app = FastAPI()
@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)
Detalles Técnicos
También podrías utilizar from starlette.responses import Response
o from starlette.responses import JSONResponse
.
FastAPI proporciona las mismas starlette.responses
en fastapi.responses
sólo que de una manera más conveniente para ti, el desarrollador. En otras palabras, muchas de las responses disponibles provienen directamente de Starlette.
Y como la Response
puede ser usada frecuentemente para configurar headers y cookies, FastAPI también la provee en fastapi.Response
.
Headers Personalizados¶
Ten en cuenta que se pueden añadir headers propietarios personalizados usando el prefijo 'X-'.
Si tienes headers personalizados y deseas que un cliente pueda verlos en el navegador, es necesario que los añadas a tus configuraciones de CORS (puedes leer más en CORS (Cross-Origin Resource Sharing)), usando el parámetro expose_headers
documentado en Starlette's CORS docs.