Creación de una API REST con Flask: una guía paso a paso

Flask es un marco web de Python ligero y flexible que facilita la creación de aplicaciones web, incluidas las API REST. En esta guía, repasaremos el proceso de creación de una API REST con Flask, cubriendo todo, desde la configuración del proyecto hasta la implementación de puntos finales y la prueba de la API.

Antes de comenzar a construir la API, debemos configurar nuestro entorno de desarrollo. Esto implica la instalación de Flask y la creación de un entorno virtual para administrar las dependencias de nuestro proyecto.

1.1. Instalar Flask:

Primero, asegúrese de tener Python instalado. Luego, puede instalar Flask usando pip:

pip install Flask

1.2. Crear un entorno virtual:

Cree un entorno virtual para aislar las dependencias del proyecto:

python -m venv venv

Activar el entorno virtual:

  • En Windows:
venv\Scripts\activate
  • En macOS y Linux:
source venv/bin/activate

2.1. Estructura del proyecto:

Cree un nuevo directorio para su proyecto y configure la siguiente estructura:

my_flask_api/
├── app.py
├── requirements.txt
└── venv/

2.2. Aplicación básica del matraz:

En app.py, escriba la configuración básica para una aplicación Flask:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/')
def home():
    return jsonify({'message': 'Welcome to my API!'})

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

Ejecute la aplicación:

python app.py

Abra su navegador y navegue hasta http://127.0.0.1:5000/ para ver el mensaje de bienvenida.

3.1. Defina la estructura de la API:

En este ejemplo, crearemos una API sencilla para administrar una colección de libros. Cada libro tendrá una identificación, título, autor y fecha de publicación.

3.2. Crear el modelo de datos:

Para simplificar, usaremos una lista en memoria para almacenar nuestros libros. En una aplicación del mundo real, utilizaría una base de datos.

books = [
    {'id': 1, 'title': '1984', 'author': 'George Orwell', 'published': '1949-06-08'},
    {'id': 2, 'title': 'To Kill a Mockingbird', 'author': 'Harper Lee', 'published': '1960-07-11'}
]

3.3. Implementar operaciones CRUD:

Crear (POST):

@app.route('/books', methods=['POST'])
def add_book():
    new_book = request.get_json()
    books.append(new_book)
    return jsonify(new_book), 201

Leer (OBTENER):

Consigue todos los libros:

@app.route('/books', methods=['GET'])
def get_books():
    return jsonify(books)

Consigue un libro por ID:

@app.route('/books/<int:book_id>', methods=['GET'])
def get_book(book_id):
    book = next((book for book in books if book['id'] == book_id), None)
    if book:
        return jsonify(book)
    else:
        return jsonify({'error': 'Book not found'}), 404

Actualización (PUT):

@app.route('/books/<int:book_id>', methods=['PUT'])
def update_book(book_id):
    book = next((book for book in books if book['id'] == book_id), None)
    if book:
        data = request.get_json()
        book.update(data)
        return jsonify(book)
    else:
        return jsonify({'error': 'Book not found'}), 404

Eliminar (ELIMINAR):

@app.route('/books/<int:book_id>', methods=['DELETE'])
def delete_book(book_id):
    global books
    books = [book for book in books if book['id'] != book_id]
    return jsonify({'message': 'Book deleted'})

4.1. Pruebas manuales con Postman o cURL:

Puede usar herramientas como Postman o cURL para probar manualmente los puntos finales de la API. Por ejemplo, para obtener todos los libros:

curl http://127.0.0.1:5000/books

4.2. Pruebas automatizadas con pruebas unitarias:

Cree un nuevo archivo app.py escribir pruebas unitarias para su API usando el módulo:test_unittest

import unittest
from app import app

class FlaskTestCase(unittest.TestCase):
    def setUp(self):
        self.app = app.test_client()
        self.app.testing = True

    def test_home(self):
        result = self.app.get('/')
        self.assertEqual(result.status_code, 200)
        self.assertIn('Welcome to my API!', result.get_data(as_text=True))

    def test_get_books(self):
        result = self.app.get('/books')
        self.assertEqual(result.status_code, 200)
        self.assertIn('1984', result.get_data(as_text=True))

    # Additional tests for POST, PUT, DELETE...

if __name__ == '__main__':
    unittest.main()

Ejecute las pruebas:

python test_app.py
Conclusión
Crear una API REST con Flask es un proceso sencillo gracias a su simplicidad y flexibilidad. Siguiendo esta guía, puede configurar una API REST básica, implementar operaciones CRUD y probar sus puntos finales. La naturaleza liviana de Flask lo convierte en una excelente opción para proyectos pequeños y medianos, mientras que su extensibilidad permite un fácil escalado a medida que su proyecto crece.

¡Feliz codificación!

 

Lee mis artículos de Oiga Profe directamente en su bandeja de entrada. Suscríbete al newsletter y no te lo pierdas.

Por favor, activa JavaScript en tu navegador para completar este formulario.
Nombre completo
E-mail

Leave a Reply

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

Hola