Я новичок в проектировании, и мне хотелось бы кое-что узнать о том, как мне следует подходить к проектированию шлюзового клиента.
Сценарий состоит в том, что в службе 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;
}
}