Для решения специфичных и сложных технических задач вам может понадобиться разработка отдельного сервиса. Например, для решения задач обработки данных или для задач, связанных с интенсивным использованием ресурсов сервера (процессор, память, видеокарты).
Платформа ELMA365 полностью готова к тому, чтобы соединить в единый ландшафт множество существующих систем и сервисов. Для этого выделяется два потока обмена информацией.
Сторонний сервис вызывает платформу ELMA365
Для этого используются готовые Web API платформы, а также методы API, которые пользователь может разработать самостоятельно в модуле. Типовыми сценариями взаимодействия в данном случае считаются:
- получение элементов приложения для хранения и обработки;
- обновление значений в элементах по результатам событий во внешней системе;
- запуск процесса или создание элемента приложения по событию внешней системы;
- хранение и обработка файлов и документов.
Благодаря возможностям сценариев и TypeScript SDK пользователь может создавать свои собственные методы API в модулях, которые будут исполнять значительную часть логики внутри платформы. Это позволяет сократить количество вызовов из внешней системы до минимума.
Процессы и виджеты вызывают сторонний сервис
Для интеграции в этом направлении в процессах и виджетах можно использовать сценарии на TypeScript, которые будут выполняться в платформе и вызывать внешний сервис. Для вызова сервиса по HTTP‑протоколу в TS SDK есть метод fetch(). Используя этот метод, можно быстро вызвать любой внешний сервис и тут же прочитать ответ.
Например, можно написать такой сценарий для получения курса доллара с сайта ЦБ РФ:
const res = await fetch("https://www.cbr-xml-daily.ru/daily_json.js");
if (res.ok) {
const cbrData = await res.json();
const usdPrice = cbrData["Valute"]["USD"]["Value"] as number;
data.items.push({name: 'USD', price: usdPrice.toString()});
}
Метод fetch также поддерживает параметры, если требуется выполнить более сложный запрос:
const res = await fetch("https://my.server.name/api/products", {
method: "POST",
headers: {
"Authorization": 'Bearer SOME-TOKEN-HERE',
},
body: JSON.stringify({
name: "New product",
cost: 13.20,
})
});
if (!res.ok) {
// Обработка ошибок
}
const resData = res.json();
Таким образом, взаимодействие с вашим сервисом может быть выполнено в самых разных сценариях:
- при создании элемента приложения;
- в рамках выполнения процесса;
- в сценариях виджета или страницы;
- при обработке системных событий в модуле.
В редакции On‑Premises для интеграции с внешними сервисами дополнительно существуют следующие возможности:
- делегированное действие в бизнес-процессе;
- делегированный обработчик событий в модуле.
Развертывание и поддержка сервиса
Следует учитывать, что платформа и вендор никак не регламентируют способы разработки, размещения, поддержки и обеспечения безопасности для вашего собственного сервиса. Однако, мы можем дать некоторые рекомендации по размещению и изоляции сервисов в локальном кластере, исходя из собственной практики.
- разрабатывайте сервис с использованием Docker контейнеров. Этот подход позволит создавать повторяемые и обновляемые сервисы. Такие сервисы очень просто установить в кластер Kubernetes, который является основным оркестратором для системы;
- оставляйте свой сервис внутри закрытой сетевой зоны. Не прокидывайте в общий доступ любые порты и точки доступа до сервиса без крайней необходимости. Соблюдайте правила безопасной разработки сервисов;
- по возможности, изучите рекомендации разработки облачных приложений в статье «Двенадцать факторов».
Кроме того, ознакомьтесь со статьей «Создание собственного микросервиса», где приведен пример создания и установки простого микросервиса в кластер ELMA365 On‑Premises.