如何使用Spring Boot,Neo4j和Kong构建Graphql API [第1部分]

介绍

本文将对GraphQL服务器有很好的了解,并使用Spring Boot对其进行设置。 GraphQL允许客户端确切指定所需的数据,包括单个请求中的多个查询。 GraphQL支持在单个请求中从嵌套数据集中获取数据。 与REST(每个资源都有一个终结点)不同,使用GraphQL的应用程序为所有资源公开一个终结点。

由于GraphQL API是根据类型和字段而不是端点进行组织的,因此它比传统的REST API提供了更大的灵活性。

GraphQL Spring Boot启动器

Spring Boot GraphQL StarterGraphQL Java Tools库相结合,使在很短的时间内运行GraphQL服务器变得非常容易。 将这几个依赖项添加到pom.xml文件中足以启动GraphQL服务器。

GraphQL Java工具库解析给定的GraphQL模式,并允许您BYOO(带上自己的对象)来填充实现。 如果您已经具有域POJO(普通的Java对象)来保存数据,则可以通过将它们神奇地映射到GraphQL对象的方式来很好地工作。

现在,我们已经添加了入门包,我们可以设置查询/突变解析器了。 就像REST API一样,查询/突变是应用程序的入口点,就像控制器一样。 该bean需要在标记接口GraphQLQueryResolver或GraphQLMutationResolver中实现,并且包含在模式中定义的公共方法,如下所示:

@Component
 public class MemberQuery implements GraphQLQueryResolver {
 
 @Autowired
 public MemberService memberService;
 
 private static final Logger logger = LogManager.getLogger(MemberQuery.class);
 
 public List<Member> getMemberByName ( String name)  {
 
 if ( this .memberService.getMemberByName(name).size() == 0 ){
  throw new MemberException( "no member data" );
 } else {
  return this .memberService.getMemberByName(name);
 }
 }
 
}

方法的名称应等于模式中“查询”类型的方法。 它可以返回简单类型,该类型将自动映射到架构中的标量值,也可以返回更复杂的类型。 为了了解方法名称及其映射,我们需要了解下一个主题是在GraphQL中编写模式。

GraphQL模式

GraphQL带有自己的语言来编写称为模式定义语言(SDL)的GraphQL模式。 GraphQL采用合同优先设计方法,并且在此定义了API支持的所有操作。 这些文件以扩展名“ .graphqls”命名,并且必须位于资源文件夹中才能位于类路径中。

请参阅下面的示例文件。

在以上架构中,“成员对象”是按类型定义的。 GraphQL中的类型系统是最基本的组件,它表示可以从服务获取的对象类型以及该对象中可用的字段。 让我们浏览一下Member对象:

  • 它有20个字段,包括标量字段和复数字段。
  • 'String'和'Long'是GraphQL成员对象中的标量类型。 SDL支持的其他标量类型是Int,Float和Boolean和ID。
  • ID标量类型表示唯一标识符,通常用于重新获取对象或用作缓存的键。
  • 它包含与成员类型定义方式相同的复杂类型,它们是资产,技能,贡献,MemberProjectRelation和MemberCertificationRelation。 它也具有自我加入的自我,被称为“成员:成员”。 这是因为该成员正在向作为该成员一部分的经理报告。
  • ! 用于不能为空的字段。

查询和变异类型

对于模式中的数据获取和操作而言,有两种重要的类型,即查询和突变类型。 Mutation类型表示用于对数据执行写操作的查询。 每个GraphQL服务都具有查询类型,并且可能具有或不具有突变类型。 当查询字段并行执行时,变异字段依次运行,一个接一个。

因此,为了避免竞争条件,总是首选使用变异来操纵数据。 以下是这两个示例:

查询和变异都在其定义中包含入口点,请求参数和返回类型。 参数后跟“!” 不能为null,并且放在方括号“ []”中的对象类型是列表的类型。

未完待续....

在本文中,我们学习了什么是GraphQL,如何使用springboot,模式定义语言(Schema Definition Language,SDL)及其类型开始构建它。 在下一篇文章中,我们将更多地了解类型对象(例如成员,技能,资产等)之间的关系。GraphiQL用于查询graphql API和使用GraphQLErrorHandler进行异常处理。

参考资料

翻译自: https://hackernoon.com/how-to-build-graphql-api-with-spring-boot-neo4j-and-kong-part-1-1j523w3s

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值