Класс модели ответа микросервисов - PullRequest
0 голосов
/ 20 января 2020

Я занимаюсь разработкой микросервисного приложения и застрял на дублированных моделях. У меня, скажем, 4 службы AB C D. У каждой службы есть своя собственная база данных, и мне нужно вызвать службу D из других служб (AB C). Это означает, что мне нужно создать дублированный класс Response в каждом сервисе.

Допустим, у меня будет 100 сервисов, и сервис D изменит модель, это будет плохо для изменений. Я нашел еще один вариант создания библиотеки и зависимости. Я работаю в Java, но создание библиотеки .jar как зависимости не позволило бы мне реализовать другие сервисы на другом языке, поэтому я также считаю это плохим подходом.

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

Мой вопрос заключается в том, существует ли какой-либо другой лучший способ предоставления модели ответа другим службам? Если возможно, каким-то образом сгенерированный из json или просто из одного места, откуда он будет встроен в другие микросервисы? Спасибо за ответы

1 Ответ

0 голосов
/ 20 января 2020

Я бы предложил, чтобы вы стандартизировали свой ответ, внедрив стандартный ответ API. Например, каждый ответ должен иметь стандартный идентификатор транзакции. В идеале этот базовый ответ можно использовать в общей или общей библиотеке, используемой всеми микросервисами.

public class ApiResponse
{
    @JsonProperty
    private String transactionId;

    ...
}

Каждый microservice ответ API будет расширять базовый ответ (т.е. ApiResponse) ответа

public class MyServiceApiResponse extends ApiResponse
{
    @JsonProperty
    public String country;

    @JsonProperty
    public List<City> cities;

    public MyServiceApiResponse(String transactionId, String country, List<City> cities)
    {
        super(transactionId);
        this.country = country;
        this.cities = cities;
    }

    ....
}

Контроллер API возвращает ответ, подобный этому. Например:

@GetMapping(path = PATH)
@ResponseStatus(HttpStatus.ACCEPTED)
public MyServiceApiResponse getCountry(String transactionId, String country)
{
    ...

   List<City> cities = getCities(country);
   ....

   return new MyServiceApiResponse(transactionId, country, cities);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...