一个微服务是否应该同时是 public 和内部的

Should a single microservice be both public and internal simultaneously

存在三个微服务:

作者
它有能力 SELECT 和 CRUD 实体 "author"

图书
它有能力 SELECT 和 CRUD 实体 "book"

移动应用主机
专为移动客户端构建,以响应请求的完整数据模型,以便移动应用程序不会 'enrich' 数据在其端。

示例:API 'MobileHost.getAllBooksOfGivenAuthor' 将通过调用 'Authors.getAuthorData(authorId)' 并将其数据与 'Books.getBooksByAuthorIds(authorId)' 合并,从而生成如下结构,同时返回作者姓名和书名:

{ 
  "author" : {
    "name" : "Winner",
    "id" : 1
  },
  "books" : [
     {
       "name" : "Book A",
       "id" : "13231231"
     }
   ]
}

我的问题是:
如果手机客户端通过"Mobile app host"读取数据,是不是也应该通过"Mobile app host"读取数据"add author",还是直接联系"Authors"服务就可以了?在这种情况下是否应该代理 CRUD?

这取决于你的目标。

根据我的经验,此类“托管”或“代理”服务往往会变得越来越大,但没有任何真正的责任。将许多 类、功能和职责耦合到一个地方绝对不是一个好主意——随着时间的推移,维护这样的服务会很困难。

此外,如果例如只需要扩展作者服务,则扩展此类服务的实例可能非常困难且资源效率低下。因此,如果您打算分别横向扩展不同的服务和活动,那么,当然,您不需要仅使用一项服务来代理请求。您可以有多个代理服务,例如,单独扩展它们或直接调用 Authors 服务并扩展它们而不是代理。

但是,如果您没有看到提到的机会,那么请尽可能保持简单——您始终可以在需要时将服务及其代理分开,只需将所有内容分开即可。