admin

Desarrollo de APIs RESTful con Flask: Tutorial Completo

APIs RESTful, Desarrollo de APIs, Flask, Microframework Python, Tutorial de Desarrollo

Este tutorial explica cómo crear un API REST en Python usando Flask.1 Te muestra los pasos principales. Además, incluye un ejemplo y extenciones para hacer el desarrollo más simple.

A diferencia de una página web, el corazón de un API REST son los recursos. Cada recurso es un objeto o dato al que puede acceder un cliente. Estos se exponen a través del API, con métodos y URLs para accederlos o modificarlos.1

Crearemos un API en Flask. Será para un catálogo de películas que guardamos en una base de datos Sqlite. Podrás usar este API en apps móviles, sitios web hechos en Javascript, servicios, etc.

Conclusiones clave

  • Este tutorial es una guía completa para hacer un API REST en Python con Flask.
  • Usaremos extensiones como Flask-Restful y Flask-Marshmallow para hacer el desarrollo más sencillo.1
  • Flask es muy fácil de usar. Es ideal para crear APIs RESTful.1
  • La estructura del proyecto será muy ordenada, como en otros proyectos en Flask.
  • Crearemos modelos de base de datos, esquemas de serialización. También recursos para manejar un catálogo de películas.

¿Por qué un API REST con Flask?

Flask es un framework escrito en Python, perfecto para crear APIs y otras aplicaciones web1. Se destaca por su simplicidad y las ventajas que aporta. Así, resulta ser una excelente opción para el desarrollo de soluciones basadas en APIs1.

Hay diversas formas de crear un API REST en Flask. Puedes optar por usar solo lo que Flask trae incluido o personalizar tu proyecto con extensiones. Este tutorial se enfocará en usar Flask-Restful y Flask-Marshmallow (una capa de abstracción basada en Marshmallow) para Flask1. Usamos estas extensiones porque hacen el API más sólido y fácil de mejorar durante el tiempo1.

Estructura de la aplicación

La aplicación seguirá una estructura similar al tutorial Estructura de un proyecto Flask. Se creará un directorio llamado api-peliculas. Dentro, encontraremos varios paquetes y módulos como app, common y films. También habrá otros como config y entrypoint.py.1

Extensiones a utilizar para implementar un API REST en Flask

Además de Flask, utilizaremos varias extensiones para crear el API. Entre ellas están Flask Restful, Flask SQLAlchemy y Flask Migrate. También usaremos Flask Marshmallow y Marshmallow SQLAlchemy.1 Estas se configurarán en los módulos ext.py y db.py para evitar problemas.

Organización de directorios y archivos

El proyecto api-peliculas tendrá una organización clara. Incluirá los paquetes como app y common. También estará el paquete de películas, films, con sus componentes específicos. Además, habrá un módulo de configuración y un script para iniciar la app.

Esta división por módulos ayuda al mantenimiento y a crecer sin problemas.1

Desarrollo de APIs RESTful con Flask: Tutorial Completo

Este tutorial tiene una estructura diferente. Primero, te mostraremos la estructura completa de la app.1 Luego, haremos los modelos de base de datos. Y crearemos esquemas para que los modelos se vean en forma de JSON.1 Al final, escribimos el código de los recursos. Y conectamos todo el trabajo.

Es importante entender métodos HTTP y rutas URL para crear una API con Flask.2 Te enseñaremos los pasos, como instalar Python y Flask. Y cómo usar pip para manejar paquetes.2 Desarrollar la API incluye configurar Flask, definir recursos y manejar solicitudes con métodos como GET.2

Empezaremos con un simple «Hello World» donde la API responde {‘hello’: ‘world’} en la URL principal.2 También, aprenderás a correr la app en modo de depuración. Esto es genial para el desarrollo.2

Usaremos Flask para hacer la API. Es un framework popular gracias a su facilidad de uso.1 En el tutorial, crearemos un API para un catálogo de películas con Flask. Usamos extensiones como Flask-Restful y Flask-Marshmallow para hacerlo robusto.1

En el API, trabajaremos con los modelos Film y Actor. Cada uno tiene sus propios atributos y relaciones.1 También veremos cómo usar Flask-Marshmallow para convertir los modelos en JSON.1 Es vital que los campos en los esquemas y los modelos coincidan. Así, la serialización será correcta.1

Finalmente, usaremos varias extensiones en nuestro proyecto. Estas incluyen Flask Restful, Flask SQLAlchemy, y más.1

Los modelos

En este tutorial, vamos a crear dos modelos principales: Film y Actor. Estos modelos ayudarán a hacer la API RESTful con Flask. Así, se podrá hacer programación con Python, desarrollo web, y integración de sistemas usando diseño de APIs.1

Modelo Film

El modelo Film presenta una película. Tiene una id (clave primaria), title (nombre de la película), length (duración en segundos), year (año de lanzamiento), director (quien la dirigió), y actors (lista de actores).1

Modelo Actor

El modelo Actor es acerca de un actor. Incluye id (clave primaria), name (nombre del actor), y film_id (clave foránea que conecta al actor con una película).1

Estos modelos son fundamentales en la arquitectura de software de la API RESTful. Ayudan a manejar servicios web y consumir APIs.1

Los esquemas

Primero, creamos modelos para nuestra base de datos. Luego, usamos Flask-Marshmallow para hacer esquemas. Estos se ocupan de convertir los datos del API a JSON.1

Esquema FilmSchema

FilmSchema se usa para cambiar los datos del modelo Film a JSON. Los nombres de los campos son como los atributos del modelo. Necesitan ser iguales. Por ejemplo, para el campo id, usamos dump_only=True. Así hacemos que se incluya solo al pasar el objeto a JSON.1

Esquema ActorSchema

ActorSchema hace lo mismo pero para el modelo Actor. También ajustamos los nombres de los campos y sus tipos.1

Con Flask-Marshmallow, creamos estos esquemas. Asociamos los campos a los modelos de la base de datos.1

Los recursos

Un API RESTful gira parcialmente en torno a los recursos. Estos pueden ser cualquier tipo de dato, objeto o servicio.1 Se utilizan para interactuar con el cliente a través de métodos y URLs del API. Así, se permite acceder y cambiar la información de estos recursos.1

En este caso, se enseña a hacer un API REST con Flask. Este API REST maneja un catálogo de películas usando una base de datos Sqlite.1 Flask organiza estos recursos en objetos con acciones como obtener, crear, actualizar o borrar. Pueden incluso conectarse entre sí.1

Para hacer este API REST más fácil, se emplean herramientas en Flask. Estas incluyen Flask-Restful, Flask-Marshmallow, Flask SQLAlchemy y Flask Migrate.1 Con ellas, es más sencillo hacer APIs REST potentes y que crezcan bien.1

Se describen películas y actores mediante los modelos Film y Actor. Tienen cosas como título, duración, año, director y elenco.1 Usando Flask-Marshmallow, se definen formatos especiales para convertir estos datos en JSON. Así, quedan preparados para ser leídos o enviados por la web.1

Para hacer un API REST con éxito, en Flask se necesita orden y planificación. Esto implica organizar el proyecto en secciones claras, incorporar extensiones útiles y definir bien los datos y cómo se ven.1

recursos API REST

Control de errores de un API REST en Flask

Es clave tener un control de errores sólido en un API REST.1 Esto implica gestionar excepciones en el código y manejar bien los códigos de estado HTTP.1 Tools de Flask ayudan a hacer esto más fácil.

Manejo de errores HTTP

En Flask-RESTful, se puede usar la clase Resource para definir acciones por cada código HTTP. Como get, post, y más.1 Esto simplifica manejar las respuestas a pedidos y dar la info correcta a los usuarios.

Flask-RESTful también ofrece un handler de excepciones a medida.1 Así, los problemas se traducen a códigos HTTP que son claros para los clientes del API.

Código HTTPDescripción
200 OKLa solicitud se ha procesado correctamente.
201 CreatedSe ha creado un nuevo recurso.
400 Bad RequestLa solicitud contiene datos no válidos.
404 Not FoundEl recurso solicitado no existe.
500 Internal Server ErrorHa ocurrido un error en el servidor.

Al crear un API con Flask, es vital considerar cómo gestionar errores.1 Hacerlo bien mejora la calidad y usabilidad de su API para aquellos que lo usan.

Configuración

La1

Configuración de la base de datos

Crear la base de datos y las tablas

Después de planear los modelos, usamos Flask-Migrate para hacer las tablas de la base de datos desde archivos de migración.1 Así, podemos cambiar y mejorar la base de datos a medida que el proyecto avanza.1

Flask-Migrate es una herramienta que facilita actualizar los modelos de la base de datos por medio de migraciones. Entonces, no hay que eliminar la base de datos al hacer cambios en los modelos. En su lugar, se crean archivos de migración. Estos se usan para ajustar sin problemas la estructura de la base de datos.1

Antes de usar Flask-Migrate, hay que instalarla. Se hace así:

«`
pip install Flask-Migrate
«`

Después, se activa la extensión en el archivo `ext.py`. También creamos un comando para Flask. Este comando aplica las migraciones.1

Con esto, al actualizar los modelos, hacemos nuevas migraciones con:

«`
flask db migrate -m «Descripción del cambio»
«`

Y luego, aplicamos las migraciones:

«`
flask db upgrade
«`

Usar Flask-Migrate hace el proceso de actualizar la base de datos sencillo y ordenado. Nos deja llevar un registro de los cambios en los modelos durante el proyecto.1

Crear la base de datos y las tablas

El API REST en Flask en funcionamiento

Al fin, vamos a usar el API REST hecho con Flask.1 Vamos a probar los puntos de acceso que creamos. Usaremos Postman o cURL para esto.

Probando los endpoints

Para ver si el API REST funciona bien, usaremos Postman o cURL. Estas herramientas nos permiten enviar pedidos a los endpoints del API. Después, podemos ver las respuestas.3 FastAPI es una nueva alternativa muy veloz para hacer APIs con Python. Se puede usar a partir de la versión 3.6 de Python.3 Para usar FastAPI, necesitamos instalar dos paquetes: fastapi y uvicorn.3

3 FastAPI chequea los tipos de datos que le enviamos para asegurar que todo funcione bien.3 En un texto, se explica cómo hacer APIs simples con FastAPI. Habla de cómo pasar argumentos y manejar los opcionales.3

3 Automáticamente, FastAPI convierte de DataFrames a JSON los objetos que enviamos en las respuestas.3 Para responder con archivos como imágenes o videos, FastAPI recomienda usar StreamingResponse o FileResponse y tener aiofiles instalado.3

3 Se muestra cómo hacer una API que manda imágenes en FastAPI. También se explica cómo probar si la API funciona con el módulo requests de Python. Así, se pueden ver las imágenes que se reciben.3 .

FastAPI hace automáticamente una documentación en Swagger UI. Se ve en /docs. También usa ReDoc, al que accedes en /redoc.3

Integración de sistemas con APIs RESTful

Las APIs RESTful están diseñadas para unir diferentes sistemas.4 Permiten que estos sistemas compartan datos y se comuniquen entre sí. Así, se pueden crear soluciones más firmes, grandes y abiertas al cambio.4

Estas API siguen las reglas de la arquitectura REST.5 Permiten acceder a servicios web RESTful, los cuales fueron ideados por Roy Fielding. Funcionan como un puente entre la gente y las páginas web, haciendo posible solicitar información o llevar a cabo ciertas acciones en línea.5

Hoy en día, las APIs RESTful son muy conocidas y usadas por muchas organizaciones.4 La mayoría de las empresas cuenta con una serie de APIs propias que son esenciales para unir sistemas. Cada API tiene su tarea, pero todas se combinan de manera efectiva.4

Enlaces de origen

  1. https://j2logo.com/flask/tutorial-como-crear-api-rest-python-con-flask/
  2. https://www.machinet.net/tutorial-es/create-restful-api-flask-python
  3. https://anderfernandez.com/blog/como-crear-api-en-python/
  4. https://blog.back4app.com/es/como-construir-una-api-rest/
  5. https://www.redhat.com/es/topics/api/what-is-a-rest-api

Deja un comentario