Programación

Flask: desarrolla API Rest rápidamente

Hace algún tiempo que aprendí a programar en Python, y la cantidad de librerías que tiene es alucinante. Personalmente, siempre he sido partidario de desarrollar mis API Rest en NodeJS o Java (utilizando Spring Boot, por ejemplo). Tras aprender este lenguaje de programación para mi Trabajo de Fin de Grado, un amigo me comentó que para la API Rest utilizara Flask, por su sencillez. Flask es un microframework de Python para el desarrollo de este tipo de servicios web, que agiliza el proceso de desarrollo debido a su sencillez.

Flask, el microframework de Python para web

Si estáis familiarizados con NodeJS, sabréis que, además de hacer de framework para API Rest, sirve para renderizar plantillas y desarrollar rápidamente una web. Flask no es la excepción, también cuenta con un motor de plantillas: Jinja, pero esto lo dejaré para otro artículo. En este solamente me centraré en explicaros cómo desarrollar una API Rest rápidamente con Flask.

logo flask

Para seguir este tutorial, es necesario contar con tu IDE favorito (o un editor de texto). En mi caso utilizo PyCharm, el IDE para Python de Jetbrains, creadores del famoso IntelliJ.

Una vez tengamos nuestro IDE, necesitaremos instalar todas las librerías necesarias para seguir con este pequeño manual. Estas librerías se instalan con pip, el gestor de dependencias de Python. Dependiendo de la versión que se utilice se instalará para Python 3 o 2.7. Como yo tengo las dos versiones de este lenguaje instaladas, utilizaré pip3 para Python 3. En primer lugar, es necesario instalar Flask. Para ello, ejecutamos el siguiente comando en una terminal del sistema:

 pip3 install Flask 

Esto se puede realizar sobre un entorno virtual, pero como yo lo utilizo a menudo, me salto este paso y lo instalo directamente en el sistema.

Para comenzar a trabajar con Flask, crearemos en Pycharm un proyecto Python vacío, dándole el nombre deseado, tal y como podemos observar en la siguiente imagen:

creación del proyecto flask

Cuando se cree el proyecto, con el botón derecho crearemos un nuevo fichero Python, al que llamaremos app.py. Este archivo es sobre el que trabajaremos. En primer lugar, para ver el funcionamiento de Flask, escribiremos el siguiente código:


from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

Si ejecutamos con botón derecho -> run app.py. se arrancará el proyecto, accesible mediante la dirección http://localhost:5000/. También se puede ejecutar mediante python3 app.py.

Realizando un CRUD en la API Rest

Una vez que hemos visto el funcionamiento de este framework de Python, procederemos a crear diferentes endpoints, que simularán un CRUD de usuarios. Para ello utilizaremos el módulo requests de Flask, que permite obtener el cuerpo de las peticiones. También haremos uso del módulo json de Python, ya que enviaremos las respuestas en formato JSON. Cabe decir que también se pueden devolver en XML, e incluso en las dos, utilizando QueryParams y solicitando el formato, pero esto es algo más complejo y no es la finalidad de este pequeño tutorial.

 

from flask import Flask
from flask import request
import json

app = Flask(__name__)

"""
    Creamos una lista para almacenar los usuarios
"""
usuarios = []

usuario = dict()

"""
    Usuario por defecto
"""
usuario['nombre'] = "Cristian"
usuario['apellido'] = "Dominguez"
usuario['email'] = "crisdomgo@gmail.com"

# Lo introducimos
usuarios.append(usuario)

"""
    En la ruta / devolvemos TODOS los usuarios
    O insertamos
"""
@app.route('/', methods=['GET', 'POST'])
def get_usuarios():
    if request.method == 'GET':
        return json.dumps(usuarios)
    elif request.method == 'POST':
        usuarios.append(request.json) #Introducimos los datos
        return request.data # Devolvemos el usuario insertado
"""
    en la ruta /email devolveremos cuyo email sea recibido 
    por parametro. Borramos o actualizamos
"""
@app.route('/<email>', methods=['GET', 'PUT', 'DELETE'])
def get_user(email):
    if request.method == 'GET':
        toReturn = None
        # Recorremos los usuarios
        for element in usuarios:
            if element['email']==email:
                toReturn = element
        if toReturn is not None: # Si no es null
            return json.dumps(toReturn)
        else:
            return json.dumps('Not Found') # Si lo es devolvemos no encontrado

    elif request.method == 'PUT':
        for idx,element in enumerate(usuarios):
            if element['email'] == email:
                usuarios[idx] = request.json
                return request.data # Devolvemos el insertado
        return json.dumps('error')
    elif request.method == 'DELETE':
        for element in usuarios:
            if element['email'] == email:
                usuarios.remove(element)
                return json.dumps('deleted')
        return json.dumps("error")



if __name__ == '__main__':
    app.run(host="127.0.0.0", port="5000")

 

Cómo probar los endpoint definidos

Para probar los endpoints definidos en el código anterior, se puede utilizar Postman, una pequeña aplicación de escritorio, pero muy completa. En un futuro os hablaré de ella, ya que es increíble para testing de API Rest y que, además, genera el código para clientes en diferentes lenguajes.

Por otro lado, también está Restlet, que es una extensión de Chrome y que he utilizado durante mucho tiempo.

Si vais a probar los POST o los UPDATE (PUT), no olvidéis matener el siguiente formato de JSON:

{"nombre": "nombre", "apellido": "apellido", "email": "email"}

Conclusiones

Creo que Python ofrece una versatilidad increíble. Una prueba de ello es la rapidez con la que se puede generar una API Rest gracias a Flask. Evidentemente, esto es una API muy sencillita, pero se puede extender utilizando conexión con bases de datos gracias a la DB API de Python. Esta parte os la dejo a vosotros 😉

Espero que el código se entienda bien, ya que Python es muy sencillo. Si no entendéis algo, no dudéis en dejármelo en los comentarios y os contestaré lo más rápido posible.

Algo bastante interesante es que, existen contenedores de Docker que ya cuentan con todo lo necesario instalado, por lo que te ahorras la instalación en tu equipo de Python incluso.

¿Y a ti qué te parece Flask? ¡Cuéntamelo en los comentarios!

 

 

Tags

2 thoughts on “Flask: desarrolla API Rest rápidamente”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Close

Adblock Detected

Por favor, desactiva tu adblock