From c235e9b78cacbecf2275cd7b8fa770a078300f8f Mon Sep 17 00:00:00 2001 From: Juan Funez Date: Sun, 4 Jul 2021 19:06:18 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Add=20Spanish=20translation=20fo?= =?UTF-8?q?r=20`advanced/response-directly.md`=20(#1253)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Camila Gutierrez --- docs/es/docs/advanced/response-directly.md | 63 ++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 docs/es/docs/advanced/response-directly.md diff --git a/docs/es/docs/advanced/response-directly.md b/docs/es/docs/advanced/response-directly.md new file mode 100644 index 000000000..54dadf576 --- /dev/null +++ b/docs/es/docs/advanced/response-directly.md @@ -0,0 +1,63 @@ +# Devolver una respuesta directamente + +Cuando creas una *operación de path* normalmente puedes devolver cualquier dato: un `dict`, una `list`, un modelo Pydantic, un modelo de base de datos, etc. + +Por defecto, **FastAPI** convertiría automáticamente ese valor devuelto a JSON usando el `jsonable_encoder` explicado en [Codificador Compatible JSON](../tutorial/encoder.md){.internal-link target=_blank}. + +Luego, tras bastidores, pondría esos datos compatibles con JSON (por ejemplo, un `dict`) dentro de una `JSONResponse` que se usaría para enviar la respuesta al cliente. + +Pero puedes devolver una `JSONResponse` directamente de tu *operación de path*. + +Esto puede ser útil, por ejemplo, para devolver cookies o headers personalizados. + +## Devolver una `Response` + +De hecho, puedes devolver cualquier `Response` o cualquier subclase de la misma. + +!!! tip "Consejo" + `JSONResponse` en sí misma es una subclase de `Response`. + +Y cuando devuelves una `Response`, **FastAPI** la pasará directamente. + +No hará ninguna conversión de datos con modelos Pydantic, no convertirá el contenido a ningún tipo, etc. + +Esto te da mucha flexibilidad. Puedes devolver cualquier tipo de dato, sobrescribir cualquer declaración de datos o validación, etc. + +## Usando el `jsonable_encoder` en una `Response` + +Como **FastAPI** no realiza ningún cambio en la `Response` que devuelves, debes asegurarte de que el contenido está listo. + +Por ejemplo, no puedes poner un modelo Pydantic en una `JSONResponse` sin primero convertirlo a un `dict` con todos los tipos de datos (como `datetime`, `UUID`, etc) convertidos a tipos compatibles con JSON. + +Para esos casos, puedes usar el `jsonable_encoder` para convertir tus datos antes de pasarlos a la respuesta: + +```Python hl_lines="4 6 20 21" +{!../../../docs_src/response_directly/tutorial001.py!} +``` + +!!! note "Detalles Técnicos" + También puedes usar `from starlette.responses import JSONResponse`. + + **FastAPI** provee `starlette.responses` como `fastapi.responses`, simplemente como una conveniencia para ti, el desarrollador. Pero la mayoría de las respuestas disponibles vienen directamente de Starlette. + +## Devolviendo una `Response` personalizada + +El ejemplo anterior muestra las partes que necesitas, pero no es muy útil todavía, dado que podrías simplemente devolver el `item` directamente, y **FastAPI** lo pondría en una `JSONResponse` por ti, convirtiéndolo en un `dict`, etc. Todo esto por defecto. + +Ahora, veamos cómo puedes usarlo para devolver una respuesta personalizada. + +Digamos que quieres devolver una respuesta XML. + +Podrías poner tu contenido XML en un string, ponerlo en una `Response` y devolverlo: + +```Python hl_lines="1 18" +{!../../../docs_src/response_directly/tutorial002.py!} +``` + +## Notas + +Cuando devuelves una `Response` directamente, los datos no son validados, convertidos (serializados), ni documentados automáticamente. + +Pero todavía es posible documentarlo como es descrito en [Respuestas adicionales en OpenAPI](additional-responses.md){.internal-link target=_blank}. + +Puedes ver en secciones posteriores como usar/declarar esas `Response`s personalizadas aún teniendo conversión automática de datos, documentación, etc.