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

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

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

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

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

В работе микросервиса используется сущность Регион (Region), которая определяет географические зоны, куда могут быть доставлены товары интернет-магазина.

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

При обращении к микросервису через API в запросах необходимо в заголовке Authorization указать токен: Authorization: Bearer <токен>.

Авторизация

Для обращения к сервису у пользователя должна быть роль Admin и/или Admin_Settings

Подробнее о ролях можно узнать здесь.

Service context path

/api/region-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

  • Получение отфильтрованного списка регионов - GET запрос, /v1/regions
Request parameters

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/regions/{regionId}
Request parameters

regionId - 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 - операция выполнена успешно, получена информация о запрашиваемом регионе
  • 400 - ошибка, не удалось найти запрашиваемый регион
  • Получение иерархии регионов - GET запрос, /v1/regions/hierarchy
Request parameters

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

Copy-icon
Response sample

[
    {
        "id": "f84jwl59f-kol3-94j2-u4jr-je9fjan350kf",
        "name": "Россия",
        "level": 1,
        "defaultRegion": false,
        "inferiors": [
            {
                "id": "ound48f3-dubh-84j3-kd93-lemvu80a3j32",
                "name": "г.Москва",
                "headId": "f84jwl59f-kol3-94j2-u4jr-je9fjan350kf",
                "level": 2,
                "defaultRegion": false,
                "inferiors": [
                    {
                        "id": "dhru8vj3-mfk3-3ht9-5mdl23jvia93",
                        "name": "до МКАД",
                        "headId": "ound48f3-dubh-84j3-kd93-lemvu80a3j32",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": []
                    },
                    {
                        "id": "58sk20ck-kpme-59vj-fjx8-fk38xjvluu4n",
                        "name": "за МКАД",
                        "headId": "ound48f3-dubh-84j3-kd93-lemvu80a3j32",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": []
                    }
                ]
            },
            {
                "id": "jwic9v08-djw8-j301-соид-alvi48dn48fn",
                "name": "Воронежская область",
                "headId": "f84jwl59f-kol3-94j2-u4jr-je9fjan350kf",
                "level": 2,
                "defaultRegion": false,
                "inferiors": [
                    {
                        "id": "anf8ch39-fj39-js2l-ybn3-l49xn2kr9lln",
                        "name": "г.Воронеж",
                        "headId": "jwic9v08-djw8-j301-соид-alvi48dn48fn",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": []
                    },
                    {
                        "id": "vo3nd240-vjs4-k5mi-fjn1-jc3kg49hsn6v",
                        "name": "г.п.Нижекисляйское",
                        "headId": "jwic9v08-djw8-j301-соид-alvi48dn48fn",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": [
                            {
                                "id": "cfaee4e3-ba20-4462-9def-cebde1a762b3",
                                "name": "2 г.п.Нижекисляйское",
                                "headId": "vo3nd240-vjs4-k5mi-fjn1-jc3kg49hsn6v",
                                "level": 4,
                                "defaultRegion": false,
                                "inferiors": [
                                    {
                                        "id": "fae80693-fdfa-4f4a-a633-6443fcbc7cac",
                                        "name": "3 г.п.Нижекисляйское",
                                        "headId": "cfaee4e3-ba20-4462-9def-cebde1a762b3",
                                        "level": 5,
                                        "defaultRegion": false,
                                        "inferiors": [
                                            {
                                                "id": "80539850-f7bd-4e16-a6c9-e5c813d1eeda",
                                                "name": "4 г.п.Нижекисляйское",
                                                "headId": "fae80693-fdfa-4f4a-a633-6443fcbc7cac",
                                                "level": 6,
                                                "defaultRegion": false,
                                                "inferiors": [
                                                    {
                                                        "id": "31d2d0bc-8941-4839-b677-b070cfc9128c",
                                                        "name": "",
                                                        "headId": "80539850-f7bd-4e16-a6c9-e5c813d1eeda",
                                                        "level": 7,
                                                        "defaultRegion": false,
                                                        "inferiors": [
                                                            {
                                                                "id": "d22861a2-02ed-46dc-8f4b-10c91bf526f9",
                                                                "name": "6 Нижекисляйское",
                                                                "headId": "31d2d0bc-8941-4839-b677-b070cfc9128c",
                                                                "level": 8,
                                                                "defaultRegion": false,
                                                                "inferiors": []
                                                            }
                                                        ]
                                                    }
                                                ]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]
                    }
                ]
            },
            {
                "id": "fj3j0x2k-kwu7-dj39-sh38-fjwux73h2j1k",
                "name": "г.Санкт-Петербург",
                "headId": "f84jwl59f-kol3-94j2-u4jr-je9fjan350kf",
                "level": 2,
                "defaultRegion": false,
                "inferiors": []
            },
            {
                "id": "2815c9c8-c74a-4f22-8fa1-c78925bda53a",
                "name": "Московская область",
                "headId": "f84jwl59f-kol3-94j2-u4jr-je9fjan350kf",
                "level": 2,
                "defaultRegion": false,
                "inferiors": [
                    {
                        "id": "d94b10fa-0d81-4b4c-8203-7061cd0a412d",
                        "name": "Домодедово",
                        "headId": "2815c9c8-c74a-4f22-8fa1-c78925bda53a",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": []
                    },
                    {
                        "id": "438d6919-5769-4d8d-93f3-9765508d357a",
                        "name": "Мытищи",
                        "headId": "2815c9c8-c74a-4f22-8fa1-c78925bda53a",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": []
                    },
                    {
                        "id": "fe0729b2-fa41-44cb-9634-0b156655f2ea",
                        "name": "Балашиха",
                        "headId": "2815c9c8-c74a-4f22-8fa1-c78925bda53a",
                        "level": 3,
                        "defaultRegion": true,
                        "inferiors": []
                    }
                ]
            },
            {
                "id": "03099693-03ef-4318-95ae-e694e3ab98a8",
                "name": "Саратовская область",
                "headId": "f84jwl59f-kol3-94j2-u4jr-je9fjan350kf",
                "level": 2,
                "defaultRegion": false,
                "inferiors": [
                    {
                        "id": "6c276d96-6485-4706-aa6a-661eba7f560f",
                        "name": "г. Саратов",
                        "headId": "03099693-03ef-4318-95ae-e694e3ab98a8",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": []
                    }
                ]
            }
        ]
    },
    {
        "id": "04773181-d788-4905-8d39-2881a6168446",
        "name": "Venkatanarasimharajuvaripeta",
        "level": 1,
        "defaultRegion": false,
        "inferiors": [
            {
                "id": "ef2a84ea-ba65-4a54-bc41-47c6de9eb2bb",
                "name": "2 уровень новый город",
                "headId": "04773181-d788-4905-8d39-2881a6168446",
                "level": 2,
                "defaultRegion": false,
                "inferiors": [
                    {
                        "id": "506796f6-45e1-4586-8c8d-2fcd9e0e809d",
                        "name": "3 уровень еще один город",
                        "headId": "ef2a84ea-ba65-4a54-bc41-47c6de9eb2bb",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": [
                            {
                                "id": "42fa1849-9730-4585-812d-10541498db23",
                                "name": "4 уровень город",
                                "headId": "506796f6-45e1-4586-8c8d-2fcd9e0e809d",
                                "level": 4,
                                "defaultRegion": false,
                                "inferiors": []
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "id": "275e749f-c81c-4f8f-a36c-e5e02438d8f0",
        "name": "Беларусь",
        "level": 1,
        "defaultRegion": false,
        "inferiors": [
            {
                "id": "1150bb7a-8be5-4c7e-9f0c-5ba355ffee24",
                "name": "Брестсткая область",
                "headId": "275e749f-c81c-4f8f-a36c-e5e02438d8f0",
                "level": 2,
                "defaultRegion": false,
                "inferiors": []
            },
            {
                "id": "1150bb7a-8be5-4c7e-9f0c-5ba355ffee23",
                "name": "Минская область",
                "headId": "275e749f-c81c-4f8f-a36c-e5e02438d8f0",
                "level": 2,
                "defaultRegion": false,
                "inferiors": [
                    {
                        "id": "959dc973-fa40-4e43-9854-d34ba3468ec6",
                        "name": "Молодечно",
                        "headId": "1150bb7a-8be5-4c7e-9f0c-5ba355ffee23",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": [
                            {
                                "id": "e3cb003e-376f-48b0-9b35-82f22123f9da",
                                "name": "улица Мира",
                                "headId": "959dc973-fa40-4e43-9854-d34ba3468ec6",
                                "level": 4,
                                "defaultRegion": false,
                                "inferiors": []
                            }
                        ]
                    }
                ]
            }
        ]
    },
    {
        "id": "f0d33b0c-f190-4fc6-a0a0-e2f3d47e0be5",
        "name": "Регион 1 уровня",
        "level": 1,
        "defaultRegion": false,
        "inferiors": [
            {
                "id": "c8459666-d9a5-4bc8-b577-525ca84c3777",
                "name": "Регион 2 уровня измененный",
                "headId": "f0d33b0c-f190-4fc6-a0a0-e2f3d47e0be5",
                "level": 2,
                "defaultRegion": false,
                "inferiors": [
                    {
                        "id": "u590bjdm-b450-e3k4-df9а-fj588dh3ncj3",
                        "name": "Регион 3 уровня",
                        "headId": "c8459666-d9a5-4bc8-b577-525ca84c3777",
                        "level": 3,
                        "defaultRegion": false,
                        "inferiors": []
                    }
                ]
            }
        ]
    },
    {
        "id": "fjtndk54-fk33-f89s-lkfn49vl3jvk",
        "name": "5 Кисляйское",
        "level": 1,
        "defaultRegion": false,
        "inferiors": []
    }
]

Copy-icon
Response codes

200 - операция выполнена успешно, получены данные о иерархии регионов

  • Получение списка регионов для быстрого выбора - GET запрос, /v1/regions/fast-select
Request parameters

Отсутствуют.

Response sample

[
    {
        "id": "fe0729b2-fa41-44cb-9634-0b156655f2ea",
        "name": "Балашиха",
        "headId": "2815c9c8-c74a-4f22-8fa1-c78925bda53a",
        "level": 3,
        "defaultRegion": true,
        "inferiors": []
    },
    {
        "id": "6c276d96-6485-4706-aa6a-661eba7f560f",
        "name": "г. Саратов",
        "headId": "03099693-03ef-4318-95ae-e694e3ab98a8",
        "level": 3,
        "defaultRegion": false,
        "inferiors": []
    },
    {
        "id": "959dc973-fa40-4e43-9854-d34ba3468ec6",
        "name": "Молодечно",
        "headId": "1150bb7a-8be5-4c7e-9f0c-5ba355ffee23",
        "level": 3,
        "defaultRegion": false,
        "inferiors": []
    },
    {
        "id": "506796f6-45e1-4586-8c8d-2fcd9e0e809d",
        "name": "3 уровень еще один город",
        "headId": "ef2a84ea-ba65-4a54-bc41-47c6de9eb2bb",
        "level": 3,
        "defaultRegion": false,
        "inferiors": []
    },
    {
        "id": "438d6919-5769-4d8d-93f3-9765508d357a",
        "name": "Мытищи",
        "headId": "2815c9c8-c74a-4f22-8fa1-c78925bda53a",
        "level": 3,
        "defaultRegion": false,
        "inferiors": []
    },
    {
        "id": "d94b10fa-0d81-4b4c-8203-7061cd0a412d",
        "name": "Домодедово",
        "headId": "2815c9c8-c74a-4f22-8fa1-c78925bda53a",
        "level": 3,
        "defaultRegion": false,
        "inferiors": []
    },
    {
        "id": "58sk20ck-kpme-59vj-fjx8-fk38xjvluu4n",
        "name": "за МКАД",
        "headId": "ound48f3-dubh-84j3-kd93-lemvu80a3j32",
        "level": 3,
        "defaultRegion": false,
        "inferiors": []
    }
]

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

  • Создание региона - POST запрос, /v1/regions
Request parameters

Отсутствуют.

Request body sample

{
  "name": "Smolensk2",
  "headId": "5f8a299b-7551-4ded-998d-6639758f6887",
  "defaultRegion": true
}

Copy-icon
Response sample

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

Response codes
  • 201 - операция выполнена успешно, новый регион создан
  • 400 - ошибка, не удалось создать регион, невалидные данные
  • Изменение региона - PATCH запрос, /v1/regions/{Id}
Request parameters

id - query-параметр: идентификационный номер региона

Copy-icon
Request body sample

{
  "name": "Smolensk3",
  "defaultRegion": false
}

Copy-icon
Response sample

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

Response codes
  • 204 - операция выполнена успешно, данные региона изменены
  • 400 - ошибка, не удалось обновить информацию о регионе, невалидные данные