Как спроектировать клиент шлюза для отправки информации из одного сервиса в другой? - PullRequest
0 голосов
/ 24 апреля 2020

Я новичок в проектировании, и мне хотелось бы кое-что узнать о том, как мне следует подходить к проектированию шлюзового клиента.

Сценарий состоит в том, что в службе A есть много модулей, которым необходимо обратиться к службе B. Каждый модуль в сервисе А есть собственный запрос полезной нагрузки. Мне было предложено, чтобы клиент шлюза принял тип полезной нагрузки запроса базового класса (на который будет расширяться каждый модуль), который будет сериализован для сопоставления полей в службе B, а затем отправит HTTP-запрос для обращения к службе B.

Как будет сериализован тип полезной нагрузки запроса? Если у меня есть класс сериализатора, то он должен хранить все возможные поля, которые есть у каждого типа полезной нагрузки запроса, и затем иметь возможность читать из полезной нагрузки для его форматирования.

Ex psuedo/code:

class gatewayClient {
  Request_Serializer $serializer;

  public function send_request(string $url, Request_Payload $request)
 {
    // Change the request_payload into the needed format for service B
    $params = $serializer->serialize($request);
    // send HTTP request 
    $this->POST($url, $params);
 }
}

class Request_Serializer {
   public function serializer(Request_Payload $request) {
      //Depending on the possible different payloads for example a Change_User_Payload class that extends from Request_Payload, there would be different fields

      //How to do this part and accommodate the different request payload classes?
      $params = [
         'userId' => $request['user_id']
      ];
      return $params;
  }
}
...