¿Qué es una API REST?
Una API REST (Representational State Transfer) es un conjunto de convenciones para construir servicios web que se comunican mediante HTTP. Flask es uno de los frameworks más populares para crearlas en Python.
Configuración Inicial
pip install flask flask-sqlalchemy flask-cors
Creando la API
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///tareas.db"
db = SQLAlchemy(app)
class Tarea(db.Model):
id = db.Column(db.Integer, primary_key=True)
titulo = db.Column(db.String(200), nullable=False)
completada = db.Column(db.Boolean, default=False)
with app.app_context():
db.create_all()
# GET - Obtener todas las tareas
@app.route("/api/tareas", methods=["GET"])
def obtener_tareas():
tareas = Tarea.query.all()
return jsonify([{
"id": t.id,
"titulo": t.titulo,
"completada": t.completada
} for t in tareas])
# POST - Crear nueva tarea
@app.route("/api/tareas", methods=["POST"])
def crear_tarea():
data = request.get_json()
nueva = Tarea(titulo=data["titulo"])
db.session.add(nueva)
db.session.commit()
return jsonify({"mensaje": "Tarea creada", "id": nueva.id}), 201
# PUT - Actualizar tarea
@app.route("/api/tareas/", methods=["PUT"])
def actualizar_tarea(id):
tarea = Tarea.query.get_or_404(id)
data = request.get_json()
tarea.titulo = data.get("titulo", tarea.titulo)
tarea.completada = data.get("completada", tarea.completada)
db.session.commit()
return jsonify({"mensaje": "Tarea actualizada"})
# DELETE - Eliminar tarea
@app.route("/api/tareas/", methods=["DELETE"])
def eliminar_tarea(id):
tarea = Tarea.query.get_or_404(id)
db.session.delete(tarea)
db.session.commit()
return jsonify({"mensaje": "Tarea eliminada"})
if __name__ == "__main__":
app.run(debug=True)
Buenas Prácticas
- Usa códigos de estado HTTP apropiados (200, 201, 404, 500)
- Valida siempre los datos de entrada
- Implementa paginación para listas grandes
- Documenta tus endpoints
- Usa autenticación para endpoints sensibles
Conclusión
Flask te permite crear APIs REST de forma rápida y elegante. Con estos fundamentos puedes construir servicios web robustos y escalables.