--- /dev/null
+# Primeros pasos
+
+Un archivo muy simple de FastAPI podr铆a verse as铆:
+
+```Python
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Copia eso a un archivo `main.py`.
+
+Corre el servidor en vivo:
+
+<div class="termy">
+
+```console
+$ uvicorn main:app --reload
+
+<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+<span style="color: green;">INFO</span>: Started reloader process [28720]
+<span style="color: green;">INFO</span>: Started server process [28722]
+<span style="color: green;">INFO</span>: Waiting for application startup.
+<span style="color: green;">INFO</span>: Application startup complete.
+```
+
+</div>
+
+!!! note "Nota"
+ El comando `uvicorn main:app` se refiere a:
+
+ * `main`: el archivo `main.py` (el "m贸dulo" de Python).
+ * `app`: el objeto creado dentro de `main.py` con la l铆nea `app = FastAPI()`.
+ * `--reload`: hace que el servidor se reinicie cada vez que cambia el c贸digo. 脷salo 煤nicamente para desarrollo.
+
+En el output, hay una l铆nea que dice m谩s o menos:
+
+```hl_lines="4"
+INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+Esa l铆nea muestra la URL d贸nde se est谩 sirviendo tu app en tu maquina local.
+
+### Rev铆salo
+
+Abre tu navegador en <a href="http://127.0.0.1:8000" class="external-link" target="_blank">http://127.0.0.1:8000</a>.
+
+Ver谩s la respuesta en JSON:
+
+```JSON
+{"message": "Hello World"}
+```
+
+### Documentaci贸n interactiva de la API
+
+Ahora dir铆gete a <a href="http://127.0.0.1:8000/docs" class="external-link" target="_blank">http://127.0.0.1:8000/docs</a>.
+
+Ah铆 ver谩s la documentaci贸n autom谩tica e interactiva de la API (prove铆da por <a href="https://github.com/swagger-api/swagger-ui" class="external-link" target="_blank">Swagger UI</a>):
+
+
+
+### Documentaci贸n alternativa de la API
+
+Ahora, dir铆gete a <a href="http://127.0.0.1:8000/redoc" class="external-link" target="_blank">http://127.0.0.1:8000/redoc</a>.
+
+Aqu铆 ver谩s la documentaci贸n autom谩tica alternativa (prove铆da por <a href="https://github.com/Rebilly/ReDoc" class="external-link" target="_blank">ReDoc</a>):
+
+
+
+### OpenAPI
+
+**FastAPI** genera un "schema" con toda tu API usando el est谩ndar para definir APIs, **OpenAPI**.
+
+#### "Schema"
+
+Un "schema" es una definici贸n o descripci贸n de algo. No es el c贸digo que la implementa, sino solo una descripci贸n abstracta.
+
+#### "Schema" de la API
+
+En este caso, <a href="https://github.com/OAI/OpenAPI-Specification" class="external-link" target="_blank">OpenAPI</a> es una especificaci贸n que dicta como se debe definir el schema de tu API.
+
+La definici贸n del schema incluye los paths de tu API, los par谩metros que podr铆a recibir, etc.
+
+#### "Schema" de datos
+
+El concepto "schema" tambi茅n se puede referir a la forma de algunos datos, como un contenido en formato JSON.
+
+En ese caso har铆a referencia a los atributos del JSON, los tipos de datos que tiene, etc.
+
+#### OpenAPI y JSON Schema
+
+OpenAPI define un schema de API para tu API. Ese schema incluye definiciones (o "schemas") de los datos enviados y recibidos por tu API usando **JSON Schema**, el est谩ndar para los schemas de datos en JSON.
+
+#### Revisa el `openapi.json`
+
+Si sientes curiosidad por saber c贸mo se ve el schema de OpenAPI en bruto, FastAPI genera autom谩ticamente un (schema) JSON con la descripci贸n de todo tu API.
+
+Lo puedes ver directamente en: <a href="http://127.0.0.1:8000/openapi.json" class="external-link" target="_blank">http://127.0.0.1:8000/openapi.json</a>.
+
+Esto te mostrar谩 un JSON que comienza con algo como:
+
+```JSON
+{
+ "openapi": "3.0.2",
+ "info": {
+ "title": "FastAPI",
+ "version": "0.1.0"
+ },
+ "paths": {
+ "/items/": {
+ "get": {
+ "responses": {
+ "200": {
+ "description": "Successful Response",
+ "content": {
+ "application/json": {
+
+
+
+...
+```
+
+#### 驴Para qu茅 se usa OpenAPI?
+
+El schema de OpenAPI es lo que alimenta a los dos sistemas de documentaci贸n interactiva incluidos.
+
+Tambi茅n hay docenas de alternativas, todas basadas en OpenAPI. Podr铆as a帽adir f谩cilmente cualquiera de esas alternativas a tu aplicaci贸n construida con **FastAPI**.
+
+Tambi茅n podr铆as usarlo para generar c贸digo autom谩ticamente, para los clientes que se comunican con tu API. Por ejemplo, frontend, m贸vil o aplicaciones de IoT.
+
+## Repaso, paso a paso
+
+### Paso 1: importa `FastAPI`
+
+```Python hl_lines="1"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+`FastAPI` es una clase de Python que provee toda la funcionalidad para tu API.
+
+!!! note "Detalles T茅cnicos"
+ `FastAPI` es una clase que hereda directamente de `Starlette`.
+
+ Tambi茅n puedes usar toda la funcionalidad de <a href="https://www.starlette.io/" class="external-link" target="_blank">Starlette</a>.
+
+### Paso 2: crea un "instance" de `FastAPI`
+
+```Python hl_lines="3"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Aqu铆 la variable `app` ser谩 un instance de la clase `FastAPI`.
+
+Este ser谩 el punto de interacci贸n principal para crear todo tu API.
+
+Esta `app` es la misma a la que nos referimos cuando usamos el comando de `uvicorn`:
+
+<div class="termy">
+
+```console
+$ uvicorn main:app --reload
+
+<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+Si creas un app como:
+
+```Python hl_lines="3"
+{!../../../docs_src/first_steps/tutorial002.py!}
+```
+
+y lo guardas en un archivo `main.py`, entonces ejecutar铆as `uvicorn` as铆:
+
+<div class="termy">
+
+```console
+$ uvicorn main:my_awesome_api --reload
+
+<span style="color: green;">INFO</span>: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
+```
+
+</div>
+
+### Paso 3: crea un *operaci贸n de path*
+
+#### Path
+
+"Path" aqu铆 se refiere a la 煤ltima parte de una URL comenzando desde el primer `/`.
+
+Entonces, en una URL como:
+
+```
+https://example.com/items/foo
+```
+
+...el path ser铆a:
+
+```
+/items/foo
+```
+
+!!! info "Informaci贸n"
+ Un "path" tambi茅n se conoce habitualmente como "endpoint", "route" o "ruta".
+
+Cuando construyes una API, el "path" es la manera principal de separar los <abbr title="en ingl茅s: separation of concerns">"intereses"</abbr> y los "recursos".
+
+#### Operaci贸n
+
+"Operaci贸n" aqu铆 se refiere a uno de los "m茅todos" de HTTP.
+
+Uno como:
+
+* `POST`
+* `GET`
+* `PUT`
+* `DELETE`
+
+...y los m谩s ex贸ticos:
+
+* `OPTIONS`
+* `HEAD`
+* `PATCH`
+* `TRACE`
+
+En el protocolo de HTTP, te puedes comunicar con cada path usando uno (o m谩s) de estos "m茅todos".
+
+---
+
+Cuando construyes APIs, normalmente usas uno de estos m茅todos espec铆ficos de HTTP para realizar una acci贸n espec铆fica.
+
+Normalmente usas:
+
+* `POST`: para crear datos.
+* `GET`: para leer datos.
+* `PUT`: para actualizar datos.
+* `DELETE`: para borrar datos.
+
+As铆 que en OpenAPI, cada uno de estos m茅todos de HTTP es referido como una "operaci贸n".
+
+Nosotros tambi茅n los llamaremos "**operaci贸n**".
+
+#### Define un *decorador de operaciones de path*
+
+```Python hl_lines="6"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+El `@app.get("/")` le dice a **FastAPI** que la funci贸n que tiene justo debajo est谩 a cargo de manejar los requests que van a:
+
+* el path `/`
+* usando una <abbr title="an HTTP GET method">operaci贸n <code>get</code></abbr>
+
+!!! info "Informaci贸n sobre `@decorator`"
+ Esa sintaxis `@algo` se llama un "decorador" en Python.
+
+ Lo pones encima de una funci贸n. Es como un lindo sombrero decorado (creo que de ah铆 sali贸 el concepto).
+
+ Un "decorador" toma la funci贸n que tiene debajo y hace algo con ella.
+
+ En nuestro caso, este decorador le dice a **FastAPI** que la funci贸n que est谩 debajo corresponde al **path** `/` con una **operaci贸n** `get`.
+
+ Es el "**decorador de operaciones de path**".
+
+Tambi茅n puedes usar las otras operaciones:
+
+* `@app.post()`
+* `@app.put()`
+* `@app.delete()`
+
+y las m谩s ex贸ticas:
+
+* `@app.options()`
+* `@app.head()`
+* `@app.patch()`
+* `@app.trace()`
+
+!!! tip "Consejo"
+ Tienes la libertad de usar cada operaci贸n (m茅todo de HTTP) como quieras.
+
+ **FastAPI** no impone ning煤n significado espec铆fico.
+
+ La informaci贸n que est谩 presentada aqu铆 es una gu铆a, no un requerimiento.
+
+ Por ejemplo, cuando usas GraphQL normalmente realizas todas las acciones usando 煤nicamente operaciones `POST`.
+
+### Paso 4: define la **funci贸n de la operaci贸n de path**
+
+Esta es nuestra "**funci贸n de la operaci贸n de path**":
+
+* **path**: es `/`.
+* **operaci贸n**: es `get`.
+* **funci贸n**: es la funci贸n debajo del "decorador" (debajo de `@app.get("/")`).
+
+```Python hl_lines="7"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Esto es una funci贸n de Python.
+
+Esta funci贸n ser谩 llamada por **FastAPI** cada vez que reciba un request en la URL "`/`" usando una operaci贸n `GET`.
+
+En este caso es una funci贸n `async`.
+
+---
+
+Tambi茅n podr铆as definirla como una funci贸n normal, en vez de `async def`:
+
+```Python hl_lines="7"
+{!../../../docs_src/first_steps/tutorial003.py!}
+```
+
+!!! note "Nota"
+ Si no sabes la diferencia, revisa el [Async: *"驴Tienes prisa?"*](../async.md#in-a-hurry){.internal-link target=_blank}.
+
+### Paso 5: devuelve el contenido
+
+```Python hl_lines="8"
+{!../../../docs_src/first_steps/tutorial001.py!}
+```
+
+Puedes devolver `dict`, `list`, valores singulares como un `str`, `int`, etc.
+
+Tambi茅n puedes devolver modelos de Pydantic (ya ver谩s m谩s sobre esto m谩s adelante).
+
+Hay muchos objetos y modelos que pueden ser convertidos autom谩ticamente a JSON (incluyendo ORMs, etc.). Intenta usar tus favoritos, es muy probable que ya tengan soporte.
+
+## Repaso
+
+* Importa `FastAPI`.
+* Crea un instance de `app`.
+* Escribe un **decorador de operaci贸n de path** (como `@app.get("/")`).
+* Escribe una **funci贸n de la operaci贸n de path** (como `def root(): ...` arriba).
+* Corre el servidor de desarrollo (como `uvicorn main:app --reload`).