Skip to content

Вызов и ответ

Подключение

ПараметрЗначение
Протоколstreamable-http
Формат вызоваjsonrpc-2.0
АвторизацияBearer, токен выдаётся при подключении сервера к платформе

Если схема аргументов, которую сервер объявил в tools/list, запрещает дополнительные поля, платформа перед вызовом убирает аргументы, которых в ней нет. Поэтому новые необязательные аргументы контракта не ломают сервер со строгой схемой. При открытой схеме ничего не убирается.

Принципал

Кто вызывает инструмент, сервер узнаёт из принципала — подписанного платформой токена в отдельном заголовке.

ПараметрЗначение
ЗаголовокX-Norm-Principal
Алгоритм подписиES256
Ключи для проверки/.well-known/norm-jwks.json по адресу из утверждения iss
Наибольший срок жизни300 с

Утверждения принципала. Кто пользователь, из какого тенанта, с какими правами, каким способом вошёл и каким токеном провайдера это можно подтвердить.

ПолеОбязательноТип
audдаstring
auth_methodдаstring
correlation_idдаstring
delegation_idдаstring
expдаinteger
iatдаinteger
issдаstring
jtiдаstring
roleдаstring
scopesдасписок string
subдаstring
tenantдаstring
provider_tokenнетstring

Сервер проверяет принципал в два шага. Первый обязателен: подпись по ключам платформы, совпадение aud со своим подключением и срок действия. Второй — по выбору бизнеса: подтвердить у провайдера по auth_method и provider_token, что пользователь ещё действующий. Токен провайдера разрешён только для этой проверки, не для доступа к данным провайдера от имени пользователя; в журналах и отчётах он маскируется.

Ответ инструмента

Успешный ответ любого инструмента каталога — это structuredContent из двух частей: обязательного конверта и данных инструмента в поле data. Поля data описаны у каждого инструмента в разделе «Каталог инструментов».

Конверт ответа. Обязательная часть успешного ответа любого инструмента каталога: откуда данные, насколько свежи, есть ли продолжение. Дополнительные поля разрешены: ответ сервера может быть шире контракта.

ПолеОбязательноТипЧто это
freshnessдаFreshnessСвежесть
source_refsдасписок SourceRef
pageнетPageСтраница

SourceRef

Ссылка на источник. Система-источник, ключ записи в ней и человекочитаемая подпись.

ПолеОбязательноТип
refдаstring
sourceдаstring
labelнетstring

Freshness

Свежесть. Момент данных, срок годности в секундах и признак устаревания.

ПолеОбязательноТип
as_ofдаstring (date-time)
staleдаboolean
ttl_secдаinteger

Page

Страница. Есть ли ещё данные и непрозрачный курсор для следующей страницы.

ПолеОбязательноТип
has_moreдаboolean
next_cursorнетstring

Постраничная выдача

Инструмент с пометкой «списковый» отдаёт данные страницами. Он обязан принимать аргументы limit и cursor и возвращать в конверте page. Курсор непрозрачен: клиент передаёт page.next_cursor как есть, не разбирая его.

ListInput

Вход спискового инструмента. Размер страницы и непрозрачный курсор. Обязателен у инструмента, помеченного list: true.

ПолеОбязательноТип
cursorнетstring
limitнетinteger

Пределы

ПределЗначениеЧто ограничивает
max_result_chars32000символов в сериализованном structuredContent ответа
max_page_size200элементов на странице спискового инструмента
principal_max_ttl_sec300секунд жизни подписанного принципала
transcript_default_chars12000символов в окне расшифровки по умолчанию
transcript_max_chars24000символов в окне расшифровки наибольшее