Duo-GraphQL基于graphql-java引擎实现,对Schema构建、DataFetch绑定、任务编排优化做了自动化实现,让开发者专注于领域功能开发,与当前主流的多团队的微服务敏捷开发模式无缝契合。
GraphQL是BFF的技术实现之一,BFF层相当大一部分风险和技术负担是:底层领域服务会在这里交汇。对于新人来说,要理解这么多领域、各领域的关系,是个不小的门槛(特别是对领域还划分还不太清晰的情况)。基于GraphQL的BFF实现,可以解耦这一错综复杂的关系网。使用GraphQL技术,各领域服务还可以专注在自己的领域数据内,而不需要太过关注其它领域的数据整合。
Duo-GraphQL实现了以下功能:
Schema、Resolver(DataFetcher
)自动生成和绑定,不依靠人工。
支持领域。各领域微服务(GraphQL Provider)以传统RESTful API
项目的方式独立开发、维护、部署,多个领域服务共同组建一张大图,最大程度上保留传统微服务组织架构与开发模式。
一个引擎支持多Schema。默认会有两个:业务Schema、当前GraphQL状态Schema。
实现三大类DataProvider:innerProvider
/ remoteProvider
/ duoDocProvider
,分别对应常用的固定少变的基础领域服务、复杂多变的业务领域服务和旧的RESTful
领域服务接入。
做了大量性能优化,任务编排,请求合并等工作,最大限度的提高性能。
自定义指令支持,只需要实现接口BaseGraphqlDirectiveFactory
,不需要直接面对GraphQL
规则。
一个GraphQL Provider
工程支持多个领域。本功能用于领域过小,还不需要单独一个项目时使用。另外支持向其它领域服务注入字段。比如在文章领域向用户领域注入userArticles
字段等。
本项目是在
spring boot
上开发的,引擎和Provider
都建议使用spring boot 2.x
版本
至少需要两部分服务:GraphQL Engine和GraphQL Provider。搭建文档详见下面两个链接:
GraphQL Engine:《GraphQL-Engine-Getting-Start》
GraphQL Provider:《GraphQL-Provider-Getting-Start》
以上getting start里的代码,请查看当前项目的目录 /demo
你也可以直接使用GraphQL客户端请求:http://demo.duoec.com/graphql
curl 'http://demo.duoec.com/graphql' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H 'Connection: keep-alive' \
-H 'client: M' \
--data-binary '{"query":"{\n article {\n articleSearch(query: { keyword: \"1\", pageNo: 1, pageSize: 10 }) {\n list {\n id\n title\n content\n }\n total\n }\n }\n}\n","variables":{}}' \
--compressed
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。