Sådan skriver du et mermaid sequence-diagram
Et sequence-diagram viser, hvem der taler med hvem, og i hvilken rækkefølge. I mermaid tager det cirka lige så lang tid at skrive, som det tager at beskrive højt, hvilket er grunden til, at det er den diagramtype, der overlever længst i en kodebase. Alt herunder er klar til copy-paste i editoren.
Det simpleste eksempel
Deklarér diagramtypen, og skriv derefter én linje pr. besked. Deltagere oprettes ved første omtale, i den rækkefølge de optræder.
sequenceDiagram
User->>API: POST /orders
API->>DB: INSERT order
DB-->>API: order id
API-->>User: 201 CreatedDeklarér deltagere eksplicit med participant User, når du vil have en bestemt venstre-til-højre-rækkefølge frem for rækkefølgen af første omtale.
Piletyper
| Syntaks | Betydning |
|---|---|
A->>B: text | Forespørgsel — heltrukket linje, udfyldt pilespids |
A-->>B: text | Svar — stiplet linje, udfyldt pilespids |
A->B: text | Heltrukket linje, åben pilespids |
A-)B: text | Asynkron besked — åben pilespids, intet svar forventet |
A-xB: text | Besked, der fejler eller droppes |
Konventionen, det er værd at holde fast i: heltrukket til kaldet, stiplet til svaret. En læser kan så kende forskel på en forespørgsel og et svar uden at læse en eneste label.
Deltagere og aliaser
sequenceDiagram
participant U as Browser
participant A as API gateway
participant S as Order service
U->>A: GET /orders
A->>S: list(userId)
S-->>A: orders
A-->>U: 200 OKBrug actor U as Browser i stedet for participant for at tegne en pindefigur — det er det værd for mennesket i venstre kant af et autentificeringsflow.
Aktiveringsbjælker
Aktiveringsbjælker viser, hvor længe en deltager er optaget. Markér dem enten eksplicit med activate/deactivate, eller tilføj + og - til pilene, hvilket er kortere og sværere at bringe ud af balance.
sequenceDiagram
User->>+API: POST /pay
API->>+Bank: charge
Bank-->>-API: authorised
API-->>-User: receiptLoops, betingelser og parallelt arbejde
sequenceDiagram
User->>API: POST /import
loop every row
API->>DB: upsert row
end
alt all rows valid
API-->>User: 200 OK
else some failed
API-->>User: 422 with errors
end
par notify
API->>Email: send summary
and audit
API->>Log: write entry
endloop <label>…end— gentagelse.alt <label>…else <label>…end— gensidigt udelukkende grene.opt <label>…end— en gren, der måske slet ikke sker.par <label>…and <label>…end— ting, der sker samtidig.critical/break— et afsnit, der ikke må afbrydes, og en tidlig exit.
Noter
sequenceDiagram
User->>API: POST /login
Note right of API: Rate limited<br>5 per minute
API-->>User: token
Note over User,API: Token is valid for 30 daysNote over A,B spænder over to deltagere og er det rette sted for en betingelse, der hører til interaktionen snarere end til den ene eller anden side af den.
Et fuldt eksempel
sequenceDiagram
actor U as User
participant A as App
participant P as Provider
U->>+A: Click "Sign in"
A-->>-U: Redirect to provider
U->>+P: Authorise
P-->>-U: Redirect back with code
U->>+A: GET /callback?code=…
A->>+P: Exchange code for token
P-->>-A: access token
Note right of A: Session cookie set here
A-->>-U: Signed inRedigér dette diagram
Indsæt det i kode-fanen, og ret en linje — forhåndsvisningen gentegnes, mens du skriver.
Ofte spurgt
Hvordan nummererer jeg beskederne?
Sæt autonumber på linjen lige efter sequenceDiagram. Hver besked får så et fortløbende nummer, hvilket gør et diagram meget nemmere at tale om i review-kommentarer.
Kan en deltager sende en besked til sig selv?
Ja — skriv samme navn på begge sider: API->>API: retry. Mermaid tegner løkken tilbage ind i samme lifeline.
Hvordan viser jeg, at en deltager ophører?
Brug destroy <name> før den besked, der afslutter den, eller create participant <name> for at få den til at dukke op midt i diagrammet frem for øverst.
Kan jeg redigere et sequence-diagram på det visuelle lærred?
Det visuelle lærred redigerer flowcharts. Sequence-diagrammer skrives på kode-fanen, hvor de gengives live i forhåndsvisningen — hvilket som regel er hurtigere alligevel, siden et sequence-diagram grundlæggende er en liste af linjer.