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 / tpdocProvider,分别对应常用的固定少变的基础领域服务、复杂多变的业务领域服务和旧的RESTful领域服务接入。 -
做了大量性能优化,任务编排,请求合并等工作,最大限度的提高性能。
-
自定义指令支持,只需要实现接口
com.fangdd.graphql.directive.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
- Duo-GraphQL是如何工作的?
- 请求头透传
- 添加监控
- 自定义请求上下文
- 自定义指令: Directive
- 订阅: Subscription
- ScalarJson
- 分布式部署
- Schema构建
- 异常处理
- GraphLQ Provider
- 远端数据供应端: RemoteProvider
- 内部数据供应端: InnerProvider
- 旧RESTful接口接入
- 合并请求
- 多GraphQL Schema实现
- GraphQL Engine调试
- 注册中心
- 使用Zookeeper注册中心
- 使用Redis注册中心
- 依赖Duo-Doc服务
- 权限控制
- gql查询缓存
- 开发期间设置GraphQL Provider请求地址
- Redis配置
- Mock & GraphiQL
- Mesh Service支持
- SkyWalking探针
- 视图
- 基础视图
- 非基础视图
- 选择字段: Selection
- GraphQL操作实现
- 实现Query
- 实现Mutation
- 实现Subscription
- 批量接口
- 一个GraphQL Provider提供多个领域服务
- 向其它领域图(Type)注入字段
- 字段映射
- 生成api.json
- GraphQL Provider服务调试