Flask RESTPlus

por Halí - publicado: enero 24, 2019
PythonFlaskAPI

Si ya tienes el entorno listo para alojar una aplicación web escrita en Python (si no, puedes verlo en esta publicación), entonces te preguntarás como escribir dicha aplicación.

Desde hace un tiempo, me volví aficionado a crear APIs, así que les mostraré cómo hacer una en Python.

Prerrequisitos

  • Python (Usé Python 3.7)
  • WSGI para Apache

Instrucciones

Comenzaremos activando el entorno virtual que creamos en la publicación anterior: env\Scripts\activate y una vez activado, instalamos el módulo que nos hace falta:

pip install flask-restplus

¡Código!

Ahora comenzaremos con el código necesario para los endpoints de la API, primero el código para los recursos.

# Importamos los archivos necesarios.
from flask_restplus import (Resource)
from flask import (abort)

# Creamos un diccionario, en este caso se
# llamará `tasks` y es una lista con dos objetos.
tasks = [
    {
      'id': 1,
      'title': u'Comprar cosas',
      'description': u'Leche, Queso, Pizza, Fruta',
      'done': False
    },
    {
      'id': 2,
      'title': u'Aprender python',
      'description': u'Encontrar un buen tutorial',
      'done': False
    },
]

# Después, creamos dos clases, una que devuelve la lista de las tareas y otra
# que devuelve una basandose en su id.
class TasksList(Resource):
    def get(self):
        # Devolvemos la lista con el código http 200
        return tasks, 200

class Task(Resource):
    def get(self, task_id):
        # Buscamos la tarea por su id
        task = [task for task in tasks if task['id'] == task_id]
        # Si no encontramos ninguna, devolvemos el código 404
        if len(task) == 0:
            abort(404)
        # Si encontramos algo, devolvemos la tarea con el código 200
        return task[0], 200

Ahora, tenemos que integrarlo en la aplicación que se ejecutará en el servidor

Agregamos los recursos y ¡listo!

# Importamos los archivos necesarios
from flask import (Flask)
from flask_restplus import (Api)

import resources

app = Flask(__name__)

# Le ponemos el prefijo «v1» a la API
api = Api(app, prefix='/v1', catch_all_404s=True)

# Agregamos las rutas a los recursos en la API
api.add_resource(resources.TasksList, '/tasks')
api.add_resource(resources.Task, '/tasks/<int:task_id>')

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

También puedes encontrar el código en el siguiente gist.