# Creando una API con Python y Flask para dialogar contra MySQL

En esta ocasión vamos a crear una **API**, como dice el titulo, para interactuar con nuestra base de datos **MySQL**. La idea es poder agregar, modificar o eliminar registros a través de nuestra API (Application Programming Interface). Para ello utilizaremos **Python** y **Flask** que es un “micro” Framework concebido para facilitar el desarrollo de Aplicaciones Web. Ademas utilizaremos **Flask-SQLAlchemy** una herramienta hecha en **Python**, que es un Toolkit y ORM que da a los desarrolladores poder total y flexibilidad sobre SQL junto con **Flask-marshmallow** que convertirá los objetos ORM en JSON.

Vamos a crear una base de datos, en MySQL, con las siguientes tablas. Las mismas se crearan automáticamente por ORM. Esta sera la estructura, de la tabla.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-4.png align="center")

Acá un bosquejo de la arquitectura, con sus diferentes componentes.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/Merediths-80th-1.png align="center")

## Instalación de Componentes

Podemos instalar Flask-SQLAlchemy y Flask-marshmallow de una manera sencilla, utilizando pip. Antes que nada, hacemos un update && upgrade, de nuestro sistema. En mi caso voy a realizar la PoC con Ubuntu Server.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-1.png align="center")

Vamos a instalar la base de datos MySQL junto con las librería de Python. Para estos fines, didácticos, voy a permitir todo. Sera necesario crear una base de datos, yo la llamo test\_api, para que flask\_sqlalchemy cree las tablas, necesarias, en base a los parámetros que indicaremos, mas adelante, en el código.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-2.png align="center")

## Creación del Código

Ya tenemos todo preparado. Vamos a comenzar con el código, aquí les dejo el [repositorio](https://github.com/safernandez666/API/blob/master/app.py) en GitHub. Veamos el proyecto, completo, pero vamos a desmenuzarlo un poco, mas adelante.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon-6.png align="center")

En la primer parte veremos las librerías, necesarias, como también la configuración a Base de Datos. Les dejo, comentada, la de SQLite. La idea era realizarla con MySQL por la cantidad de proyectos en la que nos podemos encontrar con ella.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon.png align="center")

En la siguiente parte, vemos como declaramos un modelo llamado User y definimos su campos con sus propiedades.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/carbon1.png align="center")

En el código, restante, nos encontraremos con las rutas necesarias para gestionar la Base de Datos.

Vamos a verlo trabajar, con los diferentes verbos **HTTP**. Voy a describir los pasos, para luego verlos del lado del Servidor y del Cliente.

Listar los usuarios. «GET»

Agregar Usuarios. «POST»

Modificar Usuario, por ID. «PUT»

Eliminar Usuario, por ID. «DELETE»

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/2019-03-07-14_11_34-santiago@ubuntu_-.png align="center")

Acá los comandos cURL, para la gestión de la base por HTTP.

![](https://blog.santiagoagustinfernandez.com/wp-content/uploads/2019/03/VirtualBox_Ubuntu-Desktop_07_03_2019_14_12_24.png align="center")

Por ahora esto es todo. Espero que les sirva. En la próxima parte, vamos agregarle seguridad.

Saludos!
