Compose

Compose is the request builder — the surface where you actually invoke a method and read its response. It's the workbench's centre of gravity: Discover finds the methods, Compose runs them. v2.1 rebuilt it as a Hoppscotch-style per-protocol builder and packaged it as Kuestenlogik.Bowire.Compose (renamed from Rail.Compose in Welle 2).

For where Compose sits in the whole data-flow — what feeds it and what it hands off to — see rail pipelines & hand-offs.

What the rail is

Property Value
Rail id compose (verbatim — deep-link ?rail=compose)
Package Kuestenlogik.Bowire.Compose
Sidebar Library — Collections + Presets
Needs a workspace Yes (RequiresWorkspace) — Compose reads the active workspace's URLs, env, and collections
Always on Yes — it's a core surface, not an optional tool

The rail has two regions: the Library sidebar on the left (saved requests grouped into collections, plus per-method presets) and the request builder on the right (one tab per open request).

The pipeline

flowchart LR
    IN["Method + request config<br/>(from Discover, a collection, or authored by hand)"]
    FORM["Schema-backed form / raw JSON<br/>+ metadata headers + auth + variables"]
    INV["POST /api/invoke<br/>POST /api/parallel"]
    OUT["Response envelope<br/>+ history entry"]

    IN --> FORM --> INV --> OUT
  • In — a method arrives three ways: click a method row in Discover (opens a builder tab), open a saved entry from a collection, or author a freeform request against a raw URL.
  • Build — the request pane renders a schema-backed form or a raw JSON editor; you set metadata headers, authentication, and {{variable}} substitutions. Per-protocol layouts adapt the pane (a REST path+verb+query row, a gRPC service/method selector, a GraphQL query editor, …).
  • Invoke — the call goes out over POST /api/invoke (single) or POST /api/parallel (N-at-once). Variable substitution runs on the body first.
  • Out — the response lands in the response pane (syntax-highlighted, with the streaming log for streaming methods) and a history entry is recorded.

The Library sidebar

The left sidebar is the Library (SidebarKind = library): it lists the active workspace's Collections and the per-method Presets (saved request configurations). Collections are managed entirely from here — create, rename, reorder, and drag entries between groups. Opening a collection entry loads it into a builder tab.

Making a request

  1. Open a method — click it in Discover, or open a saved entry in the Library, or start a freeform request.
  2. Fill the request — toggle between the form and raw JSON, set headers + auth, reference {{env.var}} / {{secret.NAME}} / {{response.path}} placeholders.
  3. Invoke. Read the response in the response pane; click any value to paste a {{response.path}} reference into the next request (response chaining).

Hand-offs — where a Compose request goes next

Compose is a hand-off source: a built request can be promoted onto other rails without re-authoring it.

Action Goes to Carries
Drag a Discover method in (application/x-bowire-method) (into Compose) method → new builder tab
Save to collection Library / Collections request config → collection entry
Run as benchmark… Benchmarks request → single-method load spec
Console record toggle (shift / right-click) Recordings the live call → recording step
Scan target Security the request context → scan target

Persistence

Open tabs, history, and the Library live in the active workspace — browser localStorage by default, or the Git-backed / .bww storage when a disk-backed workspace is active. Switching workspaces swaps the whole Library and history set at once.

See also