是否使用基于注释的Spring Boot graphql服务器的指南

时间:2019-12-08 21:02:41

标签: annotations graphql graphql-java graphql-spqr

我正在用spring boot和graphql开发一个新项目。我对如何进行处理感到困惑,因为有两种开发方法,一种是通过graphqls文件和基于注释的方法。我更喜欢基于注释的方法,但它们是否稳定。范例:https://github.com/leangen/graphql-spqr

2 个答案:

答案 0 :(得分:2)

我不认为“如何进行”这个问题有好有坏。 有两种不同的方法来构建您的graphql服务器(使用graphl-java,graphql-java-tools,graphql-spqr),每种方法都有其优点和不便之处。所有这些库都建议使用springboot启动器。请注意,我从未使用过graphql-spqr。

首先使用架构(使用graphql-java或graphql-java-tools)

使用这种方法,您首先创建一个SDL文件。 graphql库将对其进行解析,您要做的“所有”工作就是将每个graphql类型连接到其数据提取器。 graphql-java-tools甚至可以为您完成接线。

优势

  • 无需详细介绍如何在服务器端构建Graphql模式
  • 您有一个不错的graphqls模式文件,可以由客户端读取和使用,从而简化了构建graphql客户端的工作
  • 您实际上首先定义了api(SDL模式):更改api的实现不需要客户端进行任何更改

不便

  • 不进行编译时检查。如果接线不正确,则会在运行时引发异常。可以通过使用graphql-java-codegen来否定这一点,它将为您生成用于graphql类型,联合,查询或枚举的java类和接口。
  • 如果使用graphql-java(无自动接线),我感到我不得不编写冗长乏味的数据提取程序。所以我切换到graphql-java-tools。

代码优先(使用graphql-java或grapqhl-java-tools或graphql-spqr)

以编程方式构建graphql模式(通过使用graphql-spqr进行注释或通过在graphql-java中构建GraphQLSchema对象)

优势

  • 编译时检查
  • 无需同时维护SDL和Domain类

不便

  • 由于您的架构是从代码库生成的,因此更改代码库将更改api,对于它而言,这可能不适合客户端。

这是我对那些不同框架的看法,很高兴能证明我错了。最终决定取决于您的项目:大小,是否存在现有代码库等。

答案 1 :(得分:2)

我第二次AllirionX's answer,只是想添加一些细节。

首先,要回答您的问题:是的,SPQR已经相当稳定了一段时间。许多团队已在生产中成功使用它。仍然是0.X版本的唯一原因是缺少文档,但是API偶尔会发生一些小的突破性变化。

其次,我还想补充一点,代码先行并不意味着您也不能合同先行。实际上,我认为您仍然应该以这种风格发展。唯一的区别是您可以将合同编写为Java接口,而不是使用新的语言。因此,API是否随代码更改而更改完全取决于您。而且,如果出于任何原因需要SDL,则始终可以从可执行模式或自省结果生成SDL。