zoukankan      html  css  js  c++  java
  • GraphQL 学习笔记

    一 GraphQL 是什么

     官网点我

    看官网怎么说?

     

    二 我们用它做什么

    公司有个需求:根据多组API数据源,集成为一条结果集。输出给前端进行展示出来。

    基于这样的需求背景。我们考虑了使用RESTFul的方式,请求多个API ,然后再进行数据组装。但同时,也发现了GraphQL这个工具语言。它的特点有:请求你所要的数据不多不少;获取多个资源,只用一个请求;描述所有的可能,类型系统。

    三 来试试怎么用

    这里我们以Springboot 集成GraphQL的方式实现

    3.1 新建Spring boot项目。引入依赖

        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.3.3.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
     <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>com.graphql-java</groupId>
                <artifactId>graphql-spring-boot-starter</artifactId>
                <version>3.10.0</version>
            </dependency>
            <dependency>
                <groupId>com.graphql-java</groupId>
                <artifactId>graphql-java</artifactId>
                <version>2019-10-31T04-37-48-0919e71</version>
            </dependency>
            <!-- 图形化界面graphiql-spring-boot-starter -->
            <dependency>
                <groupId>com.graphql-java-kickstart</groupId>
                <artifactId>graphiql-spring-boot-starter</artifactId>
                <version>5.10.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.graphql-java</groupId>
                <artifactId>graphql-java-tools</artifactId>
                <version>5.2.4</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.4</version>
            </dependency>
    
        </dependencies>

    3.2 创建解析器

    注意:这里解析器的方法名和输入参数,要和你定义在schema.graphqls里的方法类型和参数名相同。
    @Component
    @AllArgsConstructor
    @Slf4j
    public class BookQueryResolver implements GraphQLQueryResolver {
    
        private static final String URL= "http://localhost:8080/getData";
    
        /**
         * 这里传入外部API的请求路径,根据id从外部API获取数据源
         * 填充数据
         * @return
         */
        public Book findBooks(String id){
            return HttpClintUtil.doGet(URL, id);
        }
    
    }

    3.3 创建schema.graphqls文件,编写schmea文件

    编写语法指南: https://www.prisma.io/blog/graphql-sdl-schema-definition-language-6755bcb9ce51

    前端语法速查表: http://caibaojian.com/scb/graphql.html

    解释:
    Query 表示为查询
    方法的入参要对应字段名和字段类型。
    返回类型也要按照类型对应
    type Query {
        findBooks(id: String!): Book
    }
    
    type Book {
        id: String
        name: String
        pageCount: String
        authorId: String
    }

    3.4 controller调用

    @RestController
    public class BookController {
    
        @Autowired
        BookQueryResolver bookQueryResolver;
    
        @GetMapping("getData")
        public Book findBooks(@RequestParam("id") String id){
            return bookQueryResolver.findBooks(id);
        }
    }

    3.5 测试

  • 相关阅读:
    Notice: Only variable references should be returned by reference(PHP版本兼容性问题)
    App 开发:Hybrid 架构下的 HTML5 应用加速方案
    Hybrid App是如何实现网页语言与程序语言的混合?谁占主体?
    前端切图+网页排版的注意事项和经验分享
    php提示 Notice: Use of undefined constant name
    如何预测一个互联网产品的未来—一套关于产品的数学模型
    以 MAMP 为 Mac OS X 安装并设置 PHP开发环境
    关于EINTR错误的理解【转】
    socket中的函数遇见EINTR的处理【转】
    Ubuntu10.04中利用V4L2读取摄像头数据并保存成文件【转】
  • 原文地址:https://www.cnblogs.com/Edward-Wang/p/13671825.html
Copyright © 2011-2022 走看看