我们看到越来越多的工具(例如阿波罗联盟)支持将多个GraphQL端点聚合到一个图中。但必须提醒的是,不要滥用GraphQL,尤其是作为服务间的协议时。我们的实践是仅将GraphQL用于服务端资源聚合。使用这种模式时,微服务会持续发布明确定义的RESTful API,而聚合服务或BFF(前端后端)模式则使用GraphQL解析器集成其他服务资源。图的形状需由领域建模实践驱动,以确保在必要时(在每个限界上下文都是一个微服务的情况下)将统一语言局限在子图内。该技术简化了聚合服务或BFF的内部实现,同时鼓励对服务进行良好的建模以避免贫血休息。
在构建微服务风格的体系结构时,一个反复出现的模式是如何在服务器端处理许多资源的聚合。近年来,我们看到了一些模式的出现,比如后端为前端(BFF)以及诸如Falcor为了解决这个问题。我们的团队已经开始使用用于服务器端资源聚合的GraphQL代替。这与通常的使用方式不同GraphQL其中客户端直接查询GraphQL服务器。当使用这种技术时,服务继续公开RESTful api,但底层聚合服务使用GraphQL解析器作为从其他服务拼接资源的实现。这种技术通过使用GraphQL简化了聚合服务或bff的内部实现。