Как сделать сервисную оркестровку через шлюз?

API
Как сделать сервисную оркестровку через шлюз?

Что такое оркестровка сервисов/объединение данных?

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

Например, услуга «запросить гостиницу, забронированную пользователем», внешнему интерфейсу нужно передать только идентификатор заказа, а серверная часть вернет информацию обо всем заказе, включая информацию о пользователе, информацию об отеле и номере. Информация.

Эта услуга может соответствовать следующим операциям:

  • Запросите детали заказа и верните идентификатор пользователя, идентификатор отеля и идентификатор комнаты, соответствующие заказу;
  • Запросить соответствующую информацию по различным идентификаторам;
  • Данные фильтруются, перемещаются и т. д. и, наконец, интегрируются;
  • Верните интегрированные данные во внешний интерфейс;

Следующая диаграмма поможет вам лучше понять:

在这里插入图片描述

Преимущества оркестровки

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

  • Функция развязки, услуги можно использовать повторно;
  • Дружественный внешний интерфейс, нет необходимости в нескольких запросах;
  • Скорость ответа бизнеса высока, и услуга может быть быстро создана;
  • Если возвращаемые данные изменены, интерфейс запроса не действует;
  • В случае изменений в старой системе нет необходимости менять внешний интерфейс, и данные могут быть совместимы через шлюз.

Используйте инструмент оркестровки: Goku API Gateway

Позвольте мне кратко представить, что Goku API Gateway (китайское название: Goku API Gateway) — это шлюз микросервисов, разработанный на основе Golang, который может обеспечить высокопроизводительную пересылку HTTP API, оркестровку служб, многопользовательское управление, контроль доступа к API и другие цели. Пользовательская система подключаемых модулей может быть расширена сама по себе и предоставляет удобный графический интерфейс конфигурации, который может быстро помочь предприятиям управлять службами API и повысить стабильность и безопасность служб API.

Goku API Gateway поддерживает один API-интерфейс оркестрации, соответствующий нескольким серверным службам.Параметры запроса каждой серверной службы могут использовать параметры, переданные из внешнего интерфейса, или могут быть настроены в оркестровке (запись статических параметров или получение их из возвращаемых данных). . Возвращаемые данные каждой серверной службы поддерживают такие операции, как фильтрация, удаление, перемещение, переименование, распаковка и инкапсуляция; API-интерфейс оркестровки может установить возврат исключения в случае сбоя оркестровки.

Community Edition (CE) Goku API Gateway имеет как полное руководство по использованию, так и дополнительное руководство по разработке, а встроенная система подключаемых модулей также позволяет предприятиям настраивать разработку для своего бизнеса.

адрес проекта:GitHub.com/голодный компоновщик/go…

Адрес официального сайта:www.eolinker.com

Как сделать сервисную оркестровку на Goku?

Мы возлагаем всю работу по оркестровке на шлюз, а шлюз обрабатывает и преобразовывает данные, поэтому нет необходимости вносить изменения в серверные службы. Когда запрос поступает на шлюз, шлюз вызывает несколько серверных служб и обрабатывает данные, возвращаемые каждой службой на шлюзе (операции включают фильтрацию, перемещение, переименование, упаковку и распаковку, и каждая операция будет объяснена в подробности позже), наконец, шлюз интегрирует данные и возвращает их во внешний интерфейс.

在这里插入图片描述

Шаги

1. На шлюзе выберите сервисную оркестровку для типа вновь созданного API:

在这里插入图片描述

2. КонфигурацияПроверить и забронировать отельИнформация о запросе API:

在这里插入图片描述
3. Добавьте и настройте Шаг:

Шлюз организует процесс дляПроцесс переадресации API(пересылка -> получение данных -> обработка данных) называетсяStep.

Добавьте службу пересылки, которая представляет собой API для запроса сведений о заказе, настройте соответствующий адрес пересылки, входящие параметры и то, что делать с возвращаемыми данными.

在这里插入图片描述
Из-за недостатка места последующие шаги (запрос сведений о пользователе, запрос сведений об отеле, запрос сведений о номере) не будут отображаться один за другим.

Способ организации передачи параметров и обработки данных

(1) Два способа передачи параметров для аранжировки

Шлюз организует процесс дляПроцесс переадресации API(пересылка -> получение данных -> обработка данных) называетсяStep.

Мы обработаем API сведений о заказе, который называетсяStep1, возвращаемые данные шага 1: идентификатор пользователя, идентификатор отеля, идентификатор комнаты. Точно так же шаг запроса информации о пользователе называетсяStep2, будет запрашивать информацию об отеле какStep3, будет запрашивать информацию о комнате какStep4.

Проходящие параметры:

  • Используя параметры, переданные из внешнего интерфейса, можно записать как:имя параметра body.parameter,заголовок. Имя параметра
  • Использование возвращенных данных на шаге 1 в качестве параметра можно записать так:body1.имя параметра,заголовок 1. имя параметра
  • и так далее

1. Передайте параметры в пути пересылки

Ниже приведен метод передачи параметров пути пересылки:

  • Например, Step1 должен получить параметр orderID, переданный внешним интерфейсом, а также параметр Authorization. Путь пересылки шага 1 можно записать так: /getOrderInfo/{{body.orderID}}/{{header.Authorization}}
  • Например, шаг 2 получает возвращенный параметр идентификатора пользователя (userID) на шаге 1, а также получает параметр авторизации, переданный внешним интерфейсом. Путь пересылки шага 2 можно записать так: /getUserInfo/{{body1.userID}}/{{header.Authorization}}

2. Настройте параметры запроса на шаге

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

Конфигурация параметров запроса на шаге 2 в шлюзе выглядит следующим образом: если имеется несколько параметров запроса, они представлены новой строкой:

在这里插入图片描述

(2) Обработка возвратных данных

1. API для запроса сведений о заказе, возвращаемые данные называютсяjson1, содержание следующее:

{
"status":"000000",
"data":{
"id":"201910180009x"
        ,"user_account":"zzz@163.com"
        ,"hotal":"0001"
        ,"room":"biger1"
        ,"time_start":"20191019"
        ,"time_end":"20191020"
  }
}

2. API для запроса сведений о пользователе, возвращаемые данные называютсяjson2, содержание следующее:

{
"status":"000000",
"data":{
"account":"goku@eolinker.com",
"full_name":"",
"phone":""
  }
}

3. Запросить возвращаемые данные об отеле, называемыеjson3, содержание следующее:

{
"status":"000000",
"data":{
"id":"001",
        "type":"星级酒店",
        "name":"",
        "address":"",
        "location":{},
  }
}

4. Запросите возвращаемые данные сведений о комнате, называемыеjson4, содержание следующее:

{
"status":"000000",
"data":{
"name":"豪华大床房"
        ,"window":1
        ,"floor":"10-12"
        ,"nosmoke":1
  }
}

5. Возвращенный Json может быть обработан на каждом шаге, шлюз окончательно интегрирует обработанные данные и вернется во внешний интерфейс, например, это возвращается через шлюзокончательные данные:

{
    "id":"201910180009x"
    ,"userInfo":{
    "account":"goku@eolinker.com",
    "full_name":"",
    "phone":""
    }
    ,"hotelinfo":{
    "type":"星级酒店",
    "name":"",
    "address":"",
    "location":{},
    }
    , "roominfo":{
        "name":"豪华大床房"
       ,"window":1
       ,"floor":"10-12"
       ,"nosmoke":1
    }
}

В качестве примера возьмем возвращаемые данные json3 API запроса сведений об отеле, чтобы объяснить, как шлюз обрабатывает возвращенные данные в процессе оркестровки.

Необработанные данные, возвращаемые API для запроса сведений об отеле, выглядят следующим образом:

{
"status":"000000",
"data":{
        "id":"001",
        "type":"星级酒店",
        "name":"",
        "address":"",
        "location":{},
  }
}

Данные, которые перехватывают информацию об отеле из данных, возвращаемых шлюзом во внешний интерфейс, выглядят следующим образом:

"hotelinfo":{
"type":"星级酒店",
"name":"",
"address":"",
"location":{},
}

Затем от исходных данных к обработанным данным требуются следующие операции:

1. Черный список полей

Функция черного списка полей заключается в исключении определенных полей и поддержке формы массива.

Конфигурация на шаге 3 шлюза выглядит следующим образом:

在这里插入图片描述

После обработки шлюзом фактически возвращенные данные выглядят следующим образом. Вы можете видеть, что поле id в объекте данных было отфильтровано:

{
"status":"000000",
"data":{
        "type":"星级酒店",
        "name":"",
        "address":"",
        "location":{},
  }
}

2. Полевая распаковка

Распаковка относится к извлечению содержимого указанного объекта в качестве возвращаемого результата шага. Соответствующая цель может быть только объектом. Если соответствующая цель пуста, результатом будет {}, который можно использовать для очистки данных.

Конфигурация на Шаге шлюза следующая:

在这里插入图片描述

После обработки шлюзом фактически возвращенные данные выглядят следующим образом, вы можете видеть, что объект данных дизассемблирован, а окончательные данные сохраняют только поля в объекте данных:

{
        "type":"星级酒店",
        "name":"",
        "address":"",
        "location":{},
}

3. Пакет

Поле package будет упаковывать текущие данные целиком в объект в окончательных возвращаемых данных.* не поддерживается, и массивы не поддерживаются.

Конфигурация на Шаге шлюза следующая:

在这里插入图片描述

После обработки шлюзом фактически возвращаемые данные выглядят следующим образом, и данные упакованы как объект hotelinfo в целом:

{
"hotelinfo":{
        "type":"星级酒店",
        "name":"",
        "address":"",
        "location":{},
  }
}

После трех шагов необработанные данные можно превратить в окончательные данные.

В этой статье перечислены только некоторые операции обработки данных в процессе оркестровки.Для получения более подробной информации об оркестровке вы можете обратиться к ссылке на учебник, приведенной в конце статьи.

Ссылки по теме

адрес проекта:GitHub.com/голодный компоновщик/go…

Адрес официального сайта:www.eolinker.com

Связанные учебники:Сервисная оркестровка