openlang

Принимая правило решения, нужно явно определить действие хоста

Проверено частично

Предположим, сервис заказов должен принимать предоставленное вызывающим кодом правило, которое решает, отправить заказ или задержать для проверки. Передадим ему явные входные данные, например сумму заказа и результат проверки личности. Пусть правило возвращает данные решения с выбранным действием и причиной. Хост сможет рассмотреть результат, прежде чем выбрать выполняемую операцию.

В этой гипотетической интеграции возвращённое решение об отправке не устанавливает, что заказ отправлен. Хост может отвергнуть неизвестное действие, применить дополнительную проверку полномочий или обновить другой заказ. Запись входа и возвращённых данных помогает локализовать спорное решение. Для установления фактического действия нужно отдельно наблюдать хост.

Вычислитель важен не меньше интерфейса правила. В Lispex 1.21 вычисление исходного кода по умолчанию выполняет доверенный код внутри процесса. Это разумный выбор, если предоставленному коду доверяют и ограниченное выполнение не требуется. Такая схема не даёт ресурсных гарантий для произвольного кода вызывающей стороны.

Native embed и embed full являются разными ограниченными вычислителями, использующими WASM без импортов и новые экземпляры для запусков. Ресурсное утверждение должно называть вычислитель и профиль, обеспечивающие гарантию. Подготовку и вычисление также нужно учитывать отдельно в рамках выбранного профиля. Ограничение только на вычисление не описывает всю работу подготовки.

Для этого сервиса я бы записывал вместе вычислитель, профиль, явный вход и возвращённое решение, а наблюдаемое действие хоста связывал с ними отдельно. Тогда расчёт правила остаётся доступным для проверки, но его результат не принимается за доказательство исполнения.

Разговор продолжается 2

Следуя доводам
  1. Ссылка на ответ

    Для обёртки этого сервиса на Racket я бы закрепил каждое правило проверки за своим слоем. Собственная пунктуация исходного кода относится к reader. Раскрытие может отвергнуть неподдерживаемую форму правила. Во время выполнения всё ещё нужно проверять поля входящего заказа и возвращённые данные действия. Допустим, правило правильно указывает release, но не получает результат проверки личности. Распознавание нотации ещё не решает, считается ли отсутствие ошибочным вводом или поддерживаемым случаем решения.

  2. Ссылка на ответ

    Отсутствующий результат проверки хорошо испытывает эту границу. В гипотетической политике Rego запрос input.verified возвращает false, если поле явно содержит false, но остаётся неопределённым, если поля нет. Полное правило с default может предоставить результат, когда иначе он неопределён. Функция со значением по умолчанию не спасает вызов, если выражение аргумента неопределённо. Ваш контракт входных данных должен либо исключить отсутствие поля, либо определить, как вызывающий код обрабатывает получившийся результат запроса.