Порты и наборы проверок
Порт хоста — объявленный стык между динамическим составным компонентом и приложением. Порт позволяет приложению на любом языке заранее знать, какие данные компонент принимает и о чём просит, и доказать поддержку стыка набором проверок.
Объявление порта
Порт — отдельный файл port.json в контрактах Core. Каждая версия порта
лежит в своей папке вместе с набором проверок: в исходниках Framework — в
src/core/contracts/ports/<порт>/<версия>/, в поставке ui — в
distr/core/contracts/ports/<порт>/<версия>/. Порты и наборы проверок
входят во Framework, в том числе порты, через которые работают компоненты
продуктов. Файл
порта содержит:
- возможности — необязательные части порта, которые хост может дать или не дать конкретному экземпляру;
- данные — что компонент принимает, закрытыми схемами;
- намерения — что компонент просит, с перечнем возможных ответов хоста: применено, конфликт с текущей ревизией, отказано с причиной, недоступно;
- настройки — какие слои хранятся;
- набор проверок (
conformance) — ссылку на набор, его хеш и число случаев; - совместимость — с какими версиями порта эта версия совместима.
Форма объявления задана отдельной схемой — схемой порта (формат
simai.composite.host-port). Рядом с port.json лежит набор проверок: его
опись kit/manifest.json и случаи в kit/cases/. Например, текущая версия
порта представления данных — distr/core/contracts/ports/simai.dataview-port/1.12.0/port.json
и distr/core/contracts/ports/simai.dataview-port/1.12.0/kit/manifest.json.
Набор проверок
Набор проверок (conformance kit) — образцы данных, намерения, которые поднимает компонент, и ожидаемые ответы хоста, включая конфликт, отказ и запрет.
Набор не зависит от транспорта: он описывает данные и ответы, а не адреса и форматы передачи. Поэтому его может пройти хост на любом языке — PHP-приложение, Node-сервер, тестовая заглушка.
Правила для приложения:
- обязательно: заявлять поддержку версии порта только после прохождения набора этой версии;
- обязательно: записывать версию набора, свою ревизию и результат прохождения.
Эталонный хост
Эталонный хост — небольшая реализация хоста в тестах компонента, на которой владелец компонента — Framework или продукт — сам проходит набор проверок. Так поломка стыка обнаруживается у владельца, а не у продукта. Случай, который эталонный хост не проходит, не требуется и от продукта.
Кроме того, гейт владельца компонента сверяет:
- объявление порта — со схемой порта;
- байты порта — с тем, что закреплено в манифесте;
- каждое намерение — с событием, которое объявляет компонент;
- хеш набора — с самим набором.
Какие порты есть
Изданы порт представления данных (simai.dataview-port), порт
представления свойств (simai.property-view-port) и порт навигации
администратора (simai.admin-navigation-port). Через них работают
составные Smart-компоненты продуктов (см. Пакеты компонентов продуктов), а сами порты и наборы
проверок входят во Framework, поэтому приложение может реализовать и
проверить хост по открытому контракту. У
каждой версии порта свой набор проверок. Текущие версии портов — в карте
стандартов (см. Уровни стандартов); все изданные версии лежат в поставке ui:
distr/core/contracts/ports/<порт>/<версия>/.
Порт хоста — адаптер данных. Не путайте его с портами маршрутизации композиции, по которым между компонентами идут типизированные значения (см. Связь компонентов без кода проекта и Составной компонент в макете).
Смотрите также
- Порт хоста (
simai.composite-host-port) — требования стандарта порта хоста. - Связь с приложением: порты хоста и намерения — порты хоста в Smart-компонентах.
- Как проект проверяет своё использование Framework — как проект подтверждает поддержку порта.