mirror of https://github.com/tiangolo/fastapi.git
Update Spanish translation for docs/es/docs/tutorial/path-params.md
- Replace ruta by path - Version >= 0.108.0
This commit is contained in:
parent
8f70f8c43b
commit
6504ac49ac
|
|
@ -1,4 +1,4 @@
|
|||
# Parámetros de path
|
||||
# Parámetros del <abbr title="también conocido en español como: ruta">Path</abbr>
|
||||
|
||||
Puedes declarar los "parámetros" o "variables" con la misma sintaxis que usan los format strings de Python:
|
||||
|
||||
|
|
@ -6,7 +6,7 @@ Puedes declarar los "parámetros" o "variables" con la misma sintaxis que usan l
|
|||
{!../../../docs_src/path_params/tutorial001.py!}
|
||||
```
|
||||
|
||||
El valor del parámetro de path `item_id` será pasado a tu función como el argumento `item_id`.
|
||||
El valor del parámetro de <abbr title="también conocido en español como: ruta">path</abbr> `item_id` será pasado a tu función como el argumento `item_id`.
|
||||
|
||||
Entonces, si corres este ejemplo y vas a <a href="http://127.0.0.1:8000/items/foo" class="external-link" target="_blank">http://127.0.0.1:8000/items/foo</a>, verás una respuesta de:
|
||||
|
||||
|
|
@ -14,9 +14,9 @@ Entonces, si corres este ejemplo y vas a <a href="http://127.0.0.1:8000/items/fo
|
|||
{"item_id":"foo"}
|
||||
```
|
||||
|
||||
## Parámetros de path con tipos
|
||||
## Parámetros de <abbr title="también conocido en español como: ruta">Path</abbr> con tipos
|
||||
|
||||
Puedes declarar el tipo de un parámetro de path en la función usando las anotaciones de tipos estándar de Python:
|
||||
Puedes declarar el tipo de un parámetro de <abbr title="también conocido en español como: ruta">path</abbr> en la función usando las anotaciones de tipos estándar de Python:
|
||||
|
||||
```Python hl_lines="7"
|
||||
{!../../../docs_src/path_params/tutorial002.py!}
|
||||
|
|
@ -46,20 +46,22 @@ Pero si abres tu navegador en <a href="http://127.0.0.1:8000/items/foo" class="e
|
|||
|
||||
```JSON
|
||||
{
|
||||
"detail": [
|
||||
{
|
||||
"loc": [
|
||||
"path",
|
||||
"item_id"
|
||||
],
|
||||
"msg": "value is not a valid integer",
|
||||
"type": "type_error.integer"
|
||||
}
|
||||
]
|
||||
"detail": [
|
||||
{
|
||||
"type": "int_parsing",
|
||||
"loc": [
|
||||
"path",
|
||||
"item_id"
|
||||
],
|
||||
"msg": "Input should be a valid integer, unable to parse string as an integer",
|
||||
"input": "foo",
|
||||
"url": "https://errors.pydantic.dev/2.1/v/int_parsing"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
debido a que el parámetro de path `item_id` tenía el valor `"foo"`, que no es un `int`.
|
||||
debido a que el parámetro de <abbr title="también conocido en español como: ruta">path</abbr> `item_id` tenía el valor `"foo"`, que no es un `int`.
|
||||
|
||||
El mismo error aparecería si pasaras un `float` en vez de un `int` como en: <a href="http://127.0.0.1:8000/items/4.2" class="external-link" target="_blank">http://127.0.0.1:8000/items/4.2</a>
|
||||
|
||||
|
|
@ -79,11 +81,11 @@ Cuando abras tu navegador en <a href="http://127.0.0.1:8000/docs" class="externa
|
|||
!!! 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)
|
||||
|
||||
Observa que el parámetro de path está declarado como un integer.
|
||||
Observa que el parámetro de <abbr title="también conocido en español como: ruta">path</abbr> está declarado como un integer.
|
||||
|
||||
## Beneficios basados en estándares, documentación alternativa
|
||||
|
||||
Debido a que el schema generado es del estándar <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.2.md" class="external-link" target="_blank">OpenAPI</a> hay muchas herramientas compatibles.
|
||||
Debido a que el schema generado es del estándar <a href="https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.1.0.md" class="external-link" target="_blank">OpenAPI</a> hay muchas herramientas compatibles.
|
||||
|
||||
Es por esto que **FastAPI** mismo provee una documentación alternativa de la API (usando ReDoc), a la que puedes acceder en <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>:
|
||||
|
||||
|
|
@ -101,23 +103,31 @@ Exploraremos varios de estos tipos en los próximos capítulos del tutorial.
|
|||
|
||||
## El orden importa
|
||||
|
||||
Cuando creas *operaciones de path* puedes encontrarte con situaciones en las que tengas un path fijo.
|
||||
Cuando creas *operaciones de <abbr title="también conocido en español como: ruta">path</abbr>* puedes encontrarte con situaciones en las que tengas un <abbr title="también conocido en español como: ruta">path</abbr> fijo.
|
||||
|
||||
Digamos algo como `/users/me` que sea para obtener datos del usuario actual.
|
||||
|
||||
... y luego puedes tener el path `/users/{user_id}` para obtener los datos sobre un usuario específico asociados a un ID de usuario.
|
||||
... y luego puedes tener el <abbr title="también conocido en español como: ruta">path</abbr> `/users/{user_id}` para obtener los datos sobre un usuario específico asociados a un ID de usuario.
|
||||
|
||||
Porque las *operaciones de path* son evaluadas en orden, tienes que asegurarte de que el path para `/users/me` sea declarado antes que el path para `/users/{user_id}`:
|
||||
Porque las *operaciones de <abbr title="también conocido en español como: ruta">path</abbr>* son evaluadas en orden, tienes que asegurarte de que el <abbr title="también conocido en español como: ruta">path</abbr> para `/users/me` sea declarado antes que el <abbr title="también conocido en español como: ruta">path</abbr> para `/users/{user_id}`:
|
||||
|
||||
```Python hl_lines="6 11"
|
||||
{!../../../docs_src/path_params/tutorial003.py!}
|
||||
```
|
||||
|
||||
De otra manera el path para `/users/{user_id}` coincidiría también con `/users/me` "pensando" que está recibiendo el parámetro `user_id` con el valor `"me"`.
|
||||
De otra manera el <abbr title="también conocido en español como: ruta">path</abbr> para `/users/{user_id}` coincidiría también con `/users/me` "pensando" que está recibiendo el parámetro `user_id` con el valor `"me"`.
|
||||
|
||||
De manera similar, no puedes redefinir una operación de ruta:
|
||||
|
||||
```Python hl_lines="6 11"
|
||||
{!../../../docs_src/path_params/tutorial003b.py!}
|
||||
```
|
||||
|
||||
Siempre se utilizará el primer path encontrado.
|
||||
|
||||
## Valores predefinidos
|
||||
|
||||
Si tienes una *operación de path* que recibe un *parámetro de path* pero quieres que los valores posibles del *parámetro de path* sean predefinidos puedes usar un <abbr title="Enumeration">`Enum`</abbr> estándar de Python.
|
||||
Si tienes una *operación de <abbr title="también conocido en español como: ruta">path</abbr>* que recibe un *parámetro de <abbr title="también conocido en español como: ruta">path</abbr>* pero quieres que los valores posibles del *parámetro de <abbr title="también conocido en español como: ruta">path</abbr>* sean predefinidos puedes usar un <abbr title="Enumeration">`Enum`</abbr> estándar de Python.
|
||||
|
||||
### Crea una clase `Enum`
|
||||
|
||||
|
|
@ -137,9 +147,9 @@ Luego crea atributos de clase con valores fijos, que serán los valores disponib
|
|||
!!! tip "Consejo"
|
||||
Si lo estás dudando, "AlexNet", "ResNet", y "LeNet" son solo nombres de <abbr title="Tecnicamente, arquitecturas de modelos de Deep Learning">modelos</abbr> de Machine Learning.
|
||||
|
||||
### Declara un *parámetro de path*
|
||||
### Declara un *parámetro de <abbr title="también conocido en español como: ruta">Path</abbr>*
|
||||
|
||||
Luego, crea un *parámetro de path* con anotaciones de tipos usando la clase enum que creaste (`ModelName`):
|
||||
Luego, crea un *parámetro de <abbr title="también conocido en español como: ruta">path</abbr>* con anotaciones de tipos usando la clase enum que creaste (`ModelName`):
|
||||
|
||||
```Python hl_lines="16"
|
||||
{!../../../docs_src/path_params/tutorial005.py!}
|
||||
|
|
@ -147,23 +157,23 @@ Luego, crea un *parámetro de path* con anotaciones de tipos usando la clase enu
|
|||
|
||||
### Revisa la documentación
|
||||
|
||||
Debido a que los valores disponibles para el *parámetro de path* están predefinidos, la documentación interactiva los puede mostrar bien:
|
||||
Debido a que los valores disponibles para el *parámetro de <abbr title="también conocido en español como: ruta">path</abbr>* están predefinidos, la documentación interactiva los puede mostrar bien:
|
||||
|
||||
<img src="/img/tutorial/path-params/image03.png">
|
||||
|
||||
### Trabajando con los *enumerations* de Python
|
||||
### Trabajando con las *<abbr title="también conocido como: Enum">enumeraciones</abbr>* de Python
|
||||
|
||||
El valor del *parámetro de path* será un *enumeration member*.
|
||||
El valor del *parámetro de <abbr title="también conocido en español como: ruta">path</abbr>* será un *miembros del Enum*.
|
||||
|
||||
#### Compara *enumeration members*
|
||||
#### Compara *miembros de la enumeración*
|
||||
|
||||
Puedes compararlo con el *enumeration member* en el enum (`ModelName`) que creaste:
|
||||
Puedes compararlo con el *miembros del enum** en el enum (`ModelName`) que creaste:
|
||||
|
||||
```Python hl_lines="17"
|
||||
{!../../../docs_src/path_params/tutorial005.py!}
|
||||
```
|
||||
|
||||
#### Obtén el *enumeration value*
|
||||
#### Obtén el *Valor del miembro de la enumeración*
|
||||
|
||||
Puedes obtener el valor exacto (un `str` en este caso) usando `model_name.value`, o en general, `your_enum_member.value`:
|
||||
|
||||
|
|
@ -174,9 +184,9 @@ Puedes obtener el valor exacto (un `str` en este caso) usando `model_name.value`
|
|||
!!! tip "Consejo"
|
||||
También podrías obtener el valor `"lenet"` con `ModelName.lenet.value`.
|
||||
|
||||
#### Devuelve *enumeration members*
|
||||
#### Devuelve los *miembros de la enumeración*
|
||||
|
||||
Puedes devolver *enum members* desde tu *operación de path* inclusive en un body de JSON anidado (por ejemplo, un `dict`).
|
||||
Puedes devolver *enum members* desde tu *operación de <abbr title="también conocido en español como: ruta">path</abbr>* inclusive en un body de JSON anidado (por ejemplo, un `dict`).
|
||||
|
||||
Ellos serán convertidos a sus valores correspondientes (strings en este caso) antes de devolverlos al cliente:
|
||||
|
||||
|
|
@ -193,31 +203,31 @@ En tu cliente obtendrás una respuesta en JSON como:
|
|||
}
|
||||
```
|
||||
|
||||
## Parámetros de path parameters que contienen paths
|
||||
## Parámetros de <abbr title="también conocido en español como: ruta">path</abbr> que contienen <abbr title="también conocido en español como: ruta">path</abbr>
|
||||
|
||||
Digamos que tienes una *operación de path* con un path `/files/{file_path}`.
|
||||
Digamos que tienes una *operación de <abbr title="también conocido en español como: ruta">path</abbr>* con un <abbr title="también conocido en español como: ruta">path</abbr> `/files/{file_path}`.
|
||||
|
||||
Pero necesitas que el mismo `file_path` contenga un path como `home/johndoe/myfile.txt`.
|
||||
Pero necesitas que el mismo `file_path` contenga un <abbr title="también conocido en español como: ruta">path</abbr> como `home/johndoe/myfile.txt`.
|
||||
|
||||
Entonces, la URL para ese archivo sería algo como: `/files/home/johndoe/myfile.txt`.
|
||||
|
||||
### Soporte de OpenAPI
|
||||
|
||||
OpenAPI no soporta una manera de declarar un *parámetro de path* que contenga un path, dado que esto podría llevar a escenarios que son difíciles de probar y definir.
|
||||
OpenAPI no soporta una manera de declarar un *parámetro de <abbr title="también conocido en español como: ruta">path</abbr>* que contenga un <abbr title="también conocido en español como: ruta">path</abbr>, dado que esto podría llevar a escenarios que son difíciles de probar y definir.
|
||||
|
||||
Sin embargo, lo puedes hacer en **FastAPI** usando una de las herramientas internas de Starlette.
|
||||
|
||||
La documentación seguirá funcionando, aunque no añadirá ninguna información diciendo que el parámetro debería contener un path.
|
||||
La documentación seguirá funcionando, aunque no añadirá ninguna información diciendo que el parámetro debería contener un <abbr title="también conocido en español como: ruta">path</abbr>.
|
||||
|
||||
### Convertidor de path
|
||||
### Convertidor de Path
|
||||
|
||||
Usando una opción directamente desde Starlette puedes declarar un *parámetro de path* que contenga un path usando una URL como:
|
||||
Usando una opción directamente desde Starlette puedes declarar un *parámetro de <abbr title="también conocido en español como: ruta">path</abbr>* que contenga un <abbr title="también conocido en español como: ruta">path</abbr> usando una URL como:
|
||||
|
||||
```
|
||||
/files/{file_path:path}
|
||||
```
|
||||
|
||||
En este caso el nombre del parámetro es `file_path` y la última parte, `:path`, le dice que el parámetro debería coincidir con cualquier path.
|
||||
En este caso el nombre del parámetro es `file_path` y la última parte, `:path`, le dice que el parámetro debería coincidir con cualquier <abbr title="también conocido en español como: ruta">path</abbr>.
|
||||
|
||||
Entonces lo puedes usar con:
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue