Краткий ответ: 4 - Как-то иначе.
Проблема, с которой вы столкнулись, является прямым следствием того, как вы разработали свои микросервисы. Обычно (это, конечно, зависит от варианта использования), это плохая идея , чтобы сервисы были сервисами "CRUD" для разных объектов без какой-либо бизнес-логики.
Почему это плохая идея? По тем же причинам плохая идея делать то же самое в монолите. Он создает зависимости, заставляет микросервисы зависеть друг от друга, что в конечном итоге приводит к решению, которое имеет худший из обоих миров (микросервисы и монолиты).
Это подкрепляется вашими требованиями, чтобы получить всех клиентов со всеми категориями. Если вы правильно спроектируете свои услуги, вам не нужно будет извлекать из них полный набор данных.
Правильный способ сделать это : Создавайте свои услуги на основе бизнес-функций, а не данных. Если для функции требуются и клиент, и категория, то они должны быть фактически вместе и образовывать «микросервис» с соответствующей функцией (на самом деле вы ее не упоминали).
Попробуйте разделить разные аспекты данных для формирования разных функций, даже если это означает, что некоторые данные могут быть избыточными.