Микросервис route-orchestration

В статье описываются функции, логика работы, конфигурация и методы микросервиса route-orchestration.

Микросервис route-orchestration предоставляет функциональность для управления маршрутами доставки заказов (просмотр, создание, редактирование и удаление).

Доступ к сервису предоставляется по запросу.

Логика работы

В работе микросервиса используются сущности:

  • Маршрут (Route) - содержит данные о маршруте доставки (id маршрута; информацию о точке отправления и точке прибытия; тип доставки; информацию о перевозчике; время, необходимое на доставку, а также доступность или недоступность доставки)
  • Референс (Reference) - содержит данные о типе запрашиваемого референса (id, ключ, название и содержимое референса (см. ReferenceItem ниже)
  • Содержимое референса (ReferenceItem) - содержит данные о содержимом референса (id, ключ, название объекта)

Аутентификация

При обращении к сервису требуется в заголовке Authorization указывать токен: Authorization: Bearer <токен>.

Service context path

/api/route-orchestration/

Настройки и параметры конфигурации

Параметры конфигурации указываются в Vault.

Vault используется на нашей платформе в качестве хранилища всех конфигураций развертывания. Инструмент может быть выбран другой.

По умолчанию

{
  "env": {
    "JAVA_XMS": "ХХm",
    "JAVA_XMX": "YYYm"
  }
}


Copy-icon
Указываемые на каждом отдельном стенде

// пример взят с тестового стенда


{
  "env": {

    "KAFKA_BROKER_ADDRESS": "сокет_для_брокера_kafka",

    "OAUTH_ECOM_CLIENT_ID": "токен_приложения_ECOM_OAuth",
    "OAUTH_ZITADEL_CLIENT_ID": "токен_приложения_Zitadel",
    "OAUTH_ZITADEL_ISSUER_URI": "url_Zitadel"

  }
}



Copy-icon

Методы микросервиса Copy-icon

Работа с маршрутами Copy-icon

  • Создание маршрута - POST запрос, v1/routes
Request body sample

name - query-параметр: название региона

Copy-icon
Response sample

{
        "id": "anf8ch39-fj39-js2l-ybn3-l49xn2kr9lln",
        "name": "г.Воронеж",
        "headId": "jwic9v08-djw8-j301-соид-alvi48dn48fn",
        "level": 3,
        "defaultRegion": false,
        "inferiors": []
}

Copy-icon
Response codes

200 - операция выполнена успешно, получен отфильтрованный список регионов

  • Получение маршрута по его id - GET запрос, /v1/routes/{routeId}
Request parameters

routeId - path-параметр, обязательный: идентификационный номер маршрута
language - query-параметр, необязательный: язык страницы

Copy-icon
Response sample

{
  "id": "route022317DC",
  "departure": "a9efb6d6-4af5-4c2d-8af6-888777040e1d",
  "departureName": "Склад 11-1",
  "departureType": "point.type.location",
  "destination": "7e82a62d-12a2-4947-9cb8-29717eebcddd",
  "destinationName": "г. Валдай",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Курьерская доставка",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 8.5,
  "isAvailable": true
}

Copy-icon
Response codes
  • 200 - операция выполнена успешно, информация о маршруте получена
  • 404 - ошибка, не удалось найти маршрут с таким id
  • Удаление маршрута по его id - DELETE запрос, /v1/routes/{routeId}
Request parameters

routeId - path-параметр, обязательный: уникальный идентификатор маршрута

Copy-icon
Response sample

В ответе приходит только код операции, например, 204.

Response codes
  • 204 - операция прошла успешно, маршрут удален
  • 404 - ошибка, не удалось найти маршрут с таким id
  • Редактирование маршрута - PATCH запрос, /v1/routes/{routeId}
Request parameters

routeId - path-параметр: идентификатор маршрута

Copy-icon
Request body sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departure": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departureName": "Main Store",
  "departureType": "point.type.location",
  "destination": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "destinationName": "Belarus",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Courier",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 12.5,
  "isAvailable": true
}

Copy-icon
Response sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departure": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "departureName": "Main Store",
  "departureType": "point.type.location",
  "destination": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "destinationName": "Belarus",
  "destinationType": "point.type.region",
  "type": "delivery.courier",
  "typeTranslation": "Courier",
  "companyName": "delivery.company.dc",
  "companyNameTranslation": "DC",
  "deliveryHours": 12.5,
  "isAvailable": true
}

Copy-icon
Response codes
  • 202 - операция прошла успешно, маршрут обновлен
  • 204 - No Content
  • 400 - ошибка, не удалось обновить маршрут
  • Получение отфильтрованного списка маршрутов - POST запрос, /v1/routes/list
Request parameters

language - query-параметр: язык отображения списка с маршрутами

Copy-icon
Request body sample

{
  "departure": "7e4993a1-7804-45fb-ba46-6d0b0634adfb",
  "destination": "01e50a75-202f-46bf-a8e3-9491ec0407f7"
}

Copy-icon
Response sample

[
  {
    "id": "route022313DC",
    "departure": "7e4993a1-7804-45fb-ba46-6d0b0634adfb",
    "departureName": "г. Калининград",
    "departureType": "point.type.region",
    "destination": "01e50a75-202f-46bf-a8e3-9491ec0407f7",
    "destinationName": "Главный склад",
    "destinationType": "point.type.location",
    "type": "delivery.courier",
    "typeTranslation": "Курьерская доставка",
    "companyName": "delivery.company.dc",
    "companyNameTranslation": "DC",
    "isAvailable": true
  }
]

Copy-icon
Response codes

200 - операция выполнена успешно, список маршрутов получен

  • Получение страницы с маршрутами - POST запрос, /v1/routes/page
Request parameters

language - query-параметр: язык отображения страницы с маршрутами

Copy-icon
Request body sample

{
  "sort": [
    {
      "sortBy": "id",
      "direction": "ASC"
    }
  ],
  "page": 0,
  "size": 10,
  "filter": {
    "departure": "7e82a62d-12a2-4947-9cb8-29717eebcddd"
  }
}

Copy-icon
Response sample

{
  "content": [
    {
      "id": "route022318DC",
      "departure": "7e82a62d-12a2-4947-9cb8-29717eebcddd",
      "departureName": "г. Валдай",
      "departureType": "point.type.region",
      "destination": "a9efb6d6-4af5-4c2d-8af6-888777040e1d",
      "destinationName": "Склад 11-1",
      "destinationType": "point.type.location",
      "type": "delivery.courier",
      "typeTranslation": "Курьерская доставка",
      "companyName": "delivery.company.dc",
      "companyNameTranslation": "DC",
      "deliveryHours": 8.5,
      "isAvailable": true
    }
  ],
  "pageable": {
    "sort": {
      "sorted": true,
      "unsorted": false,
      "empty": false
    },
    "pageNumber": 0,
    "pageSize": 10,
    "offset": 0,
    "paged": true,
    "unpaged": false
  },
  "last": true,
  "totalPages": 1,
  "totalElements": 1,
  "first": true,
  "numberOfElements": 1,
  "sort": {
    "sorted": true,
    "unsorted": false,
    "empty": false
  },
  "size": 10,
  "number": 0,
  "empty": false
}

Copy-icon
Response codes

200 - операция выполнена успешно, получена страница с маршрутами

Работа с референсами Copy-icon

  • Получение списка возможных типов доставки или курьерских компаний - GET запрос, /v1/references/{key}
Request parameters

key - path-параметр, обязательный: ключ референса (для получения списка типов доставки используется ключ delivery.type; для списка курьерских команий - delivery.company)
language - query-параметр: язык отображения информации

Copy-icon
Response sample

{
  "id": "5dc618af-af49-4adc-bccd-4d17aeff7526",
  "key": "delivery.type",
  "name": "Тип доставки ",
  "items": [
    {
      "id": "5dc618af-af49-4adc-bccd-4d17aeff7611",
      "key": "delivery.courier",
      "name": "Курьерская доставка"
    }
  ]
}

Copy-icon
Response codes
  • 200 - операция успешно выполнена
  • 404 - ошибка, указанный ключ не найден