Desarrollo de API con Uvicorn y FastAPI en Python

Desarrollo de API con Uvicorn y FastAPI en Python

Introducción

En este tutorial aprenderemos a desarrollar una API REST con Uvicorn y FastAPI en Python. Uvicorn es un servidor web ASGI (Asynchronous Server Gateway Interface) que se utiliza para ejecutar aplicaciones FastAPI. FastAPI es una librería de Python que facilita el desarrollo de API REST.

Requisitos

Para seguir este tutorial, necesitarás tener instalado Python 3.7 o superior. También necesitarás instalar Uvicorn y FastAPI:

pip install uvicorn
pip install fastapi

Creación de un proyecto

Comenzaremos creando un proyecto nuevo:

mkdir api-tutorial
cd api-tutorial

Ahora crearemos un archivo main.py con el siguiente código:

Python
from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def root():
    return {"message": "Hello, world!"}

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

Este código crea una API REST simple que expone una ruta / que devuelve el mensaje «Hello, world!».

Ejecutando la API

Para ejecutar la API, ejecutamos el siguiente comando:

uvicorn main:app --reload

Este comando iniciará el servidor web Uvicorn en el puerto 8000.

Probando la API

Para probar la API, podemos usar la herramienta curl:

curl http://localhost:8000

Esto debería devolver el siguiente resultado:

{"message": "Hello, world!"}

Añadiendo rutas adicionales

Podemos añadir rutas adicionales a nuestra API creando nuevas funciones que devuelvan los datos deseados. Por ejemplo, podemos añadir una ruta /users que devuelva una lista de usuarios:

Python
@app.get("/users")
def users():
    return [
        {"name": "John Doe", "age": 30},
        {"name": "Jane Doe", "age": 25},
    ]

Para probar esta nueva ruta, podemos usar el siguiente comando:

curl http://localhost:8000/users

Esto debería devolver el siguiente resultado:

[{"name": "John Doe", "age": 30}, {"name": "Jane Doe", "age": 25}]

Validación de datos

FastAPI permite validar los datos que se reciben en las peticiones. Por ejemplo, podemos validar que la edad de un usuario sea un número entero mayor que 0:

Python
@app.post("/users")
def create_user(user: User):
    if user.age < 1:
        raise HTTPException(status_code=422, detail="Age must be greater than 0")

    return user

Este código define una función create_user() que crea un nuevo usuario. La función utiliza un objeto User para representar los datos del usuario. El decorador @app.post("/users") indica que esta función se utiliza para procesar peticiones POST a la ruta /users.

El objeto User tiene un campo age que debe ser un número entero. La función create_user() utiliza la validación de datos de FastAPI para comprobar que la edad del usuario es mayor que 0. Si la edad es menor que 0, la función lanza una excepción HTTP 422.

Documentación de la API

FastAPI genera automáticamente documentación para la API. Podemos acceder a la documentación de nuestra API en la siguiente dirección:

http://localhost:8000/docs

Esta documentación incluye información sobre las rutas, los parámetros y los tipos de datos de la API.

Conclusión

En este tutorial hemos aprendido a desarrollar una API REST con Uvicorn y FastAPI en Python. FastAPI es una librería muy potente que facilita el desarrollo de API REST.