zoukankan      html  css  js  c++  java
  • Graphql Tutorials(Episode 01)

    1.前言

    最近认识到Graphql,它是一个基于DSL的api。我曾接触过一个pos机刷卡系统,它是基于JSON-DSL语言开发的框架,很有趣。可是后来,没有机会深入研究。直到最近我认识了Graphql,所以想深入学习,打算写一个系列完整的posts,记录一下。

    2.什么是Graphql

    你就可以理解成操作数据的API。

    如果你使用过Restful,那么理解Graphql也会相当容易。在Restful中,我们为了查询数据,有可能进行了多次查询才能得到我们想要的数据;也可能查询了一次,但是里面大部分数据都是我们这次查询中不需要的。为了解决上述的问题,Graphql出现了。

    它是Facebook于2012年开发的内部系统,于2015年发布面向大众。

    3.例子

    我们来看看它的样子,感受一下:

    Post Request:(很像JSON,但不是)

    {
        orders {
            id
            productsList {
                product {
                    name
                    price
                }
                quantity
            }
            totalAmount
        }
    }

    Answer:

    {
        "data": {
            "orders": [
                {
                    "id": 1,
                    "productsList": [
                        {
                            "product": {
                                "name": "orange",
                                "price": 1.5
                            },
                            "quantity": 100
                        }
                    ],
                    "totalAmount": 150
                }
            ]
        }
    }

    4.Helloword

    我们先看一个最简单的例子,对Graphql整体有个认识。目的是让大家认知它大体的样子,以及GraphQL加载的流程。

     1 public class GettingStarted {
     2 
     3     final static Logger logger = LoggerFactory.getLogger(GettingStarted.class);
     4 
     5     public static void main(String[] args) {
     6         String schema = "type Query{hello: String}";
     7 
     8         SchemaParser schemaParser = new SchemaParser();
     9         TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
    10 
    11         RuntimeWiring runtimeWiring = RuntimeWiring.newRuntimeWiring()
    12             .type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world")))
    13             .build();
    14 
    15         SchemaGenerator schemaGenerator = new SchemaGenerator();
    16         GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
    17 
    18         GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
    19         ExecutionResult executionResult = build.execute("{hello}");
    20 
    21         System.out.println(executionResult.getData().toString());
    22         // Prints: {hello=world}
    23     }
    24 
    25 }

    我们可以看到上面的例子中,第6行,我们定义了schema,如果在项目中,应该是一个schema文件。读取这个schema文件后,进行解析得到TypeDefinitionRegistry。然后是执行时的绑定,RuntimeWiring,也即是客户端发送一个请求“hello”,服务端根据这个请求,应该进行什么样的处理。接下来,用TypeDefinitionRegistry和RuntimeWiring,生成GraphQLSchema,进行生成GraphQL。在第19行中,就是执行请求的部分,最后在21行,将返回结果打印出来。

    上面的这段话整理一下,流程如下:

    到此为止,我们了解了Graphql的背景,对它有个整体的认识。不要着急,知识一点点学习积累。在下一篇的post中,我会给出更具体的示例。

    这篇post代码我放在了Github上:

    https://github.com/lihao5257/GraphqlDemo.git     分支是master

    参考链接:

    https://en.wikipedia.org/wiki/GraphQL

  • 相关阅读:
    zabbix 对/etc/ssh/sshd_config文件的监控 但status为unknowen
    Kotlin从零到精通Android开发
    谷歌官方 构建您的第一个应用 Kotlin版
    android studio 运行按钮为灰色的解决办法之一
    webapi发布到windows 2012的iis8里 出错
    Asp.net MVC WebApi项目的自动接口文档及测试功能打开方法
    Asp.net Web Api开发(第四篇)Help Page配置和扩展
    关于SNMP的MIB文件的语法简述
    Visual Stdio 2017增加SVN支持
    ffmpeg 多个音频合并 截取 拆分
  • 原文地址:https://www.cnblogs.com/lihao007/p/13916821.html
Copyright © 2011-2022 走看看