Hay algunas características adicionales para manejar la seguridad además de las que se tratan en el [Tutorial - Guía de Usuario: Seguridad](../../tutorial/security/index.md){.internal-link target=_blank}.
/// tip
/// tip | Consejo
Las siguientes secciones **no necesariamente son "avanzadas"**.
@ -42,7 +42,7 @@ Siguiendo las convenciones de *Semantic Versioning*, cualquier versión por deba
FastAPI también sigue la convención de que cualquier cambio hecho en una <abbrtitle="versiones de parche">"PATCH" version</abbr> es para solucionar errores y <abbrtitle="cambios que no rompan funcionalidades o compatibilidad">*non-breaking changes*</abbr>.
/// tip
/// tip | Consejo
El <abbrtitle="parche">"PATCH"</abbr> es el último número, por ejemplo, en `0.2.3`, la <abbrtitle="versiones de parche">PATCH version</abbr> es `3`.
@ -56,7 +56,7 @@ fastapi>=0.45.0,<0.46.0
En versiones <abbrtitle="versiones menores">"MINOR"</abbr> son añadidas nuevas características y posibles <abbrtitle="Cambios que rompen posibles funcionalidades o compatibilidad">breaking changes</abbr>.
/// tip
/// tip | Consejo
La versión "MINOR" es el número en el medio, por ejemplo, en `0.2.3`, la <abbrtitle="versión menor">"MINOR" version</abbr> es `2`.
@ -4,7 +4,7 @@ Como **FastAPI** está basado en el estándar **ASGI**, es muy fácil integrar c
Puedes combinar *operaciones de path* regulares de la library de FastAPI con GraphQL en la misma aplicación.
/// tip
/// tip | Consejo
**GraphQL** resuelve algunos casos de uso específicos.
@ -49,7 +49,7 @@ Versiones anteriores de Starlette incluyen la clase `GraphQLApp` para integrarlo
Esto fue marcado como obsoleto en Starlette, pero si aún tienes código que lo usa, puedes fácilmente **migrar** a <ahref="https://github.com/ciscorn/starlette-graphene3"class="external-link"target="_blank">starlette-graphene3</a>, la cual cubre el mismo caso de uso y tiene una **interfaz casi idéntica.**
/// tip
/// tip | Consejo
Si necesitas GraphQL, te recomendaría revisar <ahref="https://strawberry.rocks/"class="external-link"target="_blank">Strawberry</a>, que es basada en anotaciones de tipo en vez de clases y tipos personalizados.
@ -12,7 +12,7 @@ Todo **FastAPI** está basado en estos type hints, lo que le da muchas ventajas
Pero, así nunca uses **FastAPI** te beneficiarás de aprender un poco sobre los type hints.
/// note | "Nota"
/// note | Nota
Si eres un experto en Python y ya lo sabes todo sobre los type hints, salta al siguiente capítulo.
@ -256,7 +256,7 @@ Tomado de la documentación oficial de Pydantic:
{!../../../docs_src/python_types/tutorial010.py!}
```
/// info | "Información"
/// info | Información
Para aprender más sobre <ahref="https://docs.pydantic.dev/"class="external-link"target="_blank">Pydantic mira su documentación</a>.
@ -288,7 +288,7 @@ Puede que todo esto suene abstracto. Pero no te preocupes que todo lo verás en
Lo importante es que usando los tipos de Python estándar en un único lugar (en vez de añadir más clases, decorator, etc.) **FastAPI** hará mucho del trabajo por ti.
/// info | "Información"
/// info | Información
Si ya pasaste por todo el tutorial y volviste a la sección de los tipos, una buena referencia es <ahref="https://mypy.readthedocs.io/en/latest/cheat_sheet_py3.html"class="external-link"target="_blank">la "cheat sheet" de `mypy`</a>.
@ -24,7 +24,7 @@ Puedes declarar el tipo de un parámetro de path en la función usando las anota
En este caso, `item_id` es declarado como un `int`.
/// check | "Revisa"
/// check | Revisa
Esto te dará soporte en el editor dentro de tu función, con chequeo de errores, auto-completado, etc.
@ -38,7 +38,7 @@ Si corres este ejemplo y abres tu navegador en <a href="http://127.0.0.1:8000/it
{"item_id":3}
```
/// check | "Revisa"
/// check | Revisa
Observa que el valor que recibió (y devolvió) tu función es `3`, como un Python `int`, y no un string `"3"`.
@ -69,7 +69,7 @@ debido a que el parámetro de path `item_id` tenía el valor `"foo"`, que no es
El mismo error aparecería si pasaras un `float` en vez de un `int` como en: <ahref="http://127.0.0.1:8000/items/4.2"class="external-link"target="_blank">http://127.0.0.1:8000/items/4.2</a>
/// check | "Revisa"
/// check | Revisa
Así, con la misma declaración de tipo de Python, **FastAPI** te da validación de datos.
@ -85,7 +85,7 @@ Cuando abras tu navegador en <a href="http://127.0.0.1:8000/docs" class="externa
<imgsrc="/img/tutorial/path-params/image01.png">
/// check | "Revisa"
/// check | Revisa
Nuevamente, con la misma declaración de tipo de Python, **FastAPI** te da documentación automática e interactiva (integrándose con Swagger UI)
@ -143,13 +143,13 @@ Luego crea atributos de clase con valores fijos, que serán los valores disponib
{!../../../docs_src/path_params/tutorial005.py!}
```
/// info | "Información"
/// info | Información
Las <ahref="https://docs.python.org/3/library/enum.html"class="external-link"target="_blank">Enumerations (o enums) están disponibles en Python</a> desde la versión 3.4.
///
/// tip | "Consejo"
/// tip | Consejo
Si lo estás dudando, "AlexNet", "ResNet", y "LeNet" son solo nombres de <abbrtitle="Técnicamente, arquitecturas de modelos de Deep Learning">modelos</abbr> de Machine Learning.
@ -189,7 +189,7 @@ Puedes obtener el valor exacto (un `str` en este caso) usando `model_name.value`
{!../../../docs_src/path_params/tutorial005.py!}
```
/// tip | "Consejo"
/// tip | Consejo
También podrías obtener el valor `"lenet"` con `ModelName.lenet.value`.
@ -246,7 +246,7 @@ Entonces lo puedes usar con:
{!../../../docs_src/path_params/tutorial004.py!}
```
/// tip | "Consejo"
/// tip | Consejo
Podrías necesitar que el parámetro contenga `/home/johndoe/myfile.txt` con un slash inicial (`/`).
@ -69,13 +69,13 @@ Del mismo modo puedes declarar parámetros de query opcionales definiendo el val
En este caso el parámetro de la función `q` será opcional y será `None` por defecto.
/// check | "Revisa"
/// check | Revisa
También puedes notar que **FastAPI** es lo suficientemente inteligente para darse cuenta de que el parámetro de path `item_id` es un parámetro de path y que `q` no lo es, y por lo tanto es un parámetro de query.
///
/// note | "Nota"
/// note | Nota
FastAPI sabrá que `q` es opcional por el `= None`.
@ -199,7 +199,7 @@ En este caso hay 3 parámetros de query:
* `skip`, un `int` con un valor por defecto de `0`.
* `limit`, un `int` opcional.
/// tip | "Consejo"
/// tip | Consejo
También podrías usar los `Enum`s de la misma manera que con los [Parámetros de path](path-params.md#valores-predefinidos){.internal-link target=_blank}.