Python: Implementar a API REST usando Flask

Esta documentação faz parte do guia Criar uma API REST. Consulte o guia completo aqui: Como criar uma API REST usando Flask.

👋 Bem-vindo à documentação do Stackhero!

Stackhero oferece uma solução cloud Python pronta a usar que proporciona uma série de benefícios, incluindo:

  • Implemente a sua aplicação em segundos com um simples git push.
  • Utilize o seu próprio nome de domínio e beneficie da configuração automática de certificados HTTPS para uma segurança reforçada.
  • Desfrute de tranquilidade com backups automáticos, atualizações com um clique, e preços simples, transparentes e previsíveis.
  • Obtenha performance ótima e segurança robusta graças a uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: só leva 5 minutos para experimentar a solução de hospedagem cloud Python do Stackhero!

Agora, vamos mergulhar no código!

Crie um ficheiro chamado app.py e insira o seguinte código:

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

# Carregar variáveis de ambiente do ficheiro .env quando não estamos em produção
if os.environ.get('ENV') != 'production':
    load_dotenv()

# Criar a aplicação Flask
app = Flask(__name__)

# Conjunto de dados de exemplo
tasks = [
    {
        'id': 1,
        'title': 'Comprar mantimentos',
        'description': 'Leite, Queijo, Pizza, Frutas',
        'done': False
    },
    {
        'id': 2,
        'title': 'Aprender Python',
        'description': 'Aprender os fundamentos da programação em Python',
        'done': False
    }
]

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

# Rota '/api/tasks/<task_id>' (GET) para obter uma tarefa específica pelo seu 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': 'Tarefa não encontrada'}), 404
    return jsonify({'task': task[0]})

# Rota '/api/tasks' (POST) para criar uma nova tarefa
@app.route('/api/tasks', methods=['POST'])
def create_task():
    if not request.json or 'title' not in request.json:
        return jsonify({'error': 'Título é obrigatório'}), 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 o 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 o servidor, execute:

python app.py

Com a opção host='0.0.0.0', também pode aceder à sua API usando o navegador quando usa Code-Hero. Basta navegar para http://<XXXXXX>.stackhero-network.com:8080/api/tasks, substituindo <XXXXXX> pelo seu domínio Code-Hero.