尝试使用grahpql-java-tools(kotlin)实现GraphQL服务器


这篇文章是什么?

使用Kotlin graphql-java-tools,我们将总结从实现GraphQL服务器到返回响应的过程。

本文中包含的
-构建一个简单的GraphQL服务器

不包括在本文中
--N 1问题对策
-分页实现

关于graphql-java-tools

它提供了作为GraphQL服务器的功能。
称为graphql-spring-boot的工具在内部也使用graphql-java-tools。
GraphQL服务器本身不充当Web应用程序服务器。
您需要使用任何框架或库。
在本文中,我们将使用Ktor。

实施流程

  • 在graphql文件中定义架构
  • 实施RootResolver
  • 实施解析器
  • 实施处理程序以处理GraphQL请求
  • 根解析器和解析器

    之间的区别

    graphql-java-tools具有两种类型的Resolver概念。 (解析器就像MVC中的Controller)

    考虑实现以下GraphQL模式。
    Parent有子Child的数据。

    example.graphql

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    type Query {
      parent: Parent!
    }

    type Parent {
      id: ID!
      name: String!
      child: Child!
    }

    type Child {
      id: ID!
      name: String!
    }

    通过graphql-java-tools返回具有这种具有A关系的数据时,有必要实现两种类型,RootResolverResolver
    每个角色的作用如下。

    RootResolver:
    引用父项时实施处理。
    由对端点的请求触发。

    解析器:
    当引用Parent.Child时实现处理。
    当注册的父类被称为触发器时,将调用它。

    很难理解,因此我将通过一个示例进行解释。

    当用Kotlin类表示

    exmple.graphql中定义的类型时,它如下所示。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    data class Parent(
        val id: Int,
        val name: String,
        val childId: Int
    )

    data class Child(
        val id: Int,
        val name: String
    )

    Parent.child在实际的类中不存在。
    要返回Parent.child作为响应,您需要使用Parent.childId关联Child
    为此,您需要Resolver
    当返回指定的类作为响应时,它可以接收Resolver对象。
    因此,通过在ParentResolver处接收Parent,可以引用childId,并且可以获得相关的Child

    总结???
    引用查询中定义的端点时的处理-