Разработка решений на платформе ELMA365 / Пользовательские микросервисы

Пользовательские микросервисы

Для решения специфичных и сложных технических задач вам может понадобиться разработка отдельного сервиса. Например, для решения задач обработки данных или для задач, связанных с интенсивным использованием ресурсов сервера (процессор, память, видеокарты).

Платформа 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.