Перейти к содержанию

SDK 0.3 · формат v2 · Совместимость с SDK

Запросы к API ​

http отправляет запрос и возвращает ответ сервиса.

Параметры ​

ПараметрНазначениеПо умолчанию
urlАдресОбязательно
methodHTTP-методGET
query, headersПараметры URL, заголовки{}
jsonJSON любого типа, включая массив и nullНе передаётся
contentТекст или FileRef для сырого телаНе передаётся
formПоля формыНе передаётся
filesИмена полей → FileRefНе передаётся
responsetext или filetext
response_headersКакие заголовки ответа сохранить[]
timeout_secondsЛимит одной попытки30
max_response_bytesРазмер распакованного ответа33554432
retrymax_attempts, delay_secondsGET/HEAD: 3 попытки, пауза 1 с; остальные: 1 попытка
on_transport_errorfail или returnfail

Один режим тела: json, content или form/files. Файлы совместимы с полями формы. Явный JSON null отличается от отсутствия тела. Для content тип содержимого задаётся через headers; байты файла берутся из FileRef.

Пример ​

YAMLФрагмент формата v2
yaml
- id: catalog
  block: http
  params:
    url: "{inputs.catalog_url}"
    method: GET
    query:
      limit: 20
    response_headers: [content-type]

Результат ​

status_code, headers, body, json, file, redirect_url, transport_error.

json/file могут быть null; при получении файла body пустой. headers содержит только запрошенные заголовки с именами в нижнем регистре. Редирект возвращается, но не выполняется автоматически.

Поведение ​

HTTP-код проверяется через validate. При сетевой ошибке fail останавливает шаг, return возвращает status_code=0 и тип ошибки. Это не доказывает, что запись на стороне сервиса не состоялась.

Повторы только для GET/HEAD: до 5 попыток, пауза 0–10 с. Запись автоматически не повторяется.

Пример: Google API ​

Workflow получает адрес сервисного аккаунта, scope и ключ → crypto подписывает JWT → http обменивает его на access_token → validate проверяет ответ → http обращается к Sheets или Drive с Bearer-токеном.

ID таблицы, папки и диапазон передаются входами. Строки ответа обрабатывает data; он сам к Google не подключается. Получение токена можно вынести в вызываемый workflow.

Нужен ли отдельный api ​

Предлагаю оставить http: API — назначение сервиса, HTTP — способ вызова. REST, GraphQL и RPC поверх HTTP различаются адресом, заголовками и телом, которые блок уже принимает. Ещё один api с теми же параметрами дублировал бы контракт.

Авторизацию, пагинацию и повторяемые вызовы конкретного сервиса можно собрать в вызываемый workflow с явными входами и выходами. Для gRPC или WebSocket потребуется отдельное обсуждение транспорта: переименование в api само по себе их не поддержит.

REST, GraphQL и JSON-RPC ​

Общая реализация http кодирует URL, заголовки и тело и разбирает ответ. Заранее задавать в ней бизнес-методы каждого API не требуется. Протокольные конверты выражаются теми же входами:

YAMLGraphQL поверх HTTP · фрагмент v2
yaml
- id: query
  block: http
  params:
    url: "{inputs.graphql_url}"
    method: POST
    json:
      query: "{inputs.query}"
      variables: "{inputs.variables}"
YAMLJSON-RPC поверх HTTP · фрагмент v2
yaml
- id: rpc
  block: http
  params:
    url: "{inputs.rpc_url}"
    method: POST
    json:
      jsonrpc: "2.0"
      method: "{inputs.method}"
      params: "{inputs.parameters}"
      id: "{inputs.request_id}"

HTTP 200 не гарантирует успех GraphQL/JSON-RPC: у них бывают errors/error в JSON. Проверка ответа и соответствия id выражается через validate; повторяемые конверты, авторизация и пагинация — через call/loop. Другие RPC-транспорты из этой поддержки не следуют.

Параметры операций ​

Используются JSON, формы, файлы, выбор заголовков ответа и ограничение размера. Добавляем сырой content, чтобы не выдавать JSON за любой HTTP-body. В v2 переименовываем старое body в явное json, timeout в timeout_seconds, объединяем retry_* в retry. Это миграция, а не незаметная смена v1. Старый skip_if переносится в общий when с инверсией смысла; отдельный флаг блоку больше не нужен.

Плагины и установка ​

В составе блока: Запросы HTTP/1.1: JSON, текст, формы, файлы, таймауты и повторы.

ПлагинВозможности
http2Транспорт HTTP/2

REST, GraphQL и JSON-RPC поверх HTTP используют обычные запросы. Авторизация и пагинация собираются в workflow.