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.
1. Configuración del entorno
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. Creación de una aplicación básica de matraz
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. Creación de puntos de conexión RESTful
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. Probar la API
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
¡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.