Выражения и контекст исполнения
Вместо специальных конструкций вводится единый механизм вычислений — выражения в двойных фигурных скобках (идея заимствуется у n8n). Они визуально отделены от обычного текста, но запрос остаётся почти обычным HTTP.
Контекст первого класса
Runtime-объекты дают доступ к результатам и окружению:
$Login.body.token # результат узла Login
$Login.headers.Authorization
$Login.status
$item.id # текущий элемент коллекции (foreach)
$parent.body.next # результат родителя (пагинация)
$env.API_URL # переменная окружения
Ссылка на результат узла — это $<node-name>.<output>. Каждый узел имеет контракт: input, output, context.
HTTP остаётся HTTP
Выражение вычисляется и рендерится прямо в запрос:
### Profile
GET /profile
Authorization: Bearer {{ $Login.body.token }}
Выражение может возвращать не только строку, но и объект — например, тело POST, собранное из нескольких результатов. Зависимости из выражений автоматически строят план: если Profile ссылается на $Login, исполнитель понимает Login → Profile.
Filter и пагинация — без нового синтаксиса
Filter использует тот же механизм выражений, а не отдельную конструкцию:
### Users
GET /users
### Filter: Active
{{ $item.active }}
### Orders
GET /orders?user={{ $item.id }}
Пагинация — естественное продолжение: дочерний узел, URL которого зависит от результата родителя (GET {{ $parent.body.next }}).
Execution tags
Управляющие конструкции заменяются метаданными-тегами, а не новым синтаксисом:
- выполнение:
@retry,@timeout,@cache,@parallel - результаты:
@capture - потоки:
@filter,@paginate,@foreach
Для «голого $» есть альтернатива — контекст как объект: current.active, result.active, input.active.
Источники
- Обсуждение концепции httplan — диалог с ChatGPT (2026-07-08), chatgpt.com/share/6a4e7804-ce90-83ed-acd0-0def6540872d