NexusFabricCereți o prezentare

Transformări

Un flux descrie ce se întâmplă cu mesajul, în ordine. Pagina asta e despre limbajul în care se scrie asta și despre ce refuză compilatorul înainte ca fluxul să ajungă în producție.

Unde se scrie un flux

Același fișier se deschide în două feluri. În VS Code se deschide ca pânză: un nod pe fiecare pas, rutele etichetate pe muchii, reordonare prin tragere, salt în subflux — și se salvează înapoi în același text. O extensie de server de limbaj îl verifică în timp ce se scrie și pune eroarea la poziția ei în fișier. Pe disc rămâne text: se citește într-un git diff și se publică din linia de comandă.

Refuzurile de mai jos sunt ale compilatorului și vin la publicare — același verdict pe care îl dă nexus validate, înainte ca fluxul să plece undeva.

Un fișier stricat oprește publicarea, nu instalația

Limbajul de fluxuri are un singur parser. Un fișier stricat produce o eroare de parsare care numește poziția, iar instalația rulează mai departe fluxurile deja publicate.

  • Un nume de context se citește într-un singur fel. Cheile de credențiale și anteturile de ieșire sunt șabloane, verificate la publicare — nu șiruri interpretate la rulare.
  • Un nume de flux e segment de cale, sub o singură regulă, aplicată la publicare, la ușă și la coadă.

Două garduri, două înțelesuri

Diferența dintre a filtra și a refuza e scrisă în flux, nu descoperită în producție. condition filtrează tăcut: mesajul care nu se potrivește nu merge mai departe. validate refuză explicit, la prima regulă falsă, cu mesajul și codul de status cerute de regulă; restul regulilor nu se mai evaluează.

Cele două garduri, unul lângă altul
## Step: filtreaza
```condition
$.type == "order"
```

## Step: verifica
```validate
$.orderId != null | "orderId is required" | syntactic
$.amount > 0      | "amount must be positive"
```

Rutarea rulează o singură ramură

Ramurile se evaluează în ordinea declarării, prima care se potrivește rulează, iar celelalte nu se execută deloc. Forma blocului de ramuri se cere la publicare: o țintă scrisă în afara blocului, o ordine care ar lăsa o regiune goală sau o ramură scrisă sub cea care se potrivește întotdeauna sunt refuzuri, nu comportament tăcut.

Un bloc de rutare
## Step: alege
```route
$.channel == "retail"  -> catre-retail
$.channel == "partner" -> catre-partener
otherwise              -> catre-implicit
```

Transformările se compilează la publicare

Un XSLT în afara subsetului acceptat e refuzat la publicare, nu executat altfel. Refuzul numește construcția neacoperită, iar el vine în clipa în care cineva publică, nu în clipa în care sosește primul mesaj din producție.

Biblioteci de fluxuri

Un flux poate chema un flux de bibliotecă, expandat la compilare cu parametri literali. Referința se rezolvă în tenantul apelantului, iar artefactul compilat poartă copia acelui tenant — deci două organizații cu o bibliotecă omonimă nu împrumută una de la alta.

Ce poartă un mesaj de eroare

Un mesaj de eroare de rulare poartă forma, nu conținutul: niciun sit de eroare din executor nu interpolează o valoare din mesajul primit. Asta înseamnă că un jurnal de erori se poate citi, se poate trimite mai departe și se poate păstra fără să ducă cu el datele clientului vostru.

Ce nu face limbajul

Ramificarea paralelă fără reunire, lipsa conversiei după schemă și lipsa unui tip temporal sunt limite reale ale limbajului.