Cómo Configurar una Aplicación de Fast API con una Base de Datos NoSQL

Introducción

Cuando se desarrollan aplicaciones en Python, FastAPI destaca como una opción de primer nivel para construir soluciones de alto rendimiento. Ofrece velocidad, simplicidad y soporte para programación asíncrona, lo que lo hace ideal para desarrollar aplicaciones modernas y escalables.
En este tutorial, le guiaremos a través del proceso de configuración de una aplicación FastAPI con una base de datos NoSQL. Cuando se trata de almacenar y administrar datos, las bases de datos NoSQL ofrecen flexibilidad y escalabilidad, lo que las hace un gran ajuste para aplicaciones que necesitan manejar estructuras de datos diversas y complejas.

Prerrequisitos

Antes de comenzar, necesitará asegurarse de tener lo siguiente:

  • Un servidor ejecutando Ubuntu junto con un usuario no root que tenga privilegios de sudo y una cortina activa. Para obtener orientación sobre cómo configurar esto, por favor elija su distribución de la lista y siga nuestra guía de configuración inicial del servidor. Asegúrese de trabajar con una versión compatible de Ubuntu.

  • Familiaridad con la línea de comandos de Linux. Para una introducción o recuperación de la línea de comandos, puede visitar esta guía sobre primer contacto con la línea de comandos de Linux.

  • Ejecute sudo apt-get update en el terminal de Ubuntu para asegurar que su sistema tenga las últimas versiones y actualizaciones de seguridad para el software disponible en los repositorios configurados en su sistema.

Estas instrucciones son válidas para las versiones más recientes de Ubuntu: Ubuntu 24.04, Ubuntu 22.04 y Ubuntu 20.04. Si estás utilizando una versión de Ubuntu <= 18.04, te recomendamos actualizar a una versión más actualizada ya que Ubuntu ya no proporciona soporte para estas versiones. Esta colección de guías te ayudará a actualizar tu versión de Ubuntu.

Paso 1 – Configurar el Entorno de Python en tu Máquina

A lo largo de este tutorial, utilizaremos el paquete python3 para ejecutar comandos. Las últimas versiones de Ubuntu vienen con la instalación de Python 3, así que para verificar su instalación, ejecuta el siguiente comando:

python3 --version

En caso de que esto devuelva un error, puedes instalar/reinstalar el paquete ejecutando:

sudo apt-get install python3

A continuación, necesitas instalar pip para instalar paquetes de Python y sus dependencias de manera segura.

sudo apt-get install python3-pip

Paso 2 – Crear Entorno Virtual

Si estás utilizando una versión de Ubuntu < 24.04, no necesitas crear un entorno virtual, pero es una buena práctica separar las dependencias de tu proyecto.

A partir de Python 3.11 y pip 22.3, hay una nueva PEP 668 que establece la marcación de entornos base de Python como “gestionados externamente”, lo que significa que no podrás instalar correctamente paquetes con pip a menos que trabajes dentro de un entorno virtual.

En este paso, crearás un entorno virtual para tu proyecto que aislará las dependencias de tu proyecto para evitar conflictos potenciales entre diferentes versiones de paquetes. Ejecuta el siguiente conjunto de órdenes en la terminal:

sudo apt-get install python3-venv

Esto instalará el paquete requerido venv necesario para crear un entorno virtual.

python3 -m venv fastapi-env

Este comando creará un entorno virtual fastapi-env dentro de tu directorio de trabajo. Para comenzar a trabajar dentro de este entorno, necesitas activarlo.

source fastapi-env/bin/activate

Después de ejecutar correctamente la orden, verás que la提示 de la terminal se precede así:

(fastapi-env) user@machine:~$

Ahora, puedes empezar a instalar las dependencias requeridas en este entorno virtual.

Paso 3 – Instalar bibliotecas y paquetes requeridos

En este paso, instalarás algunos paquetes y bibliotecas que son necesarios para seguir este tutorial correctamente.

Vamos a empezar instalando fastapi, que es necesario para construir su aplicación de FastAPI, y uvicorn, que es necesario para ejecutar la aplicación de FastAPI.

pip install fastapi uvicorn

En este tutorial, utilizaremos MongoDB como base de datos NoSQL. Para interactuar con MongoDB desde dentro de su FastAPI, necesita instalar motor, que es un controlador asíncrono de Python para MongoDB.

pip install motor

Paso 4 – Instalar y Configurar MongoDB en Ubuntu

Para instalar MongoDB en su máquina Ubuntu, ejecute en terminal el conjunto de comandos siguiente:

wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo gpg --dearmor -o /usr/share/keyrings/mongodb-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/mongodb-archive-keyring.gpg] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

Al ejecutar correctamente esto, devuelve el parámetro echo. Ahora, haga un quick:

sudo apt-get update

Esto asegurará que obtenga las últimas actualizaciones después de configurar las claves de MongoDB.

Después, necesitará instalar una dependencia de openssl en su sistema, que es necesario para la instalación de MongoDB.

wget http://archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb

Al ejecutar, se le pedirá que reinicie los servicios. Después de reiniciar, instale MongoDB usando el siguiente comando:

sudo apt-get install -y mongodb

Inicie y active los servicios de MongoDB:

sudo systemctl start mongod
sudo systemctl enable mongod

Puede ver el estado del servicio de MongoDB y probar la conexión ejecutando los siguientes comandos:

sudo systemctl status mongod
mongo --eval 'db.runCommand({connectionStatus: 1})'

Paso 5 – Crear Aplicación FastAPI

El siguiente paso es crear una aplicación FastAPI. En tu directorio de trabajo, crea un archivo database.py:

nano database.py

Esto abre un editor de texto vacío. Escribe aquí tu lógica de conexión a la base de datos.

database.py
from motor.motor_asyncio import AsyncIOMotorClient

MONGO_DETAILS = "mongodb://localhost:27017"

client = AsyncIOMotorClient(MONGO_DETAILS)

db = client.mydatabase

collection = db.mycollection

Suponiendo que la mycollection de mydatabase está poblada con algún tipo de datos, ahora creas un main.py que contiene la lógica de tu aplicación. En la siguiente aplicación FastAPI, se establece una conexión a la base de datos usando database.py se definen las rutas para las predicciones por AI. Usando estas rutas, se validan las entradas.

nano main.py

En el editor de texto, escribe la lógica:

main.py
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from sklearn.linear_model import LinearRegression
import numpy as np
from database import collection

app = FastAPI()

# simple dataset y model
x = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

model = LinearRegressions()
model.fit(x, y)

# define el modelo Pydantic para la validación de entrada
class InputData(BaseModel):
  feature: float

# route_1 para predecir la salida basada en la característica de entrada
@app.post("/predict/")
async def predict(input_data: InputData):
  try:
    prediction = model.predict([[input_data.feature]])
    return {"prediction": prediction[0]}
  except Exception as ex:
    raise HTTPException(status_code=400, detail=str(ex))

# route_2 para interactuar con MongoDB
@app.get("/items/")
async def get_item():
  items = []
  async for item in collection.find():
    items.append(item)
  return items

# route_3 para agregar un nuevo elemento a MongoDB
@app.post("/items/")
async def create_item(item: dict):
  new_item = await collection.insert_one(item)
  created_item = await collection.fine_one({"_id": new_item.inserted_id})
  return created_item

Aquí hay un resumen de lo que hace esta aplicación:

  • Modelo de Regresión Lineal de sklearn: Este modelo predice una salida basada en una sola característica de entrada.
  • Datos de Entrada de Modelo de Pydantic: Esto define la estructura de entrada esperada para el punto final de predicción. En este caso, es un float.
  • Rutas de MongoDB: Las rutas /items/ y POST /items/ le permiten recuperar y insertar elementos en su colección de MongoDB.

Paso 6 – Ejecutar Aplicación de FastAPI

Para ejecutar correctamente esta aplicación, necesita instalar las bibliotecas y paquetes utilizados en la aplicación.

pip install pydantic scikit-learn numpy

Ahora, use el siguiente comando para ejecutar esta aplicación:

uvicorn main:app --reload

La salida de este comando será:

Output
INFO: Will watch for changes in these directories: ['/path/to/your/project'] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [XXXXX] using statreload INFO: Started server process [XXXXX] INFO: Waiting for application startup. INFO: Application startup complete.

FastAPI ha generado automáticamente una documentación interactiva de API utilizando Swagger UI. Puede acceder a ella navegando a http://127.0.0.1:8000/docs.

Puede utilizar herramientas como curl o Postman para llamar al punto final que predice un valor basado en su entrada.

curl -X POST "http://127.0.0.1:8000/predict/" -H "Content-type: application/json" -d '{"feature": 3}'

Paso 7 [OPCIONAL] – Ejecutar Aplicación Utilizando Docker Compose

Puede contenedorizar su aplicación y ejecutarla usando docker-compose. Contenedorizar su aplicación simplifica el proceso de deploy por hacer que su aplicación sea más fácil de deployar, escalar y mantener. Para definir su aplicación como un Dockerfile, siga los pasos mencionados en Deploy FastAPI Application using Docker Compose.

Conclusión

En este tutorial, aprendió cómo configurar exitosamente una aplicación FastAPI con MongoDB, creando una simple app basada en AI capaz de almacenar y recuperar predicciones de entrada.

La combinación de FastAPI y una base de datos NoSQL ofrece un entorno poderoso y flexible para construir y escalar aplicaciones basadas en AI.

Source:
https://www.digitalocean.com/community/tutorials/set-up-fastapi-app-with-nosql-db