python

API REST con Python, Flask y SQLite3

En este tutorial de programación con Python aprenderás a crear una API REST usando Flask, SQLite 3 (para los datos) y JSON para la comunicación de datos.

Al final tendrás una API que puedes consumir desde cualquier cliente, ya sea una aplicación para Android, un navegador con JavaScript o incluso otro lenguaje de servidor.

Te mostraré cómo crear una API que se comunica usando JSON y guarda los datos en SQLite 3. La API estará creada con Flask, y usaremos el lenguaje de programación Python para manejar todos los datos.

Descripción de la API

API con Flask y Python

Vamos a usar los 4 verbos HTTP más usados: GET, POST, PUT y DELETE, mismos que estarán relacionados con el CRUD de la base de datos.

Lo que vamos a gestionar será una base de datos de juegos, mismos que tienen nombre, precio y calificación. También tendremos varias operaciones que vamos a exponer a través de la API creada con Flask:

  • Obtener todos los juegos
  • Crear un nuevo juego
  • Actualizar un juego
  • Eliminar un juego
  • Obtener un juego por ID

Primero vamos a crear el CRUD que se relaciona con la base de datos usando Python, y más tarde vamos a exponer todas estas funciones con Flask, ya en la API, codificando como JSON.

Base de datos SQLite3

La estructura de la base de datos queda como se ve a continuación. Es una única tabla, aunque a partir de este tutorial podemos crear más tablas, relaciones, etcétera.

See the gist on github.

Después vemos el archivo de conexión a la base de datos:

See the gist on github.

En este archivo de conexión SQLite3 con Python observamos que la base de datos se llamará games.db. Además, contamos con dos funciones: una de ellas es para obtener la base de datos, y la otra (create_tables) es para crear las tablas dentro de la base de datos solo en caso de que no existan.

Fíjate bien en estas funciones, pues las vamos a importar desde otros archivos. Ahora que ya tenemos definida la base de datos veamos el CRUD de juegos con la base de datos SQLite3.

Controlador de juegos: conexión a base de datos

Antes de exponer la base de datos en la API, vamos a crear un controlador de juegos que se va a encargar de todas las operaciones para guardar, actualizar, eliminar y obtener los datos de los juegos.

Todas estas funciones se encuentran dentro de un archivo llamado game_controller.py y se ve así:

See the gist on github.

En el archivo vemos varias funciones. La función insert_game recibe los datos del juego y los inserta en la base de datos (INSERT); todo esto usando sentencias preparadas para evitar inyecciones SQL en esta API que estamos creando con Python y Flask.

También vemos otros métodos como update_game que realiza la operación UPDATE para actualizar un juego, delete_game que elimina un juego (DELETE) a partir de su id, get_by_id que regresa un juego a partir de su id (usando la operación SELECT).

Finalmente observamos la función get_games que devuelve todos los juegos existentes.

Fíjate en que todas las funciones usan la base de datos y un cursor para realizar todas las operaciones.

Ahora que ya tenemos el CRUD de las operaciones con la base de datos es momento de exponer todo en la API con Flask.

Creando API con Flask y Python

Lo primero que hacemos en la API es crear la app de Flask e importar el controlador de los juegos. También importamos una función de la base de datos porque necesitamos crear las tablas al iniciar la aplicación:

See the gist on github.

Ahora definimos las rutas con los verbos GET, PUT, POST y DELETE:

See the gist on github.

Cada ruta expone una función del controlador de juegos que vimos anteriormente, que a su vez interactúa con la base de datos de SQLite3. Es importante destacar algunas cosas. Por ejemplo, al actualizar e insertar un juego leemos el JSON de la petición con get_json y accedemos al diccionario.

En el caso de eliminar o de obtener por ID leemos la variable id desde la ruta como <variable> y recibiéndola en el método.

También fíjate en que esta API con Python se comunica a través de JSON, por lo que todas las respuestas se hacen de acuerdo a lo que regresa la función jsonify.

Finalmente creamos la app de Flask para iniciar el servidor y escuchar peticiones:

See the gist on github.

Opcional: agregar CORS

Si vas a consumir esta API desde un dominio distinto al de la misma, necesitas habilitar CORS. Basta con agregar el siguiente fragmento de código en la API (en el repositorio encontrarás el código ya agregado, mismo que puedes remover si quieres):

See the gist on github.

Poniendo todo junto

El código completo de la API queda así:

See the gist on github.

Si quieres ver el código de los otros archivos y el repositorio completo, visita mi GitHub. Ahí podrás descargar y probar todo el código open source.

Recuerda que para iniciar el servidor y la API debes ejecutar:

python main.py

O en su defecto:

python3 main.py

Probando API

Después de clonar y ejecutar el repositorio puedes realizar las pruebas usando Postman o cualquier lenguaje de tu preferencia. Más adelante traeré ejemplos de consumo con Frameworks JavaScript o con JavaScript puro.

También puedes probar la API en línea, en el siguiente enlace (revisa las rutas definidas en caso de que aparezca un error 404 o 405): https://apirestflaskpythonsqlite3.parzibyte.repl.co/

Por ejemplo, para ver todos los juegos, es: https://apirestflaskpythonsqlite3.parzibyte.repl.co/games

Mientras tanto te dejo una captura probando la API:

Consumiendo API REST creada con Flask y Python usando SQLite y JSON

Si te gusta Python, te invito a leer más contenido de ese tema en mi blog. O aprende más sobre Flask.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

Entradas recientes

Solución: Unable to extract uploader id con youtube-dl

En mi blog te he enseñado a usar youtube-dl para descargar vídeos con permiso del…

3 días hace

Enviar foto a Telegram usando cURL y Bot

Siguiendo con los tutoriales que consumen la API de los Bots de Telegram con cURL…

3 días hace

cURL y Telegram: enviar mensaje a Bot

En un post previo te enseñé a enviar un mensaje en nombre de un Bot…

3 días hace

Impresora térmica con Telegram usando Bot

En este artículo te voy a mostrar una guía para imprimir en una impresora térmica…

3 días hace

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

1 semana hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

1 semana hace

Esta web usa cookies.