En el desarrollo web, una tarea común es la creación de una API REST, que permite la comunicación entre distintas aplicaciones y un servidor. En esta guía, aprenderás a desarrollar una API REST simple utilizando Flask, una de las bibliotecas más populares para la creación de aplicaciones web en Python.
Antes de comenzar, necesitas tener instalado:
mkdir flask-api
cd flask-api python -m venv venv venvScriptsactivate source venv/bin/activate pip install flask
pip install flask-cors Crea un archivo app.py con el siguiente contenido básico:
from flask import Flask, request, jsonify
import uuid
from flask_cors import CORS
app = Flask(__name__)
# Habilitar CORS para todas las rutas
CORS(app)
# Lista de tareas (simulando una base de datos)
todos = []
@app.route('/')
def home():
return jsonify({"message": "Bienvenido a la API de Tareas"})
if __name__ == '__main__':
app.run(debug=True, port=5000) Añade los siguientes endpoints a tu app.py:
# Crear una nueva tarea (CREATE)
@app.route('/todos', methods=['POST'])
def create_todo():
data = request.get_json()
if 'title' not in data:
return jsonify({"error": "El título es requerido"}), 400
new_todo = {
"id": str(uuid.uuid4()), # Generar un UUID único
"title": data['title'],
"completed": False
}
todos.append(new_todo)
return jsonify(new_todo), 201
# Obtener todas las tareas (READ)
@app.route('/todos', methods=['GET'])
def get_todos():
return jsonify(todos)
# Obtener una tarea específica (READ)
@app.route('/todos/<string:todo_id>', methods=['GET'])
def get_todo(todo_id):
todo = next((todo for todo in todos if todo["id"] == todo_id), None)
if todo is None:
return jsonify({"error": "Tarea no encontrada"}), 404
return jsonify(todo)
# Actualizar una tarea (UPDATE)
@app.route('/todos/<string:todo_id>', methods=['PUT'])
def update_todo(todo_id):
data = request.get_json()
todo = next((todo for todo in todos if todo["id"] == todo_id), None)
if todo is None:
return jsonify({"error": "Tarea no encontrada"}), 404
todo['title'] = data.get('title', todo['title'])
todo['completed'] = data.get('completed', todo['completed'])
return jsonify(todo)
# Eliminar una tarea (DELETE)
@app.route('/todos/<string:todo_id>', methods=['DELETE'])
def delete_todo(todo_id):
todo = next((todo for todo in todos if todo["id"] == todo_id), None)
if todo is None:
return jsonify({"error": "Tarea no encontrada"}), 404
todos.remove(todo)
return '', 204 Añade manejo básico de errores:
@app.errorhandler(400)
def bad_request(error):
return jsonify({"error": "Solicitud incorrecta"}), 400
@app.errorhandler(404)
def not_found(error):
return jsonify({"error": "Recurso no encontrado"}), 404
@app.errorhandler(500)
def internal_server_error(error):
return jsonify({"error": "Error interno del servidor"}), 500 Guarda todos los cambios en app.py
Ejecuta la aplicación:
python app.py La API estará disponible en http://localhost:5000
Puedes probar la API usando curl o Postman. Aquí hay algunos ejemplos usando curl:
curl -X POST -H "Content-Type: application/json" -d '{"title":"Comprar leche"}' http://localhost:5000/todos curl http://localhost:5000/todos curl http://localhost:5000/todos/1 curl -X PUT -H "Content-Type: application/json" -d '{"completed":true}' http://localhost:5000/todos/1 curl -X DELETE http://localhost:5000/todos/1 | Método HTTP | Endpoint | Descripción |
|---|---|---|
| GET | /todos | Obtener todas las tareas |
| GET | /todos/<id>\ | Obtener una tarea específica |
| POST | /todos | Crear una nueva tarea |
| PUT | /todos/<id>\ | Actualizar una tarea existente |
| DELETE | /todos/<id>\ | Eliminar una tarea |
Esta API implementa todas las operaciones CRUD y puede servir como base para proyectos más complejos.