Guía Paso a Paso para Crear una API REST con Flask y SQLAlchemy en Python

Guía Paso a Paso para Crear una API REST con Flask y SQLAlchemy en Python

Tutorial API REST Flask: Cómo Crear una API RESTful con Python y SQLAlchemy

Introducción

En este tutorial API REST Flask, te guiaremos paso a paso para construir una API RESTful usando Flask y SQLAlchemy en Python. Esta guía está diseñada para desarrolladores principiantes e intermedios interesados en el desarrollo backend Flask. Aprenderás desde la instalación del entorno hasta la creación de rutas para operaciones CRUD, el manejo de errores y la validación, hasta las pruebas básicas con Postman y curl.


Contenido


Instalación y configuración del entorno

1. Crear entorno virtual

Antes de comenzar, es una buena práctica usar un entorno virtual para aislar las dependencias del proyecto.

2. Instalar dependencias

Instalaremos Flask para el framework web y SQLAlchemy para la gestión de la base de datos, junto con Flask-SQLAlchemy que integra ambos.

Para pruebas más adelante, recomendamos instalar además:

Opcional: Instala psycopg2 si usas PostgreSQL, o solo para pruebas SQLite no necesitas nada extra.

Creación y configuración de la aplicación Flask

1. Estructura básica del proyecto

Organiza los archivos de manera sencilla:

2. Archivo principal app.py

Crea el archivo app.py y configura la aplicación Flask y la base de datos:

3. Inicializar base de datos

Antes de continuar, crea la base de datos ejecutando el shell de Python dentro del entorno y crea las tablas:

Definición de modelos con SQLAlchemy

Los modelos definen la estructura de los datos en la base de datos.

1. Crear archivo models.py

2. Importar el modelo a app.py

Para que nuestro modelo pueda registrarse y ser utilizado:

Recuerda ejecutar db.create_all() para crear las tablas según tu modelo.

Implementar rutas para operaciones CRUD

Definiremos las rutas necesarias para Crear, Leer, Actualizar y Eliminar (CRUD) Items.

1. Crear un nuevo Item (POST)

2. Obtener todos los Items (GET)

3. Obtener un Item por ID (GET)

4. Actualizar un Item (PUT)

5. Eliminar un Item (DELETE)

Manejo de errores y validaciones

1. Uso de get_or_404

Flask-SQLAlchemy incluye get_or_404 que retorna un error 404 si no se encuentra el recurso, evitando código adicional.

2. Validación básica

Validamos la presencia del campo name tanto en creación como actualización para evitar errores.

3. Personalizar mensajes de error

Puedes manejar errores personalizados con decoradores:

Pruebas básicas de la API

Para probar tu API REST Flask, puedes usar Postman o la terminal usando curl.

1. Probar con curl

  • Crear un Item:

  • Obtener todos los Items:

  • Obtener un Item por ID:

  • Actualizar un Item:

  • Eliminar un Item:

2. Probar con Postman

  • Importa la URL base http://127.0.0.1:5000/
  • Crea peticiones HTTP con los métodos POST, GET, PUT, DELETE
  • Define JSON en el body para POST y PUT

Conclusión y buenas prácticas

Has aprendido a crear una API RESTful básica usando Flask y SQLAlchemy, desde la configuración hasta las operaciones CRUD, manejo de errores y pruebas.

Buenas prácticas para desarrollar tu API REST Flask:

  • Usa entornos virtuales para manejar dependencias.
  • Separa la lógica en archivos: modelos, rutas, configuración.
  • Valida siempre los datos recibidos para evitar errores en la base de datos.
  • Maneja errores de forma amigable para que quien consuma la API tenga claridad.
  • Añade documentación o comentarios para facilitar el mantenimiento.
  • Usa herramientas como Postman para testear y automatizar pruebas.

Próximos pasos sugeridos:

  • Añadir autenticación con tokens JWT.
  • Implementar paginación para grandes volúmenes.
  • Usar migraciones con Flask-Migrate para gestionar base de datos.
  • Desplegar tu API en servicios como Heroku o AWS.

¡Empieza a construir tus propias APIs backend con Python usando Flask y SQLAlchemy! Explora más y profundiza en desarrollo backend Flask para ampliar tus habilidades profesionales y crear proyectos robustos.

¡Manos a la obra y éxito en tu aprendizaje!