Saltar al contenido
Introducción

En el mundo actual, las APIs (Interfaces de programación de aplicaciones) se están convirtiendo en la columna vertebral de muchas aplicaciones web modernas y de empresas en línea. Flask es un framework de Python que permite la creación de aplicaciones web y por tanto la implementación de APIs. La elaboración de una API en Flask se basa en crear una estructura esencial para manejar las diferentes solicitudes y respuestas HTTP que recibirán los clientes de la aplicación. Esto implica definir rutas, métodos HTTP, datos de entrada y salida, servicios conectados y seguridad. Una vez se establece el diseño de la API, se implementan los endpoints que definirán los recursos, como los datos que se van a ingresar, consultar, actualizar o borrar.

La implementación de estas solicitudes se lleva a cabo mediante el uso de funciones en Flask y módulos específicos de Python. Crear una API en Flask puede parecer complejo al principio, pero una vez que se comprenden los principios básicos, se pueden desarrollar aplicaciones web robustas y escalables. La implementación de APIs en Flask se está convirtiendo en una habilidad cada vez más demandada, tanto en proyectos personales como empresariales.

Resumen

Para implementar APIs en Flask, se siguen los siguientes pasos:

  1. Instalar las bibliotecas necesarias: Flask y Flask-Restful. Flask es el marco web en sí, mientras que Flask-Restful proporciona herramientas para crear APIs REST (Representational State Transfer).
  2. Configurar una clase de recurso: Un recurso es cualquier objeto en nuestra aplicación a la que se puede acceder a través de una URL. Por ejemplo, si estamos construyendo una API para una tienda en línea, los productos y carritos de compras son recursos.
  3. Agregar métodos a la clase de recurso: Flask-Restful utiliza métodos de HTTP para exponer acciones CRUD (Crear, Leer, Actualizar, Eliminar) en sus recursos.
  4. Agregar funciones de devolución de llamada: Los métodos en Flask-Restful están vinculados a las funciones que realizan la operación solicitada. Por ejemplo, el método `get` para un recurso se vincula a un método `get` en la clase de recurso que define cómo obtener un recurso.
  5. Configurar formato de respuestas: Los recursos pueden devolver piezas de datos en diversos formatos, como JSON, HTML, XML. Flask-Restful es compatible con varios formatos de respuesta, y podemos seleccionar el formato que mejor se adapte a nuestras necesidades.
  6. Agregar rutas y ejecutar la aplicación: Una vez que tenemos los componentes esenciales de nuestra API en su lugar, necesitamos definir las rutas que apuntan a nuestros recursos. Flask utiliza decoradores para definir rutas (`@app.route('/ruta')`), y Flask-Restful utiliza la misma sintaxis, por lo que solo necesitamos agregar nuestros recursos a nuestra aplicación Flask y definir sus rutas.

Con estos pasos podemos implementar APIs en Flask. Las APIs creadas con Flask-Restful son fáciles de mantener, escalables y fáciles de usar. Además, proporcionan opciones para la autenticación y la autorización de usuarios, lo que hace que las APIs sean seguras y confiables.

Aplicación teórica

Imagina que estás construyendo un sitio web donde los usuarios pueden buscar restaurantes cercanos y ver sus menús. Para ello, necesitas acceder a la información sobre los restaurantes y los menús de alguna fuente. Una solución sería construir tu propia base de datos, pero esto sería demasiado costoso y requeriría actualizaciones frecuentes. Una opción más práctica sería integrar tu sitio web con una API pública de restaurantes. Aquí es donde entra Flask como un marco de trabajo para construir una API con Python. Con Flask, puedes fácilmente crear rutas, definir métodos HTTP, y enviar respuestas en formato JSON. Por ejemplo, podrías crear una ruta que respondiera a una solicitud GET con información sobre un restaurante específico utilizando Flask. Es decir, si el usuario introduce el nombre del restaurante en el sitio web, el servidor Flask debería buscar la información usando la API pública, formatear la respuesta en JSON y devolver los datos al navegador para que los muestre. Para construir esto en Flask, puedes hacer uso de las bibliotecas de solicitudes de Python para acceder a la API pública, y luego usar la biblioteca de serialización JSON para convertir los datos en un formato comprensible para el navegador. También puedes usar herramientas adicionales de Flask, como el sistema de plantillas Jinja2, para dar formato a la salida y hacer que los datos se vean más atractivos para los usuarios. Con la API en su lugar, los usuarios podrían buscar restaurantes cercanos a ellos y ver sus menús, sin que tenga que construir y mantener una costosa base de datos. Y lo mejor es que todo esto se puede hacer con unas pocas líneas de código en Python gracias a Flask.

Aplicación práctica

Un ejemplo práctico de cómo implementar una API básica en Flask:

from flask import Flask, jsonify

# creación de objeto Flask
app = Flask(__name__)

# datos de ejemplo para nuestra API
books = [
    {"id": 1, "title": "The Great Gatsby", "author": "F. Scott Fitzgerald"},
    {"id": 2, "title": "To Kill a Mockingbird", "author": "Harper Lee"},
    {"id": 3, "title": "1984", "author": "George Orwell"}
]

# ruta principal de la API
@app.route('/books')
def get_books():
    return jsonify(books)  # convierte los datos a JSON y los envía al usuario

# búsqueda de un libro por ID
@app.route('/books/')
def get_book(book_id):
    book = [b for b in books if b['id'] == book_id]
    if len(book) == 0:
        return jsonify({"error": "Book not found"}), 404  # devuelve un error 404 si no se encuentra el libro
    return jsonify(book[0])

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

Explicación:

  • Importamos Flask y jsonify, que es una función de Flask que nos permite enviar datos en formato JSON.
  • Creamos un objeto de Flask llamado "app".
  • Creamos una lista de libros, que será nuestra base de datos para esta API.
  • Creamos dos rutas de la API:
    • "/books" devuelve todos los libros que hay en la base de datos.
    • "/books/<int:book_id>" devuelve el libro correspondiente al ID que proporciona el usuario.
  • Cuando se llama a cualquiera de estas rutas, Flask ejecuta la función correspondiente y devuelve los datos en formato JSON al usuario.
  • El ejemplo se ejecuta en modo de depuración, lo que significa que si hay errores, Flask los mostrará en la consola.