Desarrollo de API REST en Python con FastAPI y MySQL

Desarrollo de API REST en Python con FastAPI y MySQL

En este tutorial, aprenderemos a desarrollar una API REST en Python utilizando FastAPI y MySQL. FastAPI es un framework web de Python que facilita el desarrollo de APIs RESTful. MySQL es un sistema de gestión de bases de datos relacionales (RDBMS) que se utiliza para almacenar datos de aplicaciones web.

Requisitos previos

Para seguir este tutorial, necesitarás lo siguiente:

  • Una instalación de Python 3.8 o superior
  • Un entorno virtual Python
  • Una base de datos MySQL

Creación de un entorno virtual Python

Un entorno virtual Python es una forma de aislar los paquetes de Python de otros proyectos. Para crear un entorno virtual, ejecuta el siguiente comando en la terminal:

python -m venv .venv

Esto creará un directorio llamado .venv en el directorio actual. Para activar el entorno virtual, ejecuta el siguiente comando:

source .venv/bin/activate

Instalación de FastAPI y MySQL Connector

Para instalar FastAPI, ejecuta el siguiente comando en la terminal:

pip install fastapi

Para instalar MySQL Connector, ejecuta el siguiente comando en la terminal:

pip install mysql-connector-python

Creación de un modelo de datos

El primer paso es crear un modelo de datos para nuestra base de datos. El modelo de datos define la estructura de los datos que almacenaremos en la base de datos.

Vamos a crear un modelo de datos simple para una tabla de usuarios. El modelo tendrá los siguientes campos:

  • id: Un identificador único para cada usuario
  • nombre: El nombre del usuario
  • apellido: El apellido del usuario
  • correo electrónico: La dirección de correo electrónico del usuario

Para crear el modelo de datos, crea un archivo llamado models.py y agrega el siguiente código:

Python
from sqlalchemy import Boolean, Column, Integer, String, create_engine

class User(BaseModel):
    id = Column(Integer, primary_key=True)
    nombre = Column(String(100))
    apellido = Column(String(100))
    correo_electronico = Column(String(100))

BaseModel.metadata.create_all(engine)

Este código crea una clase User que hereda de la clase BaseModel de SQLAlchemy. La clase BaseModel proporciona una serie de métodos y atributos para trabajar con modelos de datos.

La clase User tiene los siguientes campos:

  • id: Un campo Integer que es el identificador único para cada usuario
  • nombre: Un campo String que contiene el nombre del usuario
  • apellido: Un campo String que contiene el apellido del usuario
  • correo_electronico: Un campo String que contiene la dirección de correo electrónico del usuario

El método create_all() crea las tablas de la base de datos.

Creación de una conexión a la base de datos

Ahora que tenemos un modelo de datos, necesitamos crear una conexión a la base de datos.

Para crear una conexión a la base de datos, crea un archivo llamado config.py y agrega el siguiente código:

Python
import os

DB_HOST = os.getenv("DB_HOST", "localhost")
DB_PORT = os.getenv("DB_PORT", 3306)
DB_DATABASE = os.getenv("DB_DATABASE", "mi_base_de_datos")
DB_USERNAME = os.getenv("DB_USERNAME", "root")
DB_PASSWORD = os.getenv("DB_PASSWORD", "")

engine = create_engine(
    f"mysql+pymysql://{DB_USERNAME}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_DATABASE}"
)

Este código establece las siguientes variables de entorno:

  • DB_HOST: La dirección del host de la base de datos
  • DB_PORT: El puerto de la base de datos
  • DB_DATABASE: El nombre de la base de datos
  • DB_USERNAME: El nombre de usuario de la base de datos
  • DB_PASSWORD: La contraseña de la base de datos

El código también crea una conexión a la base de datos utilizando la biblioteca MySQL Connector.

Creación de una API REST

Ahora que tenemos una conexión a la base de datos