API HTTP du webhook
Les routes exposées par SESAR Webhook, leurs corps et leurs codes de réponse. Les noms de propriétés des réponses sont en PascalCase, et les propriétés nulles sont omises.
Requête de SESAR
Les routes de traitement attendent le corps que SESAR envoie, en application/json :
{
"args": {
"HashKey": "<valeur d'authentification>",
"CryptedObject": "<manifeste chiffré, en Base64>"
}
}
Un corps vide ou un JSON invalide reçoit une erreur 400, avant tout traitement.
Réponse de traitement
Les routes simples renvoient un IntegrationResult :
| Propriété | Type | Rôle |
|---|---|---|
Success |
booléen | Résultat du traitement |
Message |
texte | Résumé |
ErrorDetails |
texte | Détail de l'échec ; peut contenir une réponse brute du système cible ou une pile d'appels |
ConnectorId |
texte | Connecteur ou gestionnaire qui a traité le dépôt |
Timestamp |
date UTC | Date du résultat |
ExternalReferenceId |
texte | Référence dans le système cible, par exemple l'identifiant de l'enregistrement créé |
Metadata |
objet | Données complémentaires, par exemple HandlerId et HandlerVersion |
ItemsProcessed, ItemsFailed |
entiers | Compteurs renseignés par le connecteur |
Routes de traitement
POST /api/webhook/handler/{handlerId}
Traite le dépôt avec un gestionnaire. C'est l'adresse recommandée.
| Code | Quand |
|---|---|
| 200 | Traitement réussi (Success à true) |
| 400 | Corps sans args |
| 401 | HashKey invalide |
| 404 | Gestionnaire inconnu. Ce contrôle a lieu avant celui du HashKey. |
| 500 | Échec du traitement, du déchiffrement ou de la lecture du manifeste, ou application mal initialisée |
POST /api/webhook/{connectorId}
Traite le dépôt avec un connecteur intégré. POST /api/webhook, sans identifiant, utilise DefaultConnectorId.
| Code | Quand |
|---|---|
| 200 | Traitement réussi |
| 400 | Corps sans args |
| 404 | Connecteur inconnu, avant le contrôle du HashKey |
| 500 | Échec du traitement, HashKey invalide (Message : Authentication failed), ou application mal initialisée |
Sur cette route, un HashKey invalide reçoit donc 500, et non 401.
Routes multiples
| Route | Traitement | Réponse |
|---|---|---|
POST /api/webhook/multi?connectors=id1,id2 |
Connecteurs l'un après l'autre | Toujours 200 : {"Success": true, "Results": [...]}, même si tous ont échoué, y compris pour un HashKey invalide |
POST /api/webhook/handler/multi?handlers=id1,id2 |
Gestionnaires en parallèle | 200 : {"Success", "TotalHandlers", "Processed", "Failed", "Results"}. Success vaut true si tous les identifiants sont connus et qu'au moins un a été traité, quel que soit le résultat. Failed ne compte que les identifiants inconnus. 401 si le HashKey est invalide. |
Évitez ces routes avec SESAR :
- elles répondent 200 même en cas d'échec, et SESAR ne renvoie donc jamais un dépôt mal traité ;
connectors=n'enlève pas les espaces : écrivezid1,id2, pasid1, id2;- un connecteur qui n'a encore jamais été appelé par sa propre adresse y est créé sans ses réglages, et échoue.
Routes de gestion
Attention
Ces routes n'exigent aucune authentification. Réservez-les au serveur ou à votre réseau d'administration : voir Sécuriser le déploiement.
| Route | Réponse |
|---|---|
GET /api/connectors |
Liste de ConnectorInfo, connecteur generic compris. IsEnabled reflète la clé Enabled, sans effet sur le traitement ; IsConfigured vaut toujours false. |
GET /api/connectors/{id} |
Le connecteur, ou 404 |
POST /api/connectors/{id}/test |
200 : {"Success", "Message", "ConnectorId"}, avec Error en cas d'exception. Déclenche les appels d'authentification du connecteur. |
GET /api/handlers |
Liste {"HandlerId", "DisplayName", "Description", "Version", "IsEnabled", "WebhookUrl"} |
GET /api/handlers/{id} |
Le gestionnaire, ou 404 |
POST /api/handlers/{id}/test |
200 : {"Success", "Message", "HandlerId"}, avec Error en cas d'exception. Appelle ValidateConfigurationAsync, puis TestConnectionAsync. |
POST /api/handlers/rescan |
Relit le dossier par défaut des gestionnaires, sans tenir compte de HandlersPath : {"Success", "Message", "Handlers"} |
GET /api/health |
Toujours {"Status": "Healthy", "Timestamp": "..."}, même si l'application ne peut rien traiter |
GET /api/health/status |
État détaillé : initialisation (ProcessorInitialized, InitializationError), diagnostic du fichier de secrets, connecteurs |
Routes de débogage
Actives seulement si EnableDebugEndpoints vaut true. Sinon, elles répondent 400. Ne les activez jamais en production : elles traitent un manifeste en clair, sans HashKey.
| Route | Rôle |
|---|---|
GET /api/debug/sample-manifest |
Un manifeste vide, à compléter pour vos essais |
POST /api/debug/connector/{connectorId} |
Traite le manifeste en clair reçu dans le corps, sans enveloppe args |
POST /api/debug/handler/{handlerId} |
Même chose avec un gestionnaire |