]> git.ipfire.org Git - thirdparty/fastapi/fastapi.git/commitdiff
🌐 Update translations for es (update-outdated) (#15752)
authorSebastián Ramírez <tiangolo@gmail.com>
Mon, 15 Jun 2026 19:32:43 +0000 (21:32 +0200)
committerGitHub <noreply@github.com>
Mon, 15 Jun 2026 19:32:43 +0000 (21:32 +0200)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
54 files changed:
docs/es/docs/advanced/additional-responses.md
docs/es/docs/advanced/advanced-dependencies.md
docs/es/docs/advanced/custom-response.md
docs/es/docs/advanced/dataclasses.md
docs/es/docs/advanced/events.md
docs/es/docs/advanced/generate-clients.md
docs/es/docs/advanced/openapi-callbacks.md
docs/es/docs/advanced/openapi-webhooks.md
docs/es/docs/advanced/path-operation-advanced-configuration.md
docs/es/docs/advanced/response-directly.md
docs/es/docs/advanced/security/oauth2-scopes.md
docs/es/docs/advanced/stream-data.md
docs/es/docs/advanced/strict-content-type.md
docs/es/docs/advanced/websockets.md
docs/es/docs/advanced/wsgi.md
docs/es/docs/deployment/docker.md
docs/es/docs/deployment/fastapicloud.md
docs/es/docs/deployment/manually.md
docs/es/docs/deployment/server-workers.md
docs/es/docs/how-to/extending-openapi.md
docs/es/docs/how-to/separate-openapi-schemas.md
docs/es/docs/index.md
docs/es/docs/tutorial/bigger-applications.md
docs/es/docs/tutorial/body-multiple-params.md
docs/es/docs/tutorial/body-nested-models.md
docs/es/docs/tutorial/body.md
docs/es/docs/tutorial/cookie-param-models.md
docs/es/docs/tutorial/cookie-params.md
docs/es/docs/tutorial/debugging.md
docs/es/docs/tutorial/dependencies/dependencies-in-path-operation-decorators.md
docs/es/docs/tutorial/dependencies/dependencies-with-yield.md
docs/es/docs/tutorial/dependencies/index.md
docs/es/docs/tutorial/dependencies/sub-dependencies.md
docs/es/docs/tutorial/first-steps.md
docs/es/docs/tutorial/metadata.md
docs/es/docs/tutorial/path-operation-configuration.md
docs/es/docs/tutorial/path-params-numeric-validations.md
docs/es/docs/tutorial/path-params.md
docs/es/docs/tutorial/query-params-str-validations.md
docs/es/docs/tutorial/query-params.md
docs/es/docs/tutorial/request-files.md
docs/es/docs/tutorial/request-form-models.md
docs/es/docs/tutorial/request-forms-and-files.md
docs/es/docs/tutorial/request-forms.md
docs/es/docs/tutorial/response-model.md
docs/es/docs/tutorial/response-status-code.md
docs/es/docs/tutorial/schema-extra-example.md
docs/es/docs/tutorial/security/first-steps.md
docs/es/docs/tutorial/security/get-current-user.md
docs/es/docs/tutorial/security/oauth2-jwt.md
docs/es/docs/tutorial/security/simple-oauth2.md
docs/es/docs/tutorial/server-sent-events.md
docs/es/docs/tutorial/stream-json-lines.md
docs/es/docs/tutorial/testing.md

index 83053d3a9ebcde1dc7447d5b81236cd4e86cdd5f..6695caf1bbdbc4ab8a33b23a22a80e5c3d573102 100644 (file)
@@ -34,7 +34,7 @@ Ten en cuenta que debes devolver el `JSONResponse` directamente.
 
 ///
 
-/// info | Información
+/// note | Nota
 
 La clave `model` no es parte de OpenAPI.
 
@@ -183,7 +183,7 @@ Nota que debes devolver la imagen usando un `FileResponse` directamente.
 
 ///
 
-/// info | Información
+/// note | Nota
 
 A menos que especifiques un media type diferente explícitamente en tu parámetro `responses`, FastAPI asumirá que el response tiene el mismo media type que la clase de response principal (por defecto `application/json`).
 
index cee93692d751aa33fecd2779517e97ff47354196..f3053ffe33da4928ee412a1af51e008eca26ed18 100644 (file)
@@ -98,7 +98,7 @@ Por ejemplo, si tenías una sesión de base de datos en una dependencia con `yie
 
 Este comportamiento se revirtió en la 0.118.0, para hacer que el código de salida después de `yield` se ejecute después de que la response sea enviada.
 
-/// info | Información
+/// note | Nota
 
 Como verás abajo, esto es muy similar al comportamiento anterior a la versión 0.106.0, pero con varias mejoras y arreglos de bugs para casos límite.
 
index e1db101479dfea8b8c95e2482dea9fe75b332b8b..838118ccae43aab3e5cb4904f39e2e03a6bd42c9 100644 (file)
@@ -24,7 +24,7 @@ Si declaras un [Response Model](../tutorial/response-model.md) FastAPI lo usará
 
 Si no declaras un response model, FastAPI usará el `jsonable_encoder` explicado en [Codificador Compatible con JSON](../tutorial/encoder.md) y lo pondrá en un `JSONResponse`.
 
-Si declaras un `response_class` con un media type JSON (`application/json`), como es el caso con `JSONResponse`, los datos que devuelvas se convertirán automáticamente (y serán filtrados) con cualquier `response_model` de Pydantic que hayas declarado en el *path operation decorator*. Pero los datos no se serializarán a bytes JSON con Pydantic, en su lugar se convertirán con el `jsonable_encoder` y luego se pasarán a la clase `JSONResponse`, que los serializará a bytes usando la librería JSON estándar de Python.
+Si declaras un `response_class` con un media type JSON (`application/json`), como es el caso con `JSONResponse`, los datos que devuelvas se convertirán automáticamente (y serán filtrados) con cualquier `response_model` de Pydantic que hayas declarado en el *path operation decorator*. Pero los datos no se serializarán a bytes JSON con Pydantic, en su lugar se convertirán con el `jsonable_encoder` y luego se pasarán a la clase `JSONResponse`, que los serializará a bytes usando el paquete JSON estándar de Python.
 
 ### Rendimiento JSON { #json-performance }
 
@@ -41,7 +41,7 @@ Para devolver un response con HTML directamente desde **FastAPI**, usa `HTMLResp
 
 {* ../../docs_src/custom_response/tutorial002_py310.py hl[2,7] *}
 
-/// info | Información
+/// note | Nota
 
 El parámetro `response_class` también se utilizará para definir el "media type" del response.
 
@@ -65,7 +65,7 @@ Una `Response` devuelta directamente por tu *path operation function* no se docu
 
 ///
 
-/// info | Información
+/// note | Nota
 
 Por supuesto, el `Content-Type` header real, el código de estado, etc., provendrán del objeto `Response` que devolviste.
 
@@ -181,7 +181,7 @@ Toma un generador `async` o un generador/iterador normal (una función con `yiel
 
 Una tarea `async` solo puede cancelarse cuando llega a un `await`. Si no hay `await`, el generador (función con `yield`) no se puede cancelar correctamente y puede seguir ejecutándose incluso después de solicitar la cancelación.
 
-Como este pequeño ejemplo no necesita ninguna sentencia `await`, añadimos un `await anyio.sleep(0)` para darle al loop de eventos la oportunidad de manejar la cancelación.
+Como este pequeño ejemplo no necesita ninguna statement `await`, añadimos un `await anyio.sleep(0)` para darle al loop de eventos la oportunidad de manejar la cancelación.
 
 Esto sería aún más importante con streams grandes o infinitos.
 
index 3ce5c754f5e9ab04c0e0c45070eb5829aeb4346e..e49cada43b5742ad9fcee8a24bb607ddfdd06de8 100644 (file)
@@ -18,7 +18,7 @@ Y por supuesto, soporta lo mismo:
 
 Esto funciona de la misma manera que con los modelos de Pydantic. Y en realidad se logra de la misma manera internamente, utilizando Pydantic.
 
-/// info | Información
+/// note | Nota
 
 Ten en cuenta que los dataclasses no pueden hacer todo lo que los modelos de Pydantic pueden hacer.
 
index 264ee27ede5933fdd993ed0e244c41325ae5ed6b..e69d6b054c1f088efc62e251ebd39272c7d3f2db 100644 (file)
@@ -120,7 +120,7 @@ Para añadir una función que debería ejecutarse cuando la aplicación se esté
 
 Aquí, la función manejadora del evento `shutdown` escribirá una línea de texto `"Application shutdown"` a un archivo `log.txt`.
 
-/// info | Información
+/// note | Nota
 
 En la función `open()`, el `mode="a"` significa "añadir", por lo tanto, la línea será añadida después de lo que sea que esté en ese archivo, sin sobrescribir el contenido anterior.
 
@@ -152,7 +152,7 @@ Solo un detalle técnico para los nerds curiosos. 🤓
 
 Por debajo, en la especificación técnica ASGI, esto es parte del [Protocolo de Lifespan](https://asgi.readthedocs.io/en/latest/specs/lifespan.html), y define eventos llamados `startup` y `shutdown`.
 
-/// info | Información
+/// note | Nota
 
 Puedes leer más sobre los manejadores `lifespan` de Starlette en [la documentación de `Lifespan` de Starlette](https://www.starlette.dev/lifespan/).
 
index 534c5e98a8fc6c8e306cde8cbd5771458871722b..51834d89cc6a728363a61bd97bc5c2c189f7c070 100644 (file)
@@ -22,16 +22,15 @@ FastAPI genera automáticamente especificaciones **OpenAPI 3.1**, así que cualq
 
 ## Generadores de SDKs de sponsors de FastAPI { #sdk-generators-from-fastapi-sponsors }
 
-Esta sección destaca soluciones **respaldadas por empresas** y **venture-backed** de compañías que sponsorean FastAPI. Estos productos ofrecen **funcionalidades adicionales** e **integraciones** además de SDKs generados de alta calidad.
+Esta sección destaca soluciones **respaldadas por empresas** y **venture-backed** de compañías que sponsor FastAPI. Estos productos ofrecen **funcionalidades adicionales** e **integraciones** además de SDKs generados de alta calidad.
 
-Al ✨ [**sponsorear FastAPI**](../help-fastapi.md#sponsor-the-author) ✨, estas compañías ayudan a asegurar que el framework y su **ecosistema** se mantengan saludables y **sustentables**.
+Al ✨ [**ser sponsor de FastAPI**](../help-fastapi.md#sponsor-the-author) ✨, estas compañías ayudan a asegurar que el framework y su **ecosistema** se mantengan saludables y **sustentables**.
 
 Su sponsorship también demuestra un fuerte compromiso con la **comunidad** de FastAPI (tú), mostrando que no solo les importa ofrecer un **gran servicio**, sino también apoyar un **framework robusto y próspero**, FastAPI. 🙇
 
 Por ejemplo, podrías querer probar:
 
 * [Stainless](https://www.stainless.com/?utm_source=fastapi&utm_medium=referral)
-* [liblab](https://developers.liblab.com/tutorials/sdk-for-fastapi?utm_source=fastapi)
 
 Algunas de estas soluciones también pueden ser open source u ofrecer niveles gratuitos, así que puedes probarlas sin un compromiso financiero. Hay otros generadores de SDK comerciales disponibles y se pueden encontrar en línea. 🤓
 
index 5e3a1572c6fc7586d5b598242044dc387374988c..49896b64b1bf816ac9586b82bc03514c2f361146 100644 (file)
@@ -4,7 +4,7 @@ Podrías crear una API con una *path operation* que podría desencadenar un requ
 
 El proceso que ocurre cuando tu aplicación API llama a la *API externa* se llama un "callback". Porque el software que escribió el desarrollador externo envía un request a tu API y luego tu API hace un *callback*, enviando un request a una *API externa* (que probablemente fue creada por el mismo desarrollador).
 
-En este caso, podrías querer documentar cómo esa API externa *debería* verse. Qué *path operation* debería tener, qué cuerpo debería esperar, qué response debería devolver, etc.
+En este caso, podrías querer documentar cómo esa API externa *debería* verse. Qué *path operation* debería tener, qué body debería esperar, qué response debería devolver, etc.
 
 ## Una aplicación con callbacks { #an-app-with-callbacks }
 
@@ -167,13 +167,13 @@ Observa cómo la URL del callback utilizada contiene la URL recibida como parám
 
 En este punto tienes las *path operation(s)* del callback necesarias (las que el *desarrollador externo* debería implementar en la *API externa*) en el router de callback que creaste arriba.
 
-Ahora usa el parámetro `callbacks` en el *decorador de path operation de tu API* para pasar el atributo `.routes` (que en realidad es solo un `list` de rutas/*path operations*) de ese router de callback:
+Ahora usa el parámetro `callbacks` en el *decorador de path operation de tu API* para pasar el atributo `.routes` de ese router de callback:
 
 {* ../../docs_src/openapi_callbacks/tutorial001_py310.py hl[33] *}
 
 /// tip | Consejo
 
-Observa que no estás pasando el router en sí (`invoices_callback_router`) a `callback=`, sino el atributo `.routes`, como en `invoices_callback_router.routes`.
+Observa que no estás pasando el router en sí (`invoices_callback_router`) a `callbacks=`, sino su `.routes`, como en `invoices_callback_router.routes`. **FastAPI** usará esas rutas para generar la documentación OpenAPI del callback.
 
 ///
 
index 163293f8340133a931e4b9e60a65a0bff695b809..9e51735b1cea9edc29bad179584e2c2bb07ea011 100644 (file)
@@ -22,7 +22,7 @@ Con **FastAPI**, usando OpenAPI, puedes definir los nombres de estos webhooks, l
 
 Esto puede hacer mucho más fácil para tus usuarios **implementar sus APIs** para recibir tus requests de **webhook**, incluso podrían ser capaces de autogenerar algo de su propio código de API.
 
-/// info | Información
+/// note | Nota
 
 Los webhooks están disponibles en OpenAPI 3.1.0 y superiores, soportados por FastAPI `0.99.0` y superiores.
 
@@ -36,7 +36,7 @@ Cuando creas una aplicación de **FastAPI**, hay un atributo `webhooks` que pued
 
 Los webhooks que defines terminarán en el esquema de **OpenAPI** y en la interfaz automática de **documentación**.
 
-/// info | Información
+/// note | Nota
 
 El objeto `app.webhooks` es en realidad solo un `APIRouter`, el mismo tipo que usarías al estructurar tu aplicación con múltiples archivos.
 
index a21975bc7c73fd35bc01176426c9556cdf8de5a3..99fb14017ca3be747f76125f5750ad7e08ea9711 100644 (file)
@@ -16,17 +16,11 @@ Tendrías que asegurarte de que sea único para cada operación.
 
 ### Usar el nombre de la *path operation function* como el operationId { #using-the-path-operation-function-name-as-the-operationid }
 
-Si quieres usar los nombres de las funciones de tus APIs como `operationId`s, puedes iterar sobre todas ellas y sobrescribir el `operation_id` de cada *path operation* usando su `APIRoute.name`.
+Si quieres usar los nombres de las funciones de tus APIs como `operationId`s, puedes pasar una `generate_unique_id_function` personalizada a `FastAPI`.
 
-Deberías hacerlo después de agregar todas tus *path operations*.
+La función recibe cada `APIRoute` y devuelve el `operationId` a usar para esa *path operation*.
 
-{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2, 12:21, 24] *}
-
-/// tip | Consejo
-
-Si llamas manualmente a `app.openapi()`, deberías actualizar los `operationId`s antes de eso.
-
-///
+{* ../../docs_src/path_operation_advanced_configuration/tutorial002_py310.py hl[2,5:6,9] *}
 
 /// warning | Advertencia
 
index b2d5d18b88896e97c0ef2d889c726be50cde3e11..fa05a3ed6e67a0da5b752cef3e2ef78a6feecba4 100644 (file)
@@ -16,9 +16,9 @@ Normalmente tendrás mucho mejor rendimiento usando un [Response Model](../tutor
 
 ## Devolver una `Response` { #return-a-response }
 
-De hecho, puedes devolver cualquier `Response` o cualquier subclase de ella.
+Puedes devolver una `Response` o cualquier subclase de ella.
 
-/// info | Información
+/// note | Nota
 
 `JSONResponse` en sí misma es una subclase de `Response`.
 
@@ -78,6 +78,6 @@ En su lugar, toma los bytes JSON generados con Pydantic usando el response model
 
 Cuando devuelves una `Response` directamente, sus datos no son validados, convertidos (serializados), ni documentados automáticamente.
 
-Pero aún puedes documentarlo como se describe en [Additional Responses in OpenAPI](additional-responses.md).
+Pero aún puedes documentarlo como se describe en [Respuestas adicionales en OpenAPI](additional-responses.md).
 
 Puedes ver en secciones posteriores cómo usar/declarar estas `Response`s personalizadas mientras todavía tienes conversión automática de datos, documentación, etc.
index 6ee3dd5ac977f2a04d159c2e5fb342794ed97047..f9ddd19e3278cba92ed5b952d8788b96238c2a6a 100644 (file)
@@ -46,7 +46,7 @@ Normalmente se utilizan para declarar permisos de seguridad específicos, por ej
 * `instagram_basic` es usado por Facebook / Instagram.
 * `https://www.googleapis.com/auth/drive` es usado por Google.
 
-/// info | Información
+/// note | Nota
 
 En OAuth2 un "scope" es solo un string que declara un permiso específico requerido.
 
@@ -126,7 +126,7 @@ Lo estamos haciendo aquí para demostrar cómo **FastAPI** maneja scopes declara
 
 {* ../../docs_src/security/tutorial005_an_py310.py hl[5,141,172] *}
 
-/// info | Información Técnica
+/// note | Detalles técnicos
 
 `Security` es en realidad una subclase de `Depends`, y tiene solo un parámetro extra que veremos más adelante.
 
index 964a9ed5865db04299159fd06205a8a0cef9f249..2db037e0ad41f32caf78ae0cdfec5bba2f0a8f34 100644 (file)
@@ -4,7 +4,7 @@ Si quieres transmitir datos que se puedan estructurar como JSON, deberías [Tran
 
 Pero si quieres transmitir datos binarios puros o strings, aquí tienes cómo hacerlo.
 
-/// info | Información
+/// note | Nota
 
 Añadido en FastAPI 0.134.0.
 
@@ -90,7 +90,7 @@ Por ejemplo, no tienen un `await file.read()`, ni un `async for chunk in file`.
 
 Y en muchos casos leerlos sería una operación bloqueante (que podría bloquear el event loop), porque se leen desde disco o desde la red.
 
-/// info | Información
+/// note | Nota
 
 El ejemplo anterior es en realidad una excepción, porque el objeto `io.BytesIO` ya está en memoria, así que leerlo no bloqueará nada.
 
index 41615edf3b496ce4aefbd0343be4a5e2d021a3b6..d8003dc9d469a36947cf32c9705011af2caa1a12 100644 (file)
@@ -40,7 +40,7 @@ Ten en cuenta que ambos tienen el mismo host.
 
 Luego, usando el frontend, puedes hacer que el agente de IA haga cosas en tu nombre.
 
-Como está corriendo localmente y no en Internet abierta, decides no tener ninguna autenticación configurada, confiando simplemente en el acceso a la red local.
+Como está corriendo **localmente** y no en Internet abierta, decides **no tener ninguna autenticación** configurada, confiando simplemente en el acceso a la red local.
 
 Entonces, uno de tus usuarios podría instalarlo y ejecutarlo localmente.
 
@@ -69,9 +69,9 @@ Si tu app está en Internet abierta, no “confiarías en la red” ni permitir
 
 Los atacantes podrían simplemente ejecutar un script para enviar requests a tu API, sin necesidad de interacción del navegador, así que probablemente ya estás asegurando cualquier endpoint privilegiado.
 
-En ese caso, este ataque/riesgo no aplica a ti.
+En ese caso, **este ataque/riesgo no aplica a ti**.
 
-Este riesgo y ataque es relevante principalmente cuando la app corre en la red local y esa es la única protección asumida.
+Este riesgo y ataque es relevante principalmente cuando la app corre en la **red local** y esa es la **única protección asumida**.
 
 ## Permitir requests sin Content-Type { #allowing-requests-without-content-type }
 
@@ -81,7 +81,7 @@ Si necesitas soportar clientes que no envían un header `Content-Type`, puedes d
 
 Con esta configuración, las requests sin un header `Content-Type` tendrán su body parseado como JSON, que es el mismo comportamiento de versiones anteriores de FastAPI.
 
-/// info | Información
+/// note | Nota
 
 Este comportamiento y configuración se añadieron en FastAPI 0.132.0.
 
index fe75e644b841550325d57ec0c6b2b43e5d77be6f..e3e0ba5544a6d04e7f014df90fc41ba2f540323a 100644 (file)
@@ -111,7 +111,7 @@ Funcionan de la misma manera que para otros endpoints de FastAPI/*path operation
 
 {* ../../docs_src/websockets_/tutorial002_an_py310.py hl[68:69,82] *}
 
-/// info | Información
+/// note | Nota
 
 Como esto es un WebSocket no tiene mucho sentido lanzar un `HTTPException`, en su lugar lanzamos un `WebSocketException`.
 
index 0d0c42fd540a75e0b302370c64b1e8951d33503f..8afe215a1c96910d346002b12ff98aaf0fce9bfa 100644 (file)
@@ -6,7 +6,7 @@ Para eso, puedes usar el `WSGIMiddleware` y usarlo para envolver tu aplicación
 
 ## Usando `WSGIMiddleware` { #using-wsgimiddleware }
 
-/// info | Información
+/// note | Nota
 
 Esto requiere instalar `a2wsgi`, por ejemplo con `pip install a2wsgi`.
 
index 6ce0e192ac115e4903b41a1cdbfc7470964e5b78..f62db5e70f3de122145763ade428acaaf989829c 100644 (file)
@@ -132,7 +132,7 @@ Successfully installed fastapi pydantic
 
 </div>
 
-/// info | Información
+/// note | Nota
 
 Existen otros formatos y herramientas para definir e instalar dependencias de paquetes.
 
@@ -556,7 +556,7 @@ Si estás usando contenedores (por ejemplo, Docker, Kubernetes), entonces hay do
 
 Si tienes **múltiples contenedores**, probablemente cada uno ejecutando un **proceso único** (por ejemplo, en un cluster de **Kubernetes**), entonces probablemente querrías tener un **contenedor separado** realizando el trabajo de los **pasos previos** en un solo contenedor, ejecutando un solo proceso, **antes** de ejecutar los contenedores worker replicados.
 
-/// info | Información
+/// note | Nota
 
 Si estás usando Kubernetes, probablemente sería un [Contenedor de Inicialización](https://kubernetes.io/docs/concepts/workloads/pods/init-containers/).
 
index fc770d1eed29fbb0b69d0604274bab29c967a055..9c289f4b1bfdceceeb604a23e798a0ab7ed23e31 100644 (file)
@@ -1,26 +1,6 @@
 # FastAPI Cloud { #fastapi-cloud }
 
-Puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com) con **un solo comando**; ve y únete a la lista de espera si aún no lo has hecho. 🚀
-
-## Iniciar sesión { #login }
-
-Asegúrate de que ya tienes una cuenta de **FastAPI Cloud** (te invitamos desde la lista de espera 😉).
-
-Luego inicia sesión:
-
-<div class="termy">
-
-```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud 🚀
-```
-
-</div>
-
-## Desplegar { #deploy }
-
-Ahora despliega tu app, con **un solo comando**:
+Puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com) con **un solo comando**. 🚀
 
 <div class="termy">
 
@@ -36,6 +16,8 @@ Deploying to FastAPI Cloud...
 
 </div>
 
+La CLI detectará automáticamente tu aplicación de FastAPI y la desplegará en la nube. Si no has iniciado sesión, se abrirá tu navegador para completar el proceso de autenticación.
+
 ¡Eso es todo! Ahora puedes acceder a tu app en esa URL. ✨
 
 ## Acerca de FastAPI Cloud { #about-fastapi-cloud }
index f3c771a5152f6c91416897b6dab21409af04ad8f..361a57c8f33d8760f660f18fad8eac131d8726c2 100644 (file)
@@ -56,7 +56,6 @@ Hay varias alternativas, incluyendo:
 * [Hypercorn](https://hypercorn.readthedocs.io/): un servidor ASGI compatible con HTTP/2 y Trio entre otras funcionalidades.
 * [Daphne](https://github.com/django/daphne): el servidor ASGI construido para Django Channels.
 * [Granian](https://github.com/emmett-framework/granian): Un servidor HTTP Rust para aplicaciones en Python.
-* [NGINX Unit](https://unit.nginx.org/howto/fastapi/): NGINX Unit es un runtime para aplicaciones web ligero y versátil.
 
 ## Máquina Servidor y Programa Servidor { #server-machine-and-server-program }
 
index 3e3a1898befb911012a54f06f74747773ec8336a..a7665ccb646a6886a886635cc1d401d15d3ce608 100644 (file)
@@ -17,7 +17,7 @@ Como viste en el capítulo anterior sobre [Conceptos de Despliegue](concepts.md)
 
 Aquí te mostraré cómo usar **Uvicorn** con **worker processes** usando el comando `fastapi` o el comando `uvicorn` directamente.
 
-/// info | Información
+/// note | Nota
 
 Si estás usando contenedores, por ejemplo con Docker o Kubernetes, te contaré más sobre eso en el próximo capítulo: [FastAPI en Contenedores - Docker](docker.md).
 
index d00455afd7920c156129600db67e670043debd8e..b0fa23024dc55b3d7f50ed29ca980ce12e883e38 100644 (file)
@@ -25,9 +25,17 @@ Y esa función `get_openapi()` recibe como parámetros:
 * `openapi_version`: La versión de la especificación OpenAPI utilizada. Por defecto, la más reciente: `3.1.0`.
 * `summary`: Un breve resumen de la API.
 * `description`: La descripción de tu API, esta puede incluir markdown y se mostrará en la documentación.
-* `routes`: Una list de rutas, estas son cada una de las *path operations* registradas. Se toman de `app.routes`.
+* `routes`: Las rutas de la aplicación, tomadas de `app.routes`. FastAPI las usa para recolectar las *path operations* registradas, incluidas las de los routers incluidos.
 
-/// info | Información
+/// tip | Detalles técnicos
+
+`app.routes` es un árbol de rutas de nivel inferior. Puede incluir rutas candidatas que FastAPI usa internamente para routers incluidos, no solo objetos `APIRoute` finales.
+
+Aun así puedes pasar `app.routes` a `get_openapi()`. FastAPI recorrerá ese árbol de rutas para recolectar las path operations efectivas.
+
+///
+
+/// note | Nota
 
 El parámetro `summary` está disponible en OpenAPI 3.1.0 y versiones superiores, soportado por FastAPI 0.99.0 y superiores.
 
index db9b46ddbed22a1dd09e4dd9e8fac2b3f617d48b..1026085e05479b1e60f0b774b53eecb4beda94de 100644 (file)
@@ -85,7 +85,7 @@ Probablemente el caso principal para esto es si ya tienes algún código cliente
 
 En ese caso, puedes desactivar esta funcionalidad en **FastAPI**, con el parámetro `separate_input_output_schemas=False`.
 
-/// info | Información
+/// note | Nota
 
 El soporte para `separate_input_output_schemas` fue agregado en FastAPI `0.102.0`. 🤓
 
index 1217c4c6faa66db71bac48bd122d96eeba848f2c..58d534eef7216f530686459e5e2f1271d32e4371 100644 (file)
@@ -45,7 +45,7 @@ Las funcionalidades clave son:
 * **Rápido**: Muy alto rendimiento, a la par con **NodeJS** y **Go** (gracias a Starlette y Pydantic). [Uno de los frameworks Python más rápidos disponibles](#performance).
 * **Rápido de programar**: Aumenta la velocidad para desarrollar funcionalidades en aproximadamente un 200% a 300%. *
 * **Menos bugs**: Reduce en aproximadamente un 40% los errores inducidos por humanos (desarrolladores). *
-* **Intuitivo**: Gran soporte para editores. <dfn title="también conocido como: auto-complete, autocompletado, IntelliSense">Autocompletado</dfn> en todas partes. Menos tiempo depurando.
+* **Intuitivo**: Gran soporte para editores. <dfn title="también conocido como: autocompletado, IntelliSense">Autocompletado</dfn> en todas partes. Menos tiempo depurando.
 * **Fácil**: Diseñado para ser fácil de usar y aprender. Menos tiempo leyendo documentación.
 * **Corto**: Minimiza la duplicación de código. Múltiples funcionalidades desde cada declaración de parámetro. Menos bugs.
 * **Robusto**: Obtén código listo para producción. Con documentación interactiva automática.
@@ -492,9 +492,7 @@ Para un ejemplo más completo incluyendo más funcionalidades, ve al <a href="ht
 
 ### Despliega tu app (opcional) { #deploy-your-app-optional }
 
-Opcionalmente puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com), ve y únete a la lista de espera si no lo has hecho. 🚀
-
-Si ya tienes una cuenta de **FastAPI Cloud** (te invitamos desde la lista de espera 😉), puedes desplegar tu aplicación con un solo comando.
+Opcionalmente puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com) con un solo comando. 🚀
 
 <div class="termy">
 
@@ -510,6 +508,8 @@ Deploying to FastAPI Cloud...
 
 </div>
 
+La CLI detectará automáticamente tu aplicación de FastAPI y la desplegará en la nube. Si no has iniciado sesión, se abrirá tu navegador para completar el proceso de autenticación.
+
 ¡Eso es todo! Ahora puedes acceder a tu app en esa URL. ✨
 
 #### Acerca de FastAPI Cloud { #about-fastapi-cloud }
index 583cc380eb317eebb36ed05d4e116dcba043f533..f45b4912a9ef89c97e224f3febe0c6b09852cd30 100644 (file)
@@ -396,9 +396,9 @@ Incluirá todas las rutas de ese router como parte de ella.
 
 /// note | Detalles Técnicos
 
-En realidad creará internamente una *path operation* para cada *path operation* que fue declarada en el `APIRouter`.
+FastAPI mantiene activo el `APIRouter` original y sus `APIRoute`s cuando el router se incluye en la aplicación principal.
 
-Así, detrás de escena, funcionará como si todo fuera la misma única app.
+Eso significa que las subclases personalizadas de `APIRouter` y `APIRoute` aún pueden participar después de incluir el router.
 
 ///
 
@@ -406,7 +406,7 @@ Así, detrás de escena, funcionará como si todo fuera la misma única app.
 
 No tienes que preocuparte por el rendimiento al incluir routers.
 
-Esto tomará microsegundos y solo sucederá al inicio.
+Esto está diseñado para ser liviano y evitar añadir sobrecarga a cada request.
 
 Así que no afectará el rendimiento. ⚡
 
@@ -461,7 +461,7 @@ Los `APIRouter`s no están "montados", no están aislados del resto de la aplica
 
 Esto se debe a que queremos incluir sus *path operations* en el esquema de OpenAPI y las interfaces de usuario.
 
-Como no podemos simplemente aislarlos y "montarlos" independientemente del resto, las *path operations* se "clonan" (se vuelven a crear), no se incluyen directamente.
+FastAPI mantiene los routers y *path operations* originales activos, y combina los prefijos del router, dependencias, tags, responses y otros metadatos al manejar requests y generar OpenAPI.
 
 ///
 
@@ -532,4 +532,16 @@ De la misma manera que puedes incluir un `APIRouter` en una aplicación `FastAPI
 router.include_router(other_router)
 ```
 
-Asegúrate de hacerlo antes de incluir `router` en la app de `FastAPI`, para que las *path operations* de `other_router` también se incluyan.
+Puedes hacerlo antes o después de incluir `router` en la app de `FastAPI`. FastAPI seguirá incluyendo las *path operations* de `other_router` en el ruteo y en OpenAPI.
+
+Lo mismo aplica a las *path operations* añadidas después a los routers. También serán visibles a través de la inclusión anterior.
+
+/// warning | Detalles Técnicos
+
+Evita mutar directamente `router.routes` después de incluir un router. FastAPI trata la inclusión de routers como “en vivo”, así que el router original y sus rutas siguen formando parte del ruteo y de la generación de OpenAPI.
+
+Usa APIs documentadas como los decoradores de *path operations* y `.include_router()` para agregar rutas y routers.
+
+Trata `router.routes` como un árbol de rutas de nivel bajo que puede contener definiciones de rutas y routers incluidos, y evita depender de él como una lista plana de *path operations* finales.
+
+///
index c78dd288120d7e32a976467852176d0036a23912..e1b0d4b1c201fc9b38d15ee6bddd04220afb4c4f 100644 (file)
@@ -108,7 +108,7 @@ Por ejemplo:
 
 {* ../../docs_src/body_multiple_params/tutorial004_an_py310.py hl[28] *}
 
-/// info | Información
+/// note | Nota
 
 `Body` también tiene todos los mismos parámetros de validación y metadatos extras que `Query`, `Path` y otros que verás luego.
 
@@ -123,7 +123,7 @@ Por defecto, **FastAPI** esperará su cuerpo directamente.
 Pero si deseas que espere un JSON con una clave `item` y dentro de ella los contenidos del modelo, como lo hace cuando declaras parámetros de cuerpo extra, puedes usar el parámetro especial `Body` `embed`:
 
 ```Python
-item: Item = Body(embed=True)
+item: Annotated[Item, Body(embed=True)]
 ```
 
 como en:
index 742f78d420eeb68475506da146e31b6da1ae5c7b..14151a036cd4c5bb5b332cb5eb75d9a8442cd216 100644 (file)
@@ -136,7 +136,7 @@ Esto esperará (convertirá, validará, documentará, etc.) un cuerpo JSON como:
 }
 ```
 
-/// info | Información
+/// note | Nota
 
 Nota cómo la clave `images` ahora tiene una lista de objetos de imagen.
 
@@ -148,7 +148,7 @@ Puedes definir modelos anidados tan profundamente como desees:
 
 {* ../../docs_src/body_nested_models/tutorial007_py310.py hl[7,12,18,21,25] *}
 
-/// info | Información
+/// note | Nota
 
 Observa cómo `Offer` tiene una lista de `Item`s, que a su vez tienen una lista opcional de `Image`s
 
index 7c3b8e9d9157b9248cafe375dbac3c6269fb37e4..a87512da28959a78b048936eee0fb4dd00d3bf5e 100644 (file)
@@ -8,7 +8,7 @@ Tu API casi siempre tiene que enviar un **response** body. Pero los clientes no
 
 Para declarar un **request** body, usas modelos de [Pydantic](https://docs.pydantic.dev/) con todo su poder y beneficios.
 
-/// info | Información
+/// note | Nota
 
 Para enviar datos, deberías usar uno de estos métodos: `POST` (el más común), `PUT`, `DELETE` o `PATCH`.
 
index 4e6038a46bf16717dc3e0459b2cf285bc25c48c9..3fbf0bcb5e0b4e4706e3830b2f3ed307ce94afd2 100644 (file)
@@ -32,7 +32,7 @@ Puedes ver las cookies definidas en la UI de la documentación en `/docs`:
 <img src="/img/tutorial/cookie-param-models/image01.png">
 </div>
 
-/// info | Información
+/// note | Nota
 
 Ten en cuenta que, como los **navegadores manejan las cookies** de maneras especiales y detrás de escenas, **no** permiten fácilmente que **JavaScript** las toque.
 
index 598872c0a531bec3b1eab56376123cc73b71f1d0..eecd6190735b8c22dea508c24ee00c2d7229d51d 100644 (file)
@@ -24,13 +24,13 @@ Pero recuerda que cuando importas `Query`, `Path`, `Cookie` y otros desde `fasta
 
 ///
 
-/// info | Información
+/// note | Nota
 
 Para declarar cookies, necesitas usar `Cookie`, porque de lo contrario los parámetros serían interpretados como parámetros de query.
 
 ///
 
-/// info | Información
+/// note | Nota
 
 Ten en cuenta que, como **los navegadores manejan las cookies** de formas especiales y por detrás, **no** permiten fácilmente que **JavaScript** las toque.
 
index b5d0704e066b9e8b25de0191e3d3fd370273554a..d91a3261683771f10a7bb434d7abf037f9d09513 100644 (file)
@@ -62,7 +62,7 @@ from myapp import app
 # Algún código adicional
 ```
 
-en ese caso, la variable creada automáticamente dentro de `myapp.py` no tendrá la variable `__name__` con un valor de `"__main__"`.
+en ese caso, la variable creada automáticamente `__name__` dentro de `myapp.py` no tendrá el valor `"__main__"`.
 
 Así que, la línea:
 
@@ -72,7 +72,7 @@ Así que, la línea:
 
 no se ejecutará.
 
-/// info | Información
+/// note | Nota
 
 Para más información, revisa [la documentación oficial de Python](https://docs.python.org/3/library/__main__.html).
 
@@ -88,7 +88,7 @@ Por ejemplo, en Visual Studio Code, puedes:
 
 * Ir al panel de "Debug".
 * "Add configuration...".
-* Seleccionar "Python".
+* Seleccionar "Python"
 * Ejecutar el depurador con la opción "`Python: Current File (Integrated Terminal)`".
 
 Luego, iniciará el servidor con tu código **FastAPI**, deteniéndose en tus puntos de interrupción, etc.
index 72e4e973e954a27d337f947e3d1bac363b0bd1b7..3c5796b8bdcb68a72e6e953c18f8565b1dc904ec 100644 (file)
@@ -28,7 +28,7 @@ También puede ayudar a evitar confusiones para nuevos desarrolladores que vean
 
 ///
 
-/// info | Información
+/// note | Nota
 
 En este ejemplo usamos headers personalizados inventados `X-Key` y `X-Token`.
 
index 084d72aa40c08876ea2d4114ae84285a66b28cbd..552c98ed0a7e44faabceb11e3ccd1712795be00e 100644 (file)
@@ -170,7 +170,7 @@ participant tasks as Background tasks
     end
 ```
 
-/// info | Información
+/// note | Nota
 
 Solo **un response** será enviado al cliente. Podría ser uno de los responses de error o será el response de la *path operation*.
 
index ed5783f39d39b426971f882bd9cd0e9b4f37200c..f725f40615b3c643088bd63c9caeebcaa2877097 100644 (file)
@@ -1,6 +1,6 @@
 # Dependencias { #dependencies }
 
-**FastAPI** tiene un sistema de **<dfn title="también conocido como componentes, recursos, proveedores, servicios, inyectables">Inyección de Dependencias</dfn>** muy poderoso pero intuitivo.
+**FastAPI** tiene un sistema de **<dfn title="también conocido como: componentes, recursos, proveedores, servicios, inyectables">Inyección de Dependencias</dfn>** muy poderoso pero intuitivo.
 
 Está diseñado para ser muy simple de usar, y para hacer que cualquier desarrollador integre otros componentes con **FastAPI** de forma muy sencilla.
 
@@ -51,7 +51,7 @@ En este caso, esta dependencia espera:
 
 Y luego solo devuelve un `dict` que contiene esos valores.
 
-/// info | Información
+/// note | Nota
 
 FastAPI agregó soporte para `Annotated` (y comenzó a recomendarlo) en la versión 0.95.0.
 
@@ -106,7 +106,7 @@ common_parameters --> read_users
 
 De esta manera escribes código compartido una vez y **FastAPI** se encarga de llamarlo para tus *path operations*.
 
-/// check | Revisa
+/// tip | Consejo
 
 Nota que no tienes que crear una clase especial y pasarla en algún lugar a **FastAPI** para "registrarla" o algo similar.
 
index 95f3fe8174b2b41d56ac3819a208bac7df1dd8bf..2432707f7d5b3e7ee019f75b30f7f2f386458e81 100644 (file)
@@ -35,7 +35,7 @@ Entonces podemos usar la dependencia con:
 
 {* ../../docs_src/dependencies/tutorial005_an_py310.py hl[23] *}
 
-/// info | Información
+/// note | Nota
 
 Fíjate que solo estamos declarando una dependencia en la *path operation function*, `query_or_cookie_extractor`.
 
index 1fcfdc140237a960537ff9fd7d559dfbb70add4d..5aaf8bdfa66ac9c55302dcff615b3dafed6160e3 100644 (file)
@@ -180,7 +180,7 @@ lo cual sería equivalente a:
 from backend.main import app
 ```
 
-### `fastapi dev` con path { #fastapi-dev-with-path }
+### `fastapi dev` con path o con la opción de CLI `--entrypoint` { #fastapi-dev-with-path-or-with-entrypoint-cli-option }
 
 También puedes pasar el path del archivo al comando `fastapi dev`, y adivinará el objeto app de FastAPI que debe usar:
 
@@ -188,29 +188,19 @@ También puedes pasar el path del archivo al comando `fastapi dev`, y adivinará
 $ fastapi dev main.py
 ```
 
-Pero tendrías que recordar pasar el path correcto cada vez que llames al comando `fastapi`.
-
-Además, otras herramientas podrían no ser capaces de encontrarlo, por ejemplo la [Extensión de VS Code](../editor-support.md) o [FastAPI Cloud](https://fastapicloud.com), así que se recomienda usar el `entrypoint` en `pyproject.toml`.
-
-### Despliega tu app (opcional) { #deploy-your-app-optional }
-
-Opcionalmente puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com), ve y únete a la lista de espera si aún no lo has hecho. 🚀
-
-Si ya tienes una cuenta de **FastAPI Cloud** (te invitamos desde la lista de espera 😉), puedes desplegar tu aplicación con un solo comando.
-
-Antes de desplegar, asegúrate de haber iniciado sesión:
-
-<div class="termy">
+O, también puedes pasar la opción `--entrypoint` al comando `fastapi dev`:
 
 ```console
-$ fastapi login
-
-You are logged in to FastAPI Cloud 🚀
+$ fastapi dev --entrypoint main:app
 ```
 
-</div>
+Pero tendrías que recordar pasar el path o entrypoint correctos cada vez que llames al comando `fastapi`.
+
+Además, otras herramientas podrían no ser capaces de encontrarlo, por ejemplo la [Extensión de VS Code](../editor-support.md) o [FastAPI Cloud](https://fastapicloud.com), así que se recomienda usar el `entrypoint` en `pyproject.toml`.
 
-Luego despliega tu app:
+### Despliega tu app (opcional) { #deploy-your-app-optional }
+
+Opcionalmente puedes desplegar tu app de FastAPI en [FastAPI Cloud](https://fastapicloud.com) con un solo comando. 🚀
 
 <div class="termy">
 
@@ -226,6 +216,8 @@ Deploying to FastAPI Cloud...
 
 </div>
 
+La CLI detectará automáticamente tu aplicación de FastAPI y la desplegará en la nube. Si no has iniciado sesión, se abrirá tu navegador para completar el proceso de autenticación.
+
 ¡Eso es todo! Ahora puedes acceder a tu app en esa URL. ✨
 
 ## Recapitulación, paso a paso { #recap-step-by-step }
@@ -270,7 +262,7 @@ https://example.com/items/foo
 /items/foo
 ```
 
-/// info | Información
+/// note | Nota
 
 Un "path" también es comúnmente llamado "endpoint" o "ruta".
 
@@ -322,7 +314,7 @@ El `@app.get("/")` le dice a **FastAPI** que la función justo debajo se encarga
 * el path `/`
 * usando una <dfn title="un método HTTP GET"><code>get</code> operación</dfn>
 
-/// info | Información sobre `@decorator`
+/// note | Información sobre `@decorator`
 
 Esa sintaxis `@algo` en Python se llama un "decorador".
 
index 35bc98a26da268f1842447e89c1bd6cb31201c4b..9dd9088dabeab17b534d3650a6d0d62153f9f2d2 100644 (file)
@@ -74,7 +74,7 @@ Usa el parámetro `tags` con tus *path operations* (y `APIRouter`s) para asignar
 
 {* ../../docs_src/metadata/tutorial004_py310.py hl[21,26] *}
 
-/// info | Información
+/// note | Nota
 
 Lee más sobre etiquetas en [Configuración de Path Operation](path-operation-configuration.md#tags).
 
index 21fd503bb747e09824f3e063ec38ae6af7f19c19..30dc9c19f2f6fdb5531730dfb06bb2156f8a5d3b 100644 (file)
@@ -72,13 +72,13 @@ Puedes especificar la descripción del response con el parámetro `response_desc
 
 {* ../../docs_src/path_operation_configuration/tutorial005_py310.py hl[18] *}
 
-/// info | Información
+/// note | Nota
 
 Ten en cuenta que `response_description` se refiere específicamente al response, mientras que `description` se refiere a la *path operation* en general.
 
 ///
 
-/// check | Revisa
+/// tip | Consejo
 
 OpenAPI especifica que cada *path operation* requiere una descripción de response.
 
index 5e7b9a97828f145f5effc0b09b57631b726a5981..24cd5117e9b876d94109fe6ce1b0c8db63a83a1b 100644 (file)
@@ -8,7 +8,7 @@ Primero, importa `Path` de `fastapi`, e importa `Annotated`:
 
 {* ../../docs_src/path_params_numeric_validations/tutorial001_an_py310.py hl[1,3] *}
 
-/// info | Información
+/// note | Nota
 
 FastAPI agregó soporte para `Annotated` (y comenzó a recomendar su uso) en la versión 0.95.0.
 
@@ -131,7 +131,7 @@ Y también puedes declarar validaciones numéricas:
 * `lt`: `l`ess `t`han
 * `le`: `l`ess than or `e`qual
 
-/// info | Información
+/// note | Nota
 
 `Query`, `Path` y otras clases que verás más adelante son subclases de una clase común `Param`.
 
index f1aa4ef8b4391e156d63720723eafa6d42bfe590..94465013e5b035a71994f93005ed1f6071e972e0 100644 (file)
@@ -20,7 +20,7 @@ Puedes declarar el tipo de un parámetro de path en la función, usando anotacio
 
 En este caso, `item_id` se declara como un `int`.
 
-/// check | Revisa
+/// tip | Consejo
 
 Esto te dará soporte del editor dentro de tu función, con chequeo de errores, autocompletado, etc.
 
@@ -34,7 +34,7 @@ Si ejecutas este ejemplo y abres tu navegador en [http://127.0.0.1:8000/items/3]
 {"item_id":3}
 ```
 
-/// check | Revisa
+/// tip | Consejo
 
 Nota que el valor que tu función recibió (y devolvió) es `3`, como un `int` de Python, no un string `"3"`.
 
@@ -66,7 +66,7 @@ porque el parámetro de path `item_id` tenía un valor de `"foo"`, que no es un
 
 El mismo error aparecería si proporcionaras un `float` en lugar de un `int`, como en: [http://127.0.0.1:8000/items/4.2](http://127.0.0.1:8000/items/4.2)
 
-/// check | Revisa
+/// tip | Consejo
 
 Entonces, con la misma declaración de tipo de Python, **FastAPI** te ofrece validación de datos.
 
@@ -82,7 +82,7 @@ Y cuando abras tu navegador en [http://127.0.0.1:8000/docs](http://127.0.0.1:800
 
 <img src="/img/tutorial/path-params/image01.png">
 
-/// check | Revisa
+/// tip | Consejo
 
 Nuevamente, solo con esa misma declaración de tipo de Python, **FastAPI** te ofrece documentación automática e interactiva (integrando Swagger UI).
 
@@ -130,7 +130,7 @@ La primera siempre será utilizada ya que el path coincide primero.
 
 ## Valores predefinidos { #predefined-values }
 
-Si tienes una *path operation* que recibe un *path parameter*, pero quieres que los valores posibles válidos del *path parameter* estén predefinidos, puedes usar un <abbr title="Enumeration – Enumeración">`Enum`</abbr> estándar de Python.
+Si tienes una *path operation* que recibe un *path parameter*, pero quieres que los valores posibles válidos del *path parameter* estén predefinidos, puedes usar un <abbr title="Enumeración">`Enum`</abbr> estándar de Python.
 
 ### Crear una clase `Enum` { #create-an-enum-class }
 
index 44beba2d3e5294e454824785074a0d25ead39036..01c2e40519efbdcc2b90675e51972e1255c192a3 100644 (file)
@@ -29,7 +29,7 @@ Para lograr eso, primero importa:
 
 {* ../../docs_src/query_params_str_validations/tutorial002_an_py310.py hl[1,3] *}
 
-/// info | Información
+/// note | Nota
 
 FastAPI añadió soporte para `Annotated` (y empezó a recomendarlo) en la versión 0.95.0.
 
@@ -298,7 +298,7 @@ También puedes usar `list` directamente en lugar de `list[str]`:
 
 Ten en cuenta que en este caso, FastAPI no comprobará el contenido de la list.
 
-Por ejemplo, `list[int]` comprobaría (y documentaría) que el contenido de la list son enteros. Pero `list` sola no lo haría.
+Por ejemplo, `list[int]` comprobaría (and documentaría) que el contenido de la list son enteros. Pero `list` sola no lo haría.
 
 ///
 
@@ -382,7 +382,7 @@ Por ejemplo, este validador personalizado comprueba que el ID del ítem empiece
 
 {* ../../docs_src/query_params_str_validations/tutorial015_an_py310.py hl[5,16:19,24] *}
 
-/// info | Información
+/// note | Nota
 
 Esto está disponible con Pydantic versión 2 o superior. 😎
 
index 2dbb04ef45f87f846cbf34c7f50082fe3c1520c6..f6664d11562b460fcc691a635ecc21721d4d2814 100644 (file)
@@ -65,7 +65,7 @@ De la misma manera, puedes declarar parámetros de query opcionales, establecien
 
 En este caso, el parámetro de función `q` será opcional y será `None` por defecto.
 
-/// check | Revisa
+/// tip | Consejo
 
 Además, nota que **FastAPI** es lo suficientemente inteligente para notar que el parámetro de path `item_id` es un parámetro de path y `q` no lo es, por lo tanto, es un parámetro de query.
 
index 8bfc7a772ee380f5749c1b0d0a8a7d7d9f34e06d..f7470ca88afd0a9e0a309548ed400df9a5e9b371 100644 (file)
@@ -2,7 +2,7 @@
 
 Puedes definir archivos que serán subidos por el cliente utilizando `File`.
 
-/// info | Información
+/// note | Nota
 
 Para recibir archivos subidos, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart).
 
@@ -28,7 +28,7 @@ Crea parámetros de archivo de la misma manera que lo harías para `Body` o `For
 
 {* ../../docs_src/request_files/tutorial001_an_py310.py hl[9] *}
 
-/// info | Información
+/// note | Nota
 
 `File` es una clase que hereda directamente de `Form`.
 
index b20421bd01095cfae95ee3145189e4071982b2a8..e0685d4beb030cd128f3a8c7b6e5464251fabcc0 100644 (file)
@@ -2,7 +2,7 @@
 
 Puedes usar **modelos de Pydantic** para declarar **campos de formulario** en FastAPI.
 
-/// info | Información
+/// note | Nota
 
 Para usar formularios, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart).
 
index f7b5000b7c4ae704cdbbbcde9fb3df4587322e97..434a665c96e465a576938c005ea9dac972897b23 100644 (file)
@@ -2,7 +2,7 @@
 
 Puedes definir archivos y campos de formulario al mismo tiempo usando `File` y `Form`.
 
-/// info | Información
+/// note | Nota
 
 Para recibir archivos subidos y/o form data, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart).
 
index 7b78aee69a945ad62f48516897846defa06ecc55..60722a261255a5bb6c5dbd52397115b28ca3fa0e 100644 (file)
@@ -1,8 +1,8 @@
-# Datos de formulario { #form-data }
+# Form Data { #form-data }
 
 Cuando necesitas recibir campos de formulario en lugar de JSON, puedes usar `Form`.
 
-/// info | Información
+/// note | Nota
 
 Para usar formularios, primero instala [`python-multipart`](https://github.com/Kludex/python-multipart).
 
@@ -32,7 +32,7 @@ La <dfn title="especificación">especificación</dfn> requiere que los campos se
 
 Con `Form` puedes declarar las mismas configuraciones que con `Body` (y `Query`, `Path`, `Cookie`), incluyendo validación, ejemplos, un alias (por ejemplo, `user-name` en lugar de `username`), etc.
 
-/// info | Información
+/// note | Nota
 
 `Form` es una clase que hereda directamente de `Body`.
 
@@ -70,4 +70,4 @@ Esto no es una limitación de **FastAPI**, es parte del protocolo HTTP.
 
 ## Recapitulación { #recap }
 
-Usa `Form` para declarar parámetros de entrada de datos de formulario.
+Usa `Form` para declarar parámetros de entrada de form data.
index fc9028bee8d7fc609dd39a1e4761d33d4172c0ca..2c97a6764baa14c394c6ddc48c86848d98d4ec88 100644 (file)
@@ -72,7 +72,7 @@ Aquí estamos declarando un modelo `UserIn`, contendrá una contraseña en texto
 
 {* ../../docs_src/response_model/tutorial002_py310.py hl[7,9] *}
 
-/// info | Información
+/// note | Nota
 
 Para usar `EmailStr`, primero instala [`email-validator`](https://github.com/JoshData/python-email-validator).
 
@@ -251,7 +251,7 @@ Entonces, si envías un request a esa *path operation* para el ítem con ID `foo
 }
 ```
 
-/// info | Información
+/// note | Nota
 
 También puedes usar:
 
index a070819bb16521194bc9879d42a8c8c2061b918c..4b9f0e2340c8a383d9a2ca0cd9e21b37da7a45a1 100644 (file)
@@ -18,7 +18,7 @@ Observa que `status_code` es un parámetro del método "decorador" (`get`, `post
 
 El parámetro `status_code` recibe un número con el código de estado HTTP.
 
-/// info | Información
+/// note | Nota
 
 `status_code` también puede recibir un `IntEnum`, como por ejemplo el [`http.HTTPStatus`](https://docs.python.org/3/library/http.html#http.HTTPStatus) de Python.
 
index 73d0cdbe4657ffe12df4a4f61b6fbb7b65c4cd6f..fba7215ef09031fb42d3c48565cbdd723ed01d1a 100644 (file)
@@ -24,7 +24,7 @@ Por ejemplo, podrías usarlo para añadir metadatos para una interfaz de usuario
 
 ///
 
-/// info | Información
+/// note | Nota
 
 OpenAPI 3.1.0 (usado desde FastAPI 0.99.0) añadió soporte para `examples`, que es parte del estándar de **JSON Schema**.
 
@@ -155,7 +155,7 @@ OpenAPI también añadió los campos `example` y `examples` a otras partes de la
     * `File()`
     * `Form()`
 
-/// info | Información
+/// note | Nota
 
 Este viejo parámetro `examples` específico de OpenAPI ahora es `openapi_examples` desde FastAPI `0.103.0`.
 
@@ -171,7 +171,7 @@ Y ahora este nuevo campo `examples` tiene precedencia sobre el viejo campo únic
 
 Este nuevo campo `examples` en JSON Schema es **solo una `list`** de ejemplos, no un dict con metadatos adicionales como en los otros lugares en OpenAPI (descritos arriba).
 
-/// info | Información
+/// note | Nota
 
 Incluso después de que OpenAPI 3.1.0 fue lanzado con esta nueva integración más sencilla con JSON Schema, por un tiempo, Swagger UI, la herramienta que proporciona la documentación automática, no soportaba OpenAPI 3.1.0 (lo hace desde la versión 5.0.0 🎉).
 
index 8118906e5daa6d41aefffc9925b733b4d927d2bc..e4755f9517778146ca30f7ddfbc51c517d0d569f 100644 (file)
@@ -24,7 +24,7 @@ Copia el ejemplo en un archivo `main.py`:
 
 ## Ejecútalo { #run-it }
 
-/// info | Información
+/// note | Nota
 
 El paquete [`python-multipart`](https://github.com/Kludex/python-multipart) se instala automáticamente con **FastAPI** cuando ejecutas el comando `pip install "fastapi[standard]"`.
 
@@ -60,7 +60,7 @@ Verás algo así:
 
 <img src="/img/tutorial/security/image01.png">
 
-/// check | ¡Botón de autorización!
+/// tip | ¡Botón de autorización!
 
 Ya tienes un nuevo y brillante botón de "Authorize".
 
@@ -118,7 +118,7 @@ Así que, revisémoslo desde ese punto de vista simplificado:
 
 En este ejemplo vamos a usar **OAuth2**, con el flujo **Password**, usando un token **Bearer**. Hacemos eso utilizando la clase `OAuth2PasswordBearer`.
 
-/// info | Información
+/// note | Nota
 
 Un token "bearer" no es la única opción.
 
@@ -148,7 +148,7 @@ Este parámetro no crea ese endpoint / *path operation*, pero declara que la URL
 
 Pronto también crearemos la verdadera *path operation*.
 
-/// info | Información
+/// note | Nota
 
 Si eres un "Pythonista" muy estricto, tal vez no te guste el estilo del nombre del parámetro `tokenUrl` en lugar de `token_url`.
 
@@ -176,7 +176,7 @@ Esta dependencia proporcionará un `str` que se asigna al parámetro `token` de
 
 **FastAPI** sabrá que puede usar esta dependencia para definir un "security scheme" en el esquema OpenAPI (y en los docs automáticos del API).
 
-/// info | Detalles técnicos
+/// note | Detalles técnicos
 
 **FastAPI** sabrá que puede usar la clase `OAuth2PasswordBearer` (declarada en una dependencia) para definir el esquema de seguridad en OpenAPI porque hereda de `fastapi.security.oauth2.OAuth2`, que a su vez hereda de `fastapi.security.base.SecurityBase`.
 
index 67b6c58359b2ff9a2eb26da31ccf4da57bdd2a51..fd331f68eae98095a4bb28c5d9201b1f057e2b94 100644 (file)
@@ -50,7 +50,7 @@ Aquí **FastAPI** no se confundirá porque estás usando `Depends`.
 
 ///
 
-/// check | Revisa
+/// tip | Consejo
 
 El modo en que este sistema de dependencias está diseñado nos permite tener diferentes dependencias (diferentes "dependables") que todas devuelven un modelo `User`.
 
index af1140d1bad5242ddbdc3a04ff4c05a413de7ff6..efd309df90cf14c0fe720fe09757fc98bb387d83 100644 (file)
@@ -42,7 +42,7 @@ $ pip install pyjwt
 
 </div>
 
-/// info | Información
+/// note | Nota
 
 Si planeas usar algoritmos de firma digital como RSA o ECDSA, deberías instalar la dependencia del paquete de criptografía `pyjwt[crypto]`.
 
@@ -213,7 +213,7 @@ Usando las credenciales:
 Usuario: `johndoe`
 Contraseña: `secret`
 
-/// check | Revisa
+/// tip | Consejo
 
 Observa que en ninguna parte del código está la contraseña en texto claro "`secret`", solo tenemos la versión con hash.
 
index 15c7146bd7ea5cd5992f54699234242e32811fa3..2a98fff6cab42bd295bf154c8d8d87e11a5a0f94 100644 (file)
@@ -32,7 +32,7 @@ Normalmente se utilizan para declarar permisos de seguridad específicos, por ej
 * `instagram_basic` es usado por Facebook / Instagram.
 * `https://www.googleapis.com/auth/drive` es usado por Google.
 
-/// info | Información
+/// note | Nota
 
 En OAuth2 un "scope" es solo un string que declara un permiso específico requerido.
 
@@ -72,7 +72,7 @@ Si necesitas imponerlo, utiliza `OAuth2PasswordRequestFormStrict` en lugar de `O
 * Un `client_id` opcional (no lo necesitamos para nuestro ejemplo).
 * Un `client_secret` opcional (no lo necesitamos para nuestro ejemplo).
 
-/// info | Información
+/// note | Nota
 
 `OAuth2PasswordRequestForm` no es una clase especial para **FastAPI** como lo es `OAuth2PasswordBearer`.
 
@@ -94,7 +94,7 @@ No estamos usando `scopes` en este ejemplo, pero la funcionalidad está ahí si
 
 ///
 
-Ahora, obtén los datos del usuario desde la base de datos (falsa), usando el `username` del campo del form.
+Ahora, obtén los datos del usuario desde la base de datos (falsa), usando el `username` del campo del formulario.
 
 Si no existe tal usuario, devolvemos un error diciendo "Incorrect username or password".
 
@@ -144,7 +144,7 @@ UserInDB(
 )
 ```
 
-/// info | Información
+/// note | Nota
 
 Para una explicación más completa de `**user_dict` revisa en [la documentación para **Extra Models**](../extra-models.md#about-user-in-dict).
 
@@ -196,7 +196,7 @@ Así que, en nuestro endpoint, solo obtendremos un usuario si el usuario existe,
 
 {* ../../docs_src/security/tutorial003_an_py310.py hl[58:66,69:74,94] *}
 
-/// info | Información
+/// note | Nota
 
 El header adicional `WWW-Authenticate` con el valor `Bearer` que estamos devolviendo aquí también es parte de la especificación.
 
index 0a008c0de64e2b9683e656e0ea8554290a8bdec4..79716ac856ceec64942a3bc4a90853c063335236 100644 (file)
@@ -4,7 +4,7 @@ Puedes enviar datos en streaming al cliente usando **Server-Sent Events** (SSE).
 
 Esto es similar a [Stream JSON Lines](stream-json-lines.md), pero usa el formato `text/event-stream`, que los navegadores soportan de forma nativa con la [`EventSource` API](https://developer.mozilla.org/en-US/docs/Web/API/EventSource).
 
-/// info | Información
+/// note | Nota
 
 Añadido en FastAPI 0.135.0.
 
index e7fe18f5ea9d1c9e625b5c724ba48b8e0133b73f..356b4e0bfbdd6f90aec6f37de46b9f0ea6d8ebb0 100644 (file)
@@ -2,7 +2,7 @@
 
 Podrías tener una secuencia de datos que quieras enviar en un "**stream**", podrías hacerlo con **JSON Lines**.
 
-/// info | Información
+/// note | Nota
 
 Añadido en FastAPI 0.134.0.
 
@@ -48,7 +48,7 @@ Una response tendría un tipo de contenido `application/jsonl` (en lugar de `app
 
 Es muy similar a un array JSON (equivalente de una list de Python), pero en lugar de estar envuelto en `[]` y tener `,` entre los ítems, tiene **un objeto JSON por línea**, separados por un carácter de nueva línea.
 
-/// info | Información
+/// note | Nota
 
 El punto importante es que tu app podrá producir cada línea a su turno, mientras el cliente consume las líneas anteriores.
 
index a40d90c5ee8bb5ddd9b74222c09800848a3f53da..9612b6cba432bf25bb53dbaa1dde0a7f457af23d 100644 (file)
@@ -1,4 +1,4 @@
-# Testing { #testing }
+# Pruebas { #testing }
 
 Gracias a [Starlette](https://www.starlette.dev/testclient/), escribir pruebas para aplicaciones de **FastAPI** es fácil y agradable.
 
@@ -8,7 +8,7 @@ Con él, puedes usar [pytest](https://docs.pytest.org/) directamente con **FastA
 
 ## Usando `TestClient` { #using-testclient }
 
-/// info | Información
+/// note | Nota
 
 Para usar `TestClient`, primero instala [`httpx`](https://www.python-httpx.org).
 
@@ -142,7 +142,7 @@ Por ejemplo:
 
 Para más información sobre cómo pasar datos al backend (usando `httpx` o el `TestClient`) revisa la [documentación de HTTPX](https://www.python-httpx.org).
 
-/// info | Información
+/// note | Nota
 
 Ten en cuenta que el `TestClient` recibe datos que pueden ser convertidos a JSON, no modelos de Pydantic.