Pular para o conteúdo

Referências entre blocos

A expressão {{...}} resolve em runtime dentro de blocos HTTP, DB e standalone. Essa página é a referência completa de sintaxe. Pra uso no estilo how-to, veja Referencie valores entre blocos.

expression = "{{" reference "}}"
reference = alias-ref | env-ref | positional-ref
alias-ref = ALIAS "." FIELD ("." PATH)*
env-ref = KEY # sem pontos
positional-ref = "$prev" ("." PATH)*
FIELD = "body" | "status" | "headers" | "cookies" | "size" | "time"
| "row[" INT "]" | "rows" | "affected"
PATH = IDENTIFIER ("[" INT "]")* | "[" QUOTED "]"
ALIAS = identifier (letras, dígitos, _, -)
KEY = SCREAMING_SNAKE_CASE (convenção, não forçada)
CampoTipoOrigem
bodyJSON parseado (ou fallback texto)Body de response HTTP / resultado de query DB
statusnúmeroStatus code HTTP (DB: sempre 200 em sucesso)
headers.<name>stringHeader de response HTTP (case-insensitive)
cookies.<name>stringValor Set-Cookie parseado
sizenúmeroBytes do body da response
timenúmeroTempo total decorrido em ms
CampoTipoSignificado
row[N]objeton-ésima linha do result set (0-indexed)
rowsarrayarray completo de resultado
rows.lengthnúmerocontagem de linhas
affectednúmerocontagem de linhas INSERT/UPDATE/DELETE

Depois de body. ou row[N]., navegue com . e [N]:

PathLê de
body.user.id{ user: { id: 42 } }42
body.items[0].name{ items: [{ name: "x" }] }"x"
body.tags[2]{ tags: ["a", "b", "c"] }"c"
body["odd-key"]bracket-quoted pra keys que não são identifier
body['single quotes']também suportado

Não suportado: wildcards (body[*]), filtros JSONPath (body[?(@.id > 5)]), descida recursiva (body..name). Se você precisa disso, encadeie blocos no lugar.

$prev resolve pro bloco anteriormente executado acima do atual em ordem de documento, com a response como raiz implícita:

Você escreveIgual a
{{$prev.body.id}}{{<previous-alias>.body.id}}
{{$prev.status}}{{<previous-alias>.status}}

Útil pra scripts rápidos de uma só execução. Frágil pra runbooks commitados — reordene blocos e $prev resolve diferente.

$prev NÃO aparece no popover de autocomplete {{ (by design, pra desencorajar). Tooltips de hover herdam.

Refs de env têm sem pontos — são um lookup de string flat:

{{BASE_URL}} ✓
{{API_TOKEN}} ✓
{{BASE_URL.something}} ✗ — tratado como alias-ref, não env-ref

Se BASE_URL é AMBOS uma env var E um alias de bloco, o bloco vence. Veja “Prioridade” abaixo.

Tipo de blocoPosiçãoNotas
HTTPPath + query da URLEncoded se o valor contém chars especiais de URL
HTTPKeys de headerTem que resolver pra um token HTTP válido (sem espaços)
HTTPValues de headerQualquer string
HTTPBodyQualquer content type; resolvido antes do send
DBBody SQLConvertido pra bind parameter, não interpolado
StandaloneBody do blocoDepende do tipo de bloco standalone

Referências NÃO resolvem em:

  • Tokens da info-string (alias=..., timeout=..., etc)
  • Comentários dentro do body do bloco (linhas # em HTTP)
  • Dentro de linhas # expect:? Sim — eles RESOLVEM lá (pra você poder dar assert contra o valor de outro bloco)

Quando resolvendo {{X}}:

  1. Alias de bloco — procura um bloco acima do atual com alias=X. Se achar, trata como alias-ref.
  2. Env var — faz lookup de X em [vars] do ambiente ativo. Se achar, trata como env-ref.
  3. Erro — nenhum achado; sublinha vermelho no editor, falha com “unknown alias X” na run.

Aliases de bloco vivem em escopo de arquivo — referências só podem apontar pra blocos antes no mesmo arquivo .md. Sem referências cross-file.

Env vars vivem em escopo de vault — mesmo valor em todos os arquivos sob o ambiente ativo.

Quando você dispara um bloco:

  1. Faz parse de todas as referências {{...}} no body, URL, headers do bloco.
  2. Constrói a DAG de dependências (só alias-refs — env-refs são flat).
  3. Pra cada alias-ref upstream:
    • Checa o cache. Se hit, usa a response cacheada.
    • Se miss, roda esse bloco (recursivo — ele pode ter as próprias deps).
  4. Substitui todas as referências com os valores resolvidos.
  5. Roda o bloco atual.

Ciclos são impossíveis por construção — referências só podem apontar pra cima no arquivo. Se você reordenar blocos e criar uma forward reference, o editor sublinha em vermelho.

Quando B referencia A, rodar B pode ou não rodar A:

Estado do cacheComportamento
A nunca rodouRoda A, depois B
A cacheado, inputs inalterados desde última runUsa A cacheado (instantâneo), depois B
A cacheado, mas env ou upstream-de-A mudouRe-roda A, depois B
Bloco de mutação (POST/PUT/DELETE)Sempre re-roda, ignora cache

A key de cache é sha256(método + URL + headers + body + snapshot do env só das vars referenciadas). Mudar uma env var não referenciada não invalida.

OndeComo
No editorHover em {{...}} — popover mostra valor resolvido ou erro
No editorCtrl+click (ou Cmd+click) — pula pra definição do alias
Pre-runPopover atualiza ao vivo conforme cache enche
Post-runAba Raw do painel de response mostra request literal com refs substituídas
Por-blocoToolbar → aba References — cada ref + valor atual

Digite {{ em qualquer body de bloco → popover mostra:

  • Todos os aliases acima do bloco atual (com hint de tipo de body)
  • Todas as env vars do ambiente ativo

Filtre digitando. Tab pra completar. Esc pra cancelar.

SintomaCausaCorreção
path body.user.id not foundO formato da response não bate com o que você escreveuCheque a response real do bloco upstream na aba Body
Referência resolve pro valor antigoEsqueceu de re-rodar bloco upstreamCache invalida em mudança de input — geralmente auto
Key de bracket não parseadabody[odd key] sem aspasAspas: body["odd key"]
$prev resolve pro bloco erradoReordenou blocosUse aliases nomeados pra runbooks commitados
Env var resolveu literalEnv ativo não tem a keySeletor de env da TopBar + cheque envs/<env>.toml
Alias de bloco resolveu mas queria envColisão de nomesBloco vence; renomeie um dos dois