103 lines
3.3 KiB
Python
103 lines
3.3 KiB
Python
"""
|
|
**Consignes 3_1 :**
|
|
|
|
1. Créez une application Flask avec une liste d'équipements en mémoire (`id`, `hostname`, `ip`).
|
|
|
|
2. `GET /api/equipments` → renvoie `{"equipments": [...]}` en JSON.
|
|
|
|
3. `GET /api/equipments/<int:equipment_id>` → renvoie l'équipement, ou `{"erreur": "..."}` avec le code **404** s'il n'existe pas.
|
|
|
|
4. Lancez le serveur et testez dans le navigateur ou avec `curl`.
|
|
|
|
**Consignes 3_2 :** repartez de l'API du 3.1 et ajoutez :
|
|
|
|
1. `POST /api/equipments` : crée un équipement depuis le JSON reçu. `hostname` est **obligatoire** (sinon **400**). Renvoie **201** et l'objet créé (avec un `id` auto-incrémenté).
|
|
|
|
2. `PUT /api/equipments/<id>` : met à jour les champs fournis ; **404** si l'équipement n'existe pas.
|
|
|
|
3. `DELETE /api/equipments/<id>` : supprime l'équipement ; **404** si absent.
|
|
|
|
4. Vérifiez chaque opération avec `curl`.
|
|
"""
|
|
|
|
from flask import Flask, request, jsonify
|
|
|
|
app = Flask(__name__)
|
|
|
|
equipments = [
|
|
{"id": 1, "hostname": "srv-web-01", "ip": "192.168.1.10", "active": True},
|
|
{"id": 2, "hostname": "sw-access-02", "ip": "192.168.1.2", "active": True}
|
|
]
|
|
|
|
@app.route('/api/statut', methods=['GET'])
|
|
def statut_api():
|
|
return jsonify({
|
|
"statut": "succès",
|
|
"message": "L'API d'inventaire réseau fonctionne correctement",
|
|
"version": "1.0"
|
|
}), 200
|
|
|
|
@app.route('/api/equipments', methods=['GET'])
|
|
def list_equipments():
|
|
return jsonify({"equipments": equipments}), 200
|
|
|
|
@app.route('/api/equipments/<int:equipment_id>', methods=['GET'])
|
|
def get_equipment(equipment_id):
|
|
equipment = next((e for e in equipments if e["id"] == equipment_id), None)
|
|
|
|
if equipment is None:
|
|
return jsonify({"erreur": "Équipement non trouvé"}), 404
|
|
|
|
return jsonify(equipment), 200
|
|
|
|
@app.route('/api/equipments', methods=['POST'])
|
|
def post_equipment():
|
|
data = request.get_json()
|
|
|
|
if not data or not 'hostname' in data:
|
|
return jsonify({"erreur": "Le hostname est obligatoire"}), 400
|
|
|
|
new_equipment = {
|
|
"id": max(e['id'] for e in equipments) + 1 if equipments else 1,
|
|
"hostname": data['hostname'],
|
|
"ip": data.get('ip', ""),
|
|
"actif": True
|
|
}
|
|
|
|
equipments.append(new_equipment)
|
|
|
|
return jsonify(new_equipment), 201
|
|
|
|
@app.route('/api/equipments/<int:equipment_id>', methods=['PUT'])
|
|
def put_equipment(equipment_id):
|
|
equipment = next((e for e in equipments if e["id"] == equipment_id), None)
|
|
|
|
if equipment is None:
|
|
return jsonify({"erreur": "Équipement non trouvé"}), 404
|
|
|
|
donnees = request.get_json()
|
|
|
|
if 'hostname' in donnees:
|
|
equipment['hostname'] = donnees['hostname']
|
|
if 'ip' in donnees:
|
|
equipment['ip'] = donnees['ip']
|
|
if 'actif' in donnees:
|
|
equipment['actif'] = donnees['actif']
|
|
|
|
return jsonify(equipment), 200
|
|
|
|
@app.route('/api/equipments/<int:equipment_id>', methods=['DELETE'])
|
|
def delete_equipment(equipment_id):
|
|
global equipments
|
|
|
|
equipment = next((e for e in equipments if e["id"] == equipment_id), None)
|
|
|
|
if equipment is None:
|
|
return jsonify({"erreur": "Équipement non trouvé"}), 404
|
|
|
|
equipments = [e for e in equipments if e["id"] != equipment_id]
|
|
|
|
return jsonify({"message": "Équipement supprimé avec succès"}), 200
|
|
|
|
if __name__ == '__main__':
|
|
app.run(host='127.0.0.1', port=5000, debug=True) |