Amadurecendo uma API de Gerenciamento de Eventos
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 Eventos
Você tem uma API RESTful para o gerenciamento de eventos que atualmente está no nível 0 do modelo de maturidade de Richardson. Isso significa que todas as operações da API são tratadas por meio de um único endpoint, sem uso adequado dos métodos HTTP e sem diferenciação de recursos. 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 corretamente.
Estrutura do Evento:
- ID: Um número inteiro único que identifica o evento.
- Nome: Uma string que representa o nome do evento.
- Data: Uma string que representa a data do evento no formato YYYY-MM-DD.
- Local: Uma string que descreve o local onde o evento será realizado.
Código Nível 0:
from flask import Flask, jsonify, request
app = Flask(__name__)
events = [
{"id": 1, "name": "Conferência de Tecnologia", "date": "2023-11-10", "location": "Centro de Convenções"},
{"id": 2, "name": "Workshop de Design", "date": "2023-12-05", "location": "Sala de Conferências A"},
]
@app.route('/api', methods=['POST'])
def handle_requests():
data = request.json
action = data.get('action')
if action == 'get_all_events':
return jsonify(events)
elif action == 'get_event':
event_id = data.get('id')
event = next((e for e in events if e['id'] == event_id), None)
if event:
return jsonify(event)
else:
return {"error": "Event not found"}, 404
elif action == 'create_event':
new_event = {
"id": len(events) + 1,
"name": data.get('name'),
"date": data.get('date'),
"location": data.get('location')
}
events.append(new_event)
return jsonify(new_event), 201
elif action == 'update_event':
event_id = data.get('id')
event = next((e for e in events if e['id'] == event_id), None)
if event:
event.update(data)
return jsonify(event)
else:
return {"error": "Event not found"}, 404
elif action == 'delete_event':
event_id = data.get('id')
event = next((e for e in events if e['id'] == event_id), None)
if event:
events.remove(event)
return {"message": "Event deleted"}, 200
else:
return {"error": "Event not found"}, 404
return {"error": "Invalid action"}, 400
if __name__ == '__main__':
app.run(debug=True)
Tarefas do Exercício
- Transformar para Nível 1:
- Separe as funcionalidades da API em múltiplos endpoints, cada um representando um recurso específico, como
/eventspara o recurso de eventos. - Exemplo: Crie endpoints separados como
GET /eventspara listar todos os eventos,POST /eventspara adicionar um novo evento, etc.
- Separe as funcionalidades da API em múltiplos endpoints, cada um representando um recurso específico, como
- Transformar para Nível 2:
- Utilize os métodos HTTP adequados para cada operação. Por exemplo, use
GETpara buscar eventos,POSTpara adicionar novos eventos,PUTpara atualizar eventos eDELETEpara remover eventos. - As URLs dos endpoints devem refletir corretamente os recursos, como
/events/<id>para operações em um evento específico.
- Utilize os métodos HTTP adequados 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.