Amadurecendo uma API de Gerenciamento de Tarefas
Responsável: Licia Sales
Exercício: Transformando uma API Nível 0 para Nível 2 no Modelo de Maturidade de Richardson
API de Gerenciamento de Tarefas
Você tem uma API RESTful de gerenciamento de tarefas que atualmente está no nível 0 do modelo de maturidade de Richardson. Isso significa que a API trata todas as interações por meio de um único endpoint, usando métodos HTTP inadequadamente ou sem diferenciação. O objetivo deste exercício é transformar essa API em uma API de nível 2, onde cada recurso tem seu próprio endpoint e os métodos HTTP (GET, POST, PUT, DELETE) são usados de maneira adequada.
Estrutura da Tarefa:
- ID: Um número inteiro único que identifica a tarefa.
- Título: Uma string que representa o título da tarefa.
- Descrição: Uma string que fornece mais detalhes sobre a tarefa.
- Status: Um valor booleano que indica se a tarefa está concluída (True) ou não (False).
Código Nível 0:
from flask import Flask, jsonify, request
app = Flask(__name__)
tasks = [
{"id": 1, "title": "Estudar para a prova", "description": "Estudar matemática e física", "status": False},
{"id": 2, "title": "Fazer compras", "description": "Comprar leite e pão", "status": True},
]
@app.route('/api', methods=['POST'])
def handle_requests():
data = request.json
action = data.get('action')
if action == 'get_all':
return jsonify(tasks)
elif action == 'get_task':
task_id = data.get('id')
task = next((t for t in tasks if t['id'] == task_id), None)
if task:
return jsonify(task)
else:
return {"error": "Task not found"}, 404
elif action == 'create_task':
new_task = {
"id": len(tasks) + 1,
"title": data.get('title'),
"description": data.get('description'),
"status": data.get('status', False)
}
tasks.append(new_task)
return jsonify(new_task), 201
elif action == 'update_task':
task_id = data.get('id')
task = next((t for t in tasks if t['id'] == task_id), None)
if task:
task.update(data)
return jsonify(task)
else:
return {"error": "Task not found"}, 404
elif action == 'delete_task':
task_id = data.get('id')
task = next((t for t in tasks if t['id'] == task_id), None)
if task:
tasks.remove(task)
return {"message": "Task deleted"}, 200
else:
return {"error": "Task not found"}, 404
return {"error": "Invalid action"}, 400
if __name__ == '__main__':
app.run(debug=True)
Tarefas do Exercício
- Transformar para Nível 1:
- Divida as funcionalidades da API em múltiplos endpoints, cada um representando um recurso específico (como
/tasks). - Exemplo: Crie endpoints separados como
GET /taskspara listar todas as tarefas,POST /taskspara criar uma nova tarefa, etc.
- Divida as funcionalidades da API em múltiplos endpoints, cada um representando um recurso específico (como
- Transformar para Nível 2:
- Use os métodos HTTP apropriados para cada operação. Por exemplo, use
GETpara buscar dados,POSTpara criar novos recursos,PUTpara atualizar recursos eDELETEpara deletar recursos. - Garanta que os endpoints utilizem URLs adequadas que representem os recursos, como
/tasks/<id>para operações em uma tarefa específica.
- Use os métodos HTTP apropriados para cada operação. Por exemplo, use
- Testar a API no Postman:
- Após transformar a API para o nível 2, use o Postman para testar cada endpoint. Certifique-se de que os métodos HTTP corretos estão sendo usados e que as URLs seguem as convenções RESTful.