Python: Implementación de la API REST usando Flask

Esta documentación forma parte de la guía Creación de una API REST. Consulte la guía completa aquí: Cómo crear una API REST usando Flask.

👋 ¡Bienvenido a la documentación de Stackhero!

Stackhero ofrece una solución nube de Python lista para usar que proporciona una serie de beneficios, incluyendo:

  • Despliegue su aplicación en segundos con un simple git push.
  • Use su propio nombre de dominio y benefíciese de la configuración automática de certificados HTTPS para una mayor seguridad.
  • Disfrute de la tranquilidad con copias de seguridad automáticas, actualizaciones con un clic, y precios sencillos, transparentes y predecibles.
  • Obtenga un rendimiento óptimo y una seguridad robusta gracias a una VM privada y dedicada.

Ahorre tiempo y simplifique su vida: solo toma 5 minutos probar la solución de alojamiento en la nube de Python de Stackhero.

¡Ahora, vamos al código!

Cree un archivo llamado app.py e inserte el siguiente código:

import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request

# Cargar variables de entorno desde el archivo .env cuando no estamos en producción
if os.environ.get('ENV') != 'production':
    load_dotenv()

# Crear la aplicación Flask
app = Flask(__name__)

# Conjunto de datos de ejemplo
tasks = [
    {
        'id': 1,
        'title': 'Comprar comestibles',
        'description': 'Leche, Queso, Pizza, Frutas',
        'done': False
    },
    {
        'id': 2,
        'title': 'Aprender Python',
        'description': 'Aprender los conceptos básicos de programación en Python',
        'done': False
    }
]

# Ruta '/api/tasks' (GET) para listar todas las tareas
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
    return jsonify({'tasks': tasks})

# Ruta '/api/tasks/<task_id>' (GET) para obtener una tarea específica por su ID
@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
    task = [task for task in tasks if task['id'] == task_id]
    if len(task) == 0:
        return jsonify({'error': 'Tarea no encontrada'}), 404
    return jsonify({'task': task[0]})

# Ruta '/api/tasks' (POST) para crear una nueva tarea
@app.route('/api/tasks', methods=['POST'])
def create_task():
    if not request.json or 'title' not in request.json:
        return jsonify({'error': 'El título es obligatorio'}), 400
    task = {
        'id': tasks[-1]['id'] + 1,
        'title': request.json['title'],
        'description': request.json.get('description', ""),
        'done': False
    }
    tasks.append(task)
    return jsonify({'task': task}), 201

# Iniciar el servidor API
if __name__ == '__main__':
    if os.environ.get('ENV') == 'production':
        app.run()
    else:
        app.run(host='0.0.0.0', port=8080, debug=True)

Para iniciar el servidor, ejecute:

python app.py

Con la opción host='0.0.0.0', también puede acceder a su API usando su navegador cuando use Code-Hero. Simplemente navegue a http://<XXXXXX>.stackhero-network.com:8080/api/tasks, reemplazando <XXXXXX> con su dominio de Code-Hero.