GraphQL Java客户端的建议



我是GraphQL的新手,从过去几周开始就在探索它。我正在为Java中的GraphQL客户端寻找建议。

在我们开发基于Java的应用程序时,如果有人能向我介绍不同的GraphQL Java客户端,我们将不胜感激,它们具有查询/变异/订阅等基本功能

我探索了其中的一些,比如Netflix的DGS框架,它与Spring Boot集成,并支持注释。然而,在得出结论之前,如果我能在以下方面对不同的Java客户端进行比较,我将不胜感激:

  1. 一组功能,如支持扩展的java标量类型等
  2. 既有正在积极发展的,也有广泛使用的
  3. 限制(如有)
  4. 简单易用
  5. 开放源码

如果可能的话,请分享流行客户端的相应链接。

感谢您的帮助!!提前感谢。

EDIT:正如您提到的spring-boot一样,这个答案主要关注graphql-java服务器。如果你想要graphqljava客户端,我推荐Apollo客户端,它很容易使用,可以满足你的所有需求

免责声明:我从未使用过DGS,去年我也没有积极使用graphql-java,情况可能已经改变了。我尝试过graphqljava工具和spqr。这个答案是固执己见的

graphql实现graphql-java出现在DGS之前。它是开源的,你会发现许多项目都是在它的基础上构建的。为graphqljava本身添加功能的项目可以在graphljava存储库中找到,这使得graphqljava非常模块化,可以适应你的需求。

例如:

  • https://github.com/graphql-java/graphql-java-extended-scalars为graphql-java添加扩展标量支持
  • https://github.com/graphql-java/graphql-java-extended-validation提供字段验证

Graphql-java非常冗长,我不建议按原样使用它。相反,我建议使用以下项目之一。

https://github.com/kobylynskyi/graphql-java-codegen根据模式生成graphql服务器/客户端,遵循模式优先的方法

https://github.com/leangen/graphql-spqr或https://github.com/Enigmatis/graphql-java-annotations遵循代码优先的方法,并非常有效地使用注释从代码中生成模式(spqr还提供了一个spring-boot-starter)

https://github.com/graphql-java-kickstart/graphql-java-tools使用模式优先的方法,让您创建自己的DTO。它处理了大部分锅炉铭牌代码。它对Spring是友好的(如果用于Spring框架,graphqljava工具解析器将非常直观),并且有一个Spring启动。模式解析器和类发现功能强大,但却是模块化的。

功能

在特性方面,所有这些项目都利用了graphql-java的特性,它们将非常相似。

积极开发和社区采用

graphqljava工具昨天更新,spqr和graphqljava注释去年更新,graphqljava代码生成1月份更新。从阅读stackoverflow问题来看,graphql-java工具和spqr似乎是最受欢迎的,但我可能错了。

限制

没有我能想到的。

易用性

SPQR对我来说赢得了这场比赛,注释非常直观,会让你快速上手。还有一个springboot启动程序和一些示例项目。graphqljava工具有点复杂,但它们有很好的文档和示例项目。我建议较小/新项目使用SPQR,较大项目或需要在现有代码库上构建graphqlapi的现有项目使用graphqljava工具。对于我的个人项目,我搬到了SPQR,从未后悔过。

开源

这个答案中引用的所有项目都是开源的。

最后一句话:

我认为代码优先的方法(用java定义你的api,让库生成你的模式)或模式优先的方法,(在模式文件中定义你的api,让库产生你的代码)可能是决定选择哪个库的最重要因素。你可以阅读我的答案和Kaqqao(SPQR作者)的优秀答案来了解更多。

如果您采用模式优先的方法并希望生成客户端类,我建议使用https://github.com/kobylynskyi/graphql-java-codegen.

以下是一些示例,说明如何使用生成的类来构建请求并从Java:调用GraphQL API

  • Gradle示例客户端
  • Maven示例客户端

最新更新