Ports et liaisons
Comprendre les ports, c’est comprendre quand une boîte s’exécute. Cette page est la référence du modèle.
Les trois ports implicites
Section titled “Les trois ports implicites”Toute boîte les possède, sans qu’ils apparaissent dans sa configuration :
| Port | Sens | Flux | Rôle |
|---|---|---|---|
in | Entrée | Signal | Déclencheur. Plusieurs liaisons entrantes acceptées |
error | Sortie | Valeur + signal | Route d’échec |
done | Sortie | Signal | Émis après complétion de la boîte et de tout son sous-graphe aval |
Trois boîtes n’ont pas de port error : Sortie, Maintenant et
Retry (cette dernière étant elle-même une frontière d’erreur). Deux
n’ont pas de done : Sortie et Throw.
Types de flux
Section titled “Types de flux”| Flux | Symbole mental | Comportement |
|---|---|---|
| Valeur | Une donnée | Transporte une valeur ; sert aussi de déclencheur |
| Signal | Un top | Ne transporte rien, déclenche seulement |
| Les deux | Transporte une valeur et déclenche |
La seule combinaison interdite : une sortie de signal pur vers une entrée de valeur pure. Il n’y aurait rien à mettre dans la valeur.
Types de données
Section titled “Types de données”any · json · number · string · boolean · duration · response ·
status · list · object.
Le typage sert surtout au confort visuel, avec une exception stricte : une
entrée de type liste (le port list des actions Ajouter à une liste et
Retirer d’une liste) refuse une source qui n’est pas compatible liste. json
et list sont compatibles entre eux ; un object simple ne l’est pas.
- Un port d’entrée n’accepte qu’une seule liaison. C’est ce qui rend le graphe lisible : une valeur, une provenance.
- Sauf
in, qui accepte autant de liaisons que voulu. - Une sortie peut alimenter autant d’entrées que voulu.
Quand une boîte s’exécute
Section titled “Quand une boîte s’exécute”Trois règles, dans l’ordre :
- Les racines démarrent. Toute boîte sans liaison entrante est amorcée au lancement du scénario. Il n’y a pas de boîte « départ ».
- Seules les entrées câblées sont attendues. Une boîte s’exécute quand chacun de ses ports d’entrée effectivement reliés a reçu une valeur. Un port non câblé n’est jamais attendu. Les valeurs restent mémorisées : une entrée conserve la dernière valeur reçue.
- Le port
infait barrière. Alimenté par plusieurs liaisons, il attend que toutes soient arrivées, puis déclenche une fois. C’est le « attendre que ces trois branches soient finies » du modèle.
L’exception : rejouer à chaque événement
Section titled “L’exception : rejouer à chaque événement”L’option « Rejouer à chaque événement reçu » (menu contextuel de la boîte) transforme toutes les entrées câblées en portes « ou » non bloquantes : la boîte se redéclenche à chaque valeur reçue, sur n’importe quel port.
Deux usages : traiter un flux message par message, et débloquer un cycle de complétion (un graphe qui reboucle sur lui-même).
done contre une sortie de valeur
Section titled “done contre une sortie de valeur”C’est la distinction la plus utile en pratique :
- une sortie de valeur émet dès que la boîte a produit son résultat ;
doneattend en plus que tout ce qui consomme ce résultat ait fini.
Pour séquencer — « fais tout ça, puis nettoie » — câblez depuis done.
Pour passer une donnée, câblez depuis la sortie de valeur.
Les branches conditionnelles
Section titled “Les branches conditionnelles”Ce ne sont pas un mécanisme à part : ce sont des ports de sortie porteurs d’un rôle, qui pilote leur couleur.
| Boîte | Sorties |
|---|---|
| If | then / else |
| While, Do…While | then (le corps) |
| Assert | then (réussite) / else (échec) |
| Retry | attempt / exhausted |
| Validation schéma | valid / invalid / errors |
| Switch | un port par cas, plus default |
| Connexion Socket.IO | un port par événement déclaré, plus others |
Sélecteurs de liaison
Section titled “Sélecteurs de liaison”Une liaison peut porter un sélecteur : un chemin appliqué à la valeur en transit.
data.items[0].idbody['user-id']headers["content-type"]statusLes formes a.b, a[0], a['clé'] et a["clé"] sont acceptées. Un segment
qui contient du JSON est analysé au vol ; un chemin qui ne correspond à rien
donne undefined.
Restorm déduit parfois un sélecteur tout seul au moment du câblage, quand la source a un aperçu statique qui se réduit à une seule valeur primitive. Vous pouvez toujours le remplacer ou le vider.