zoukankan      html  css  js  c++  java
  • GraphQL Java-入门指南

    GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。 GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。

    基于node的服务端开发中,GraphQL技术较为成熟常用,在基于java的服务端开发中,由于国内对该API标准的了解程度不高,以及引入GraphQL可能需要维护两份重复数据(schema和相应java代码实现)。目前在Java服务端开发领域,Graphql Java的应用还较为有限。

    本文旨在从Java服务端开发的角度,介绍GraphQL的落地实践。由官方文档开始,循序渐进的介绍引入GraphQL对服务端开发带来的好处,以及基于GraphQL Java框架的注解式声明方式,逐步优化GraphQL的引入流程。

    一、开始

    graphql-java至少需要在java8平台上运行。

    1.1 在gradle中使用

    保证mavenCentral在repo当中

        repositories {
            mavenCentral()
        }
    

    添加依赖如下:

        dependencies {
          compile 'com.graphql-java:graphql-java:13.0'
        }
    

    1.2 在Maven中使用

    依赖如下:

        <dependency>
            <groupId>com.graphql-java</groupId>
            <artifactId>graphql-java</artifactId>
            <version>113.0</version>
        </dependency>
    

    二、Hello World示例

    示例代码如下:

    import graphql.ExecutionResult;
    import graphql.GraphQL;
    import graphql.schema.GraphQLSchema;
    import graphql.schema.StaticDataFetcher;
    import graphql.schema.idl.RuntimeWiring;
    import graphql.schema.idl.SchemaGenerator;
    import graphql.schema.idl.SchemaParser;
    import graphql.schema.idl.TypeDefinitionRegistry;
    
    import static graphql.schema.idl.RuntimeWiring.newRuntimeWiring;
    
    public class HelloWorld {
    
        public static void main(String[] args) {
            String schema = "type Query{hello: String}";
    
            SchemaParser schemaParser = new SchemaParser();
            TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
    
            RuntimeWiring runtimeWiring = newRuntimeWiring()
                    .type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world")))
                    .build();
    
            SchemaGenerator schemaGenerator = new SchemaGenerator();
            GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
    
            GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
            ExecutionResult executionResult = build.execute("{hello}");
    
            System.out.println(executionResult.getData().toString());
            // Prints: {hello=world}
        }
    }
    

    示例中展示了一个最简单的hello world示例,主要包含如下几个部分:

    2.1 Schema

    Schema,可理解为GraphQL的概要,描述了相关的类型信息、可执行的操作等。

    在本例中,我们定义了一个Schema如下:

    type Query{hello: String}
    

    其中,Query类型的操作,只包含一个hello字段,并且返回String类型数据。

    2.2 TypeDefinitionRegistry

    类型定义。在Java代码中,通过加载Schema文件或描述,将其解析为TypeDefinitionRegistry。

    2.3 RuntimeWiring

    运行时织入。仅有Schema及其类型定义还不够,在Java中要实际运行GraphQL`,还需要显式指定定义中的每个操作,该触发什么样的行为。

    例如,在本例中,builder -> builder.dataFetcher("hello", new StaticDataFetcher("world")表示当查询Query类型下的hello字段时,返回值为"world"。

    2.4 GraphQL

    在结合前面TypeDefinitionRegistry和RuntimeWiring的基础上,生成的可运行的GraphQL实例。

    2.5 ExecutionResult

    每次执行GraphQL操作时,返回的结果对象。其中包含error字段,用于保存执行过程中的报错信息。data字段,用于获取执行结果返回值。

  • 相关阅读:
    算法(第4版)-1.4.8 处理对于输入的依赖
    设计模式学习笔记之练习代码
    常用算法Java实现之快速排序
    常用算法Java实现之希尔排序
    常用算法Java实现之直接插入排序
    常用算法Java实现之选择排序
    常用算法Java实现之冒泡排序
    Java 集合框架之 Map
    Java 集合框架之Collection
    HBase 参考文档翻译之 Getting Started
  • 原文地址:https://www.cnblogs.com/pku-liuqiang/p/11496914.html
Copyright © 2011-2022 走看看