Перейти к основному содержимому

Получение служебной информации о сервисе бизнес-логики

В Атомкод служебную информацию о сервисе предоставляет инфраструктурный сервис System API.

Следующий блок кода файла application.yaml демонстрирует активацию Spring Boot Starter systemApi.

platform:
system-api:
starter:
enabled: true

В результате регистрируется и активируется SystemController, а также становятся доступны реализации стандартных системных методов.

Каждый сервис Атомкод реализует следующие обязательные системные методы для получения определенной информации:

  • /api/healthcheck: состояние сервиса;
  • /api/system/version: версия сервиса;
  • /api/system/utcdatetime: время на сервере в формате UTC;
  • /api/system/node/config: текущие параметры конфигурации;
  • /api/system/node/id: идентификатор узла сервиса;
  • /api/system: список доступных методов API;
  • /api/contract/<cmd>: спецификация определенного метода.

Метод /api/system

Возвращает список методов, к которым могут обращаться другие сервисы Атомкод. Описание метода включает:

  • cmd: имя команды;
  • urn: адрес конечной точки (/api/someCommand);
  • method: тип HTTP-метода (GET/POST/GraphQL);
  • authorizationExplicitScopes: необходимые области разрешения доступа (необязательно).

Метод /api/contract/{cmd}

Возвращает подробную информацию о методе:

  • cmd: имя команды;
  • bodyArgument: описание тела запроса;
  • returnType: описание тела ответа.

Информация в ответе содержит описание всех полей запроса и ответа.

Такая схема предназначена для вызова методов сервиса по паре <имя сервиса> + <имя команды>. Клиент вызывает метод /api/contract/{cmd}, из запроса извлекается urn и по полученному адресу выполняется стандартный REST-запрос. Автоматическая работа согласно этой схеме реализована в библиотеке apiClient.

Для автоматического получения этой информации созданы аннотации @PlatformController и @PlatformCommand. При публикации методов эти аннотации используются следующим образом:

  1. к классу REST-контроллера добавляется аннотация @PlatformController.
  2. для каждого публикуемого метода REST-контроллера добавляется аннотация @PlatformCommand, и в полях аннотации указывается информация о методе.

При старте сервис сканирует все классы, имеющие аннотацию @PlatformController, и собирает данные о методах из @PlatformCommand. Если REST-контроллер не имеет аннотацию @PlatformController, данные класса не могут быть прочитаны.

Следующий блок кода демонстрирует пример REST-контроллера с использованием аннотаций @PlatformController и @PlatformCommand для интеграции с API сервисов Атомкод.

package ru.platform.example.fastStartComponents.systemApi;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.platform.systemApi.commandInfo.annotation.PlatformController;
import ru.platform.systemApi.commandInfo.annotation.CommandType;
import ru.platform.systemApi.commandInfo.annotation.EmptyClassType;
import ru.platform.systemApi.commandInfo.annotation.PlatformCommand;

@RestController
@PlatformController
public class ApiSystemDemoController {

@GetMapping("api/demo")
@PlatformCommand(description = "Демометод", cmd = "demo", commands = {"demo"},
detectionCommand = "demo", urn = "api/demo", type = CommandType.POST,
queryArguments = {}, argumentType = EmptyClassType.class, returnType = String.class,
authorizationExplicitScopes = {})
public String test() {
return "Hello, world! from demo.";
}

}