【问题标题】:Microservices response model class微服务响应模型类
【发布时间】:2020-05-05 23:36:45
【问题描述】:

我正在开发微服务应用程序,但遇到了重复的模型。 我可以说 4 个服务 A B C D。每个服务都有自己的数据库,我需要从其他服务( A B C )调用服务 D。这意味着我必须在每个服务中创建重复的响应类。

假设我将拥有 100 个服务,而服务 D 将改变模型,这对改变不利。我发现作为创建库和依赖项的另一种选择。我在 Java 中工作,但创建 .jar 库作为依赖项不允许我用其他语言实现其他服务,所以我认为这也是不好的方法。

我当然是尽量避免耦合服务,所以不能对所有服务添加依赖。

我的问题是,还有其他更好的方法可以为其他服务提供响应模型吗?如果可能以某种方式从 json 生成,或者只是简单的 1 个从哪里构建到其他微服务的地方? 感谢您的回复

【问题讨论】:

  • 是的。自动生成响应模型。这就是 swagger 和 OpenAPI 以及相应的代码生成器的用途。

标签: java architecture microservices


【解决方案1】:

我建议您通过实现标准 API 响应来标准化您的响应。例如,每个响应都应该有一个标准的事务 ID。理想情况下,您可以在所有微服务使用的公共或共享库中拥有此基本响应。

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);
}

【讨论】:

    猜你喜欢
    • 2020-02-06
    • 1970-01-01
    • 2019-11-23
    • 2016-03-27
    • 2017-03-31
    • 2011-04-29
    • 2020-08-06
    • 2017-10-10
    • 1970-01-01
    相关资源
    最近更新 更多