• 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 测试

  • 相关阅读:
    saltstack推送文件到节点
    Linux查看僵尸进程
    Linux批量对某个目录下特定文件进行修改内容
    Linux查看网络连接数
    Linux查看当前目录下哪个目录占用容量最多
    Linux查看inodes最多的目录
    Linux用命令过滤出ip地址
    mysql表字段的增删改操作
    Python安装模块超时
    sql 查询结果中加入空值列
  • 原文地址:https://www.cnblogs.com/Edward-Wang/p/13671825.html
Copyright © 2020-2023  润新知