- Frontend v4 accessible sur réseau local (192.168.1.40) - Ports ouverts: 3002 (frontend), 5001 (backend), 5004 (dashboard) - Ollama GPU fonctionnel - Self-healing interactif - Dashboard confiance Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
8.6 KiB
8.6 KiB
Task 3 Complete: API REST de Base
Date
2 décembre 2024
Résumé
Implémentation complète de l'API REST pour le Visual Workflow Builder avec endpoints CRUD, validation JSON, gestion d'erreurs et tests automatisés.
Fichiers Créés/Modifiés
Nouveaux Fichiers
-
visual_workflow_builder/backend/api/errors.py
- Classes d'exceptions personnalisées (APIError, ValidationError, NotFoundError, etc.)
- Fonction
error_response()pour formater les réponses d'erreur - Classe
ErrorCodeavec codes d'erreur standardisés - Messages d'erreur localisés
-
visual_workflow_builder/backend/api/validation.py
- Fonctions de validation pour les requêtes API
validate_workflow_data()- Validation complète des workflowsvalidate_update_data()- Validation des mises à jourvalidate_node_data()- Validation des nodesvalidate_edge_data()- Validation des edgesvalidate_variable_data()- Validation des variablesvalidate_settings_data()- Validation des paramètres
-
visual_workflow_builder/backend/test_api_manual.py
- Suite de tests automatisés pour l'API
- Tests CRUD complets
- Tests de validation
- Tests de gestion d'erreurs
- Tests de filtrage
Fichiers Modifiés
-
visual_workflow_builder/backend/api/workflows.py
- Implémentation complète des endpoints CRUD
- GET
/api/workflows/- Liste des workflows avec filtres - POST
/api/workflows/- Création de workflow - GET
/api/workflows/<id>- Récupération d'un workflow - PUT
/api/workflows/<id>- Mise à jour d'un workflow - DELETE
/api/workflows/<id>- Suppression d'un workflow - POST
/api/workflows/<id>/validate- Validation d'un workflow - Stockage en mémoire (sera remplacé par DB en Phase 4)
-
visual_workflow_builder/backend/api/init.py
- Exports de tous les modules API
- Point d'entrée centralisé
-
visual_workflow_builder/backend/app.py
- Enregistrement du blueprint workflows
- Gestionnaires d'erreurs globaux (404, 405, 500)
- Gestion des exceptions non capturées
Fonctionnalités Implémentées
1. Endpoints CRUD Complets
GET /api/workflows/
- Liste tous les workflows
- Filtres disponibles:
category- Filtrer par catégorieis_template- Filtrer les templates (true/false)tags- Filtrer par tags (séparés par virgules)
- Retourne un tableau JSON de workflows
POST /api/workflows/
- Crée un nouveau workflow
- Génère automatiquement un ID unique (UUID)
- Ajoute les timestamps (created_at, updated_at)
- Valide les données avant création
- Retourne le workflow créé avec code 201
GET /api/workflows/
- Récupère un workflow spécifique par ID
- Retourne 404 si non trouvé
- Retourne le workflow complet en JSON
PUT /api/workflows/
- Met à jour un workflow existant
- Supporte les mises à jour partielles
- Met à jour automatiquement le timestamp updated_at
- Valide les données avant mise à jour
- Retourne le workflow mis à jour
DELETE /api/workflows/
- Supprime un workflow
- Retourne 204 (No Content) en cas de succès
- Retourne 404 si le workflow n'existe pas
POST /api/workflows//validate
- Valide la structure d'un workflow
- Retourne:
is_valid- Boolean indiquant si le workflow est valideerrors- Liste des erreurs critiqueswarnings- Liste des avertissements (ex: nodes déconnectés)
2. Validation des Données
Validation des Workflows
- Champs requis:
name,created_by - Validation des types de données
- Validation de la structure des nodes et edges
- Validation des variables (unicité des noms)
- Validation des paramètres
Validation des Nodes
- Champs requis:
id,type,position,size,parameters,input_ports,output_ports - Validation de la position (x, y doivent être des nombres)
- Validation de la taille (width, height doivent être des nombres)
- Validation des ports
Validation des Edges
- Champs requis:
id,source,target,source_port,target_port - Tous les champs doivent être des chaînes non vides
Validation des Variables
- Champs requis:
name,type,value - Types valides:
string,number,boolean,object
3. Gestion des Erreurs
Codes d'Erreur HTTP
- 200 - Succès
- 201 - Créé
- 204 - Pas de contenu (suppression réussie)
- 400 - Requête invalide (validation échouée)
- 404 - Ressource non trouvée
- 405 - Méthode non autorisée
- 500 - Erreur serveur interne
Format des Réponses d'Erreur
{
"error": {
"code": 400,
"message": "Description de l'erreur",
"details": {} // Optionnel
}
}
Codes d'Erreur Personnalisés
- 1000-1999: Erreurs de validation
- 2000-2999: Erreurs de sérialisation
- 3000-3999: Erreurs d'exécution
- 4000-4999: Erreurs réseau
- 5000-5999: Erreurs de ressources
4. Stockage en Mémoire
- Dictionnaire Python pour stocker les workflows
- Clé: workflow_id (UUID)
- Valeur: objet VisualWorkflow
- Sera remplacé par une base de données en Phase 4
Tests Exécutés
Suite de Tests Automatisés (✓ Tous passent)
✓ test_health_check
✓ test_list_workflows_empty
✓ test_create_workflow
✓ test_get_workflow
✓ test_update_workflow
✓ test_validate_workflow
✓ test_create_workflow_with_nodes
✓ test_list_workflows_with_filters
✓ test_delete_workflow (x2)
✓ test_error_handling
- 404 error
- Validation error
- Missing body error
Résultats
============================================================
✓ ALL TESTS PASSED!
============================================================
Exemples d'Utilisation
Créer un Workflow
curl -X POST http://localhost:5001/api/workflows/ \
-H "Content-Type: application/json" \
-d '{
"name": "Mon Workflow",
"description": "Description",
"created_by": "user123",
"nodes": [],
"edges": [],
"variables": []
}'
Lister les Workflows
curl http://localhost:5001/api/workflows/
Filtrer par Tags
curl http://localhost:5001/api/workflows/?tags=test,demo
Récupérer un Workflow
curl http://localhost:5001/api/workflows/<workflow_id>
Mettre à Jour un Workflow
curl -X PUT http://localhost:5001/api/workflows/<workflow_id> \
-H "Content-Type: application/json" \
-d '{
"name": "Nouveau Nom",
"description": "Nouvelle description"
}'
Valider un Workflow
curl -X POST http://localhost:5001/api/workflows/<workflow_id>/validate
Supprimer un Workflow
curl -X DELETE http://localhost:5001/api/workflows/<workflow_id>
Exigences Validées
- ✅ Exigence 5.1: Endpoints CRUD pour workflows
- ✅ Exigence 5.2: Sérialisation/désérialisation JSON
- ✅ Exigence 5.3: Validation des requêtes
- ✅ Exigence 5.5: Gestion d'erreurs et codes d'erreur
Prochaines Étapes
La tâche 4 peut maintenant commencer: Checkpoint - Vérifier que les tests passent
Ensuite, Phase 2 commencera avec:
- Tâche 5: Implémenter le composant Canvas
- Tâche 6: Implémenter la gestion des edges
- Tâche 7: Créer la palette de nodes
Notes Techniques
Choix de Design
- Stockage en Mémoire: Utilisé pour la Phase 1, sera remplacé par SQLite/PostgreSQL
- Validation en Deux Étapes:
- Validation des données de requête (validation.py)
- Validation de la structure du workflow (models.validate())
- Gestion d'Erreurs Centralisée: Toutes les erreurs passent par error_response()
- Codes d'Erreur Standardisés: Facilite le debugging et l'intégration frontend
Points d'Attention
- Le stockage en mémoire est volatile (données perdues au redémarrage)
- Les endpoints execute, export, import sont des placeholders pour les phases futures
- CORS est configuré pour accepter localhost:3000 (frontend React)
- Le serveur utilise le port 5001 (5000 était en conflit)
Statistiques
- Fichiers créés: 3
- Fichiers modifiés: 3
- Lignes de code Python: ~900
- Endpoints implémentés: 9
- Tests automatisés: 11
- Taux de réussite des tests: 100%
Intégration
Backend ↔ Models
- ✅ Utilisation complète des modèles de données
- ✅ Sérialisation/désérialisation automatique
- ✅ Validation intégrée
API ↔ Frontend (Prêt)
- ✅ Format JSON standardisé
- ✅ Codes d'erreur clairs
- ✅ CORS configuré
- ✅ Documentation des endpoints
Prochaine Intégration
- Phase 4: Base de données (SQLite/PostgreSQL)
- Phase 5: Conversion vers WorkflowGraph
- Phase 6: WebSocket pour temps réel