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:
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:
@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:
@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.