您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

火爆外网的 DGS 框架使用,更方便 GraphQL 的使用

时间:2022-04-21 11:32:16  来源:  作者:程序员北边

前言

Netflix 已开放其 Domain Graph Service(DGS)框架的源代码 ,该框架是为了方便整合 GraphQL 使用,用于简化 GraphQL 的实现。

GraphQL 主要是作用于数据接口,比如前端后端交互。无需定义或修改后台 Controller、Service 等业务代码即可实现灵活的数据变更,客户端可以自由获取服务端事先定义好的数据,提高了交互接口的灵活性

组件依赖

graphql-dgs-spring-boot-starter

<dependency>
    <groupId>com.netflix.graphql.dgs</groupId>
    <artifactId>graphql-dgs-spring-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

DGS 必须从 jcenter 下载,不然部分依赖者无法下载。踩坑很久

    <profiles>
        <profile>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <repositories>
                <repository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>bintray</name>
                    <url>https://jcenter.bintray.com</url>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <snapshots>
                        <enabled>false</enabled>
                    </snapshots>
                    <id>central</id>
                    <name>bintray-plugins</name>
                    <url>https://jcenter.bintray.com</url>
                </pluginRepository>
            </pluginRepositories>
            <id>bintray</id>
        </profile>
    </profiles>

定义接口 schema

/src/main/resources/schema/schema.graphqls

此文件定义了客户端请求入参格式和查询数据类型

type Query {
    shows(title: String ,releaseYear: Int): [Show]
}

type Show {
    title: String
    releaseYear: Int
}

定义数据抽取规则

@DgsComponent
public class ShowsDatafetcher {

    @DgsData(parentType = "Query", field = "shows")
    public List<Show> shows(@InputArgument("title") String title, @InputArgument("releaseYear") Integer releaseYear) {
        if (title == null) {
            return shows;
        }

        return shows.stream().filter(s -> s.getTitle().contains(title)).collect(Collectors.toList());
    }

    // 模拟 DB 查询
    private final List<Show> shows = List.of(
            new Show("JAVA", 1995),
            new Show("php", 1995),
            new Show("Python", 1990),
            new Show("golang", 2009),
            new Show("rust", 2015)
    );
}

UI 前端调试

访问:
http://localhost:8080/graphiql

火爆外网的 DGS 框架使用,更方便 GraphQL 的使用

 

条件查询

火爆外网的 DGS 框架使用,更方便 GraphQL 的使用

 

接口调用

curl --location --request POST 'http://localhost:8080/graphql' 
--header 'Content-Type: Application/json' 
--data-raw '{"query":"{n  shows(title: "java", releaseYear: 1995) {n    titlen    releaseYearn  }n}n","variables":null}'

java 调用

@SpringBootTest(classes = {DgsAutoConfiguration.class, ShowsDatafetcher.class})
class ShowsDatafetcherTests {

    @Autowired
    DgsQueryExecutor dgsQueryExecutor;

    @Test
    void shows() {
        List<String> titles = dgsQueryExecutor.executeAndExtractJsonPath(
                " { shows { title releaseYear }}",
                "data.shows[*].title");
        assertThat(titles).contains("java");
    }
}


Tags:DGS 框架   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言Netflix 已开放其 Domain Graph Service(DGS)框架的源代码 ,该框架是为了方便整合 GraphQL 使用,用于简化 GraphQL 的实现。GraphQL 主要是作用于数据接口,比如前端后端交互...【详细内容】
2022-04-21  Tags: DGS 框架  点击:(0)  评论:(0)  加入收藏
▌简易百科推荐
前言Netflix 已开放其 Domain Graph Service(DGS)框架的源代码 ,该框架是为了方便整合 GraphQL 使用,用于简化 GraphQL 的实现。GraphQL 主要是作用于数据接口,比如前端后端交互...【详细内容】
2022-04-21  程序员北边    Tags:DGS 框架   点击:(0)  评论:(0)  加入收藏
一、异步执行实现方式二种:1. 使用异步注解@aysnc、启动类:添加@EnableAsync注解2. JDK 8本身有一个非常好用的Future类&mdash;&mdash;CompletableFuture@AllArgsConstructor...【详细内容】
2022-04-18  Java架构师追风    Tags:Spring Boot   点击:(13)  评论:(0)  加入收藏
1、微服务简述#微服务,是一个小型的服务,也是一种设计理念,将一个大型繁杂的系统拆分为多个小型的服务,进行独立部署,这些服务在独立进程中运行,通过特定的协议进行通信​ 优点: 轻...【详细内容】
2022-04-18  海椰人  博客园  Tags:SpringCloud   点击:(6)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的Nakama是一个开源在线多人游戏框架。 Nakama 是一个开...【详细内容】
2022-04-13  GitHub精选    Tags:游戏框架   点击:(17)  评论:(0)  加入收藏
Mybatis原理mybatis源码原理主要是分为三个部分 初始化、创建会话、语句执行一、初始化1.读取配置文件mybatis-config.xml。 2.解析mapper.xml文件。 3.最后将mapper.xml中...【详细内容】
2022-04-11  炯哈哈    Tags:Mybatis   点击:(14)  评论:(0)  加入收藏
前言最近鼓捣了一下 Vue3 + Vite2,遇到了不少问题,整理了5个可以提高开发效率的小知识,让你在 Vue3 的项目开发中更加丝滑、顺畅。一、setup name 增强Vue3的setup语法糖是个好...【详细内容】
2022-04-08  广漂程序猿Bean    Tags:vue3   点击:(25)  评论:(0)  加入收藏
介绍Qt Shader Tools模块建立在 SPIR-V 开源生态系统之上,为了编译成 SPIR-V,使用 glslang,而翻译和反射是通过 SPIRV-Cross 完成的。为了允许在 Qt 应用程序和库中编写一次着...【详细内容】
2022-04-08  慧都科技    Tags:开发框架   点击:(22)  评论:(0)  加入收藏
前言项目开发困难,搭建项目浪费时间,文档七零八落,上班没时间划水(其实我想有更多的时间学习,提高自己的)。那么干货福利来了,以下一些好的插件和配置,还有相应的链接地址,你还怕没...【详细内容】
2022-04-06  程序员库里    Tags:vue3框架   点击:(20)  评论:(0)  加入收藏
Spring沦陷了!这样的标题这几天是不是看腻了?然而,仔细看看都是拿着之前的几个毫不相干的CVE来大吹特吹。所以,昨天发了一篇关于最近网传的Spring大漏洞的文章,聊了聊这些让人迷...【详细内容】
2022-04-02  码农看看    Tags:Spring   点击:(60)  评论:(0)  加入收藏
我们在开发过程中会遇到k8s api接口的调用,这个时候我们会先用postman来进行接口的调试工作,下面我们介绍如何在postman中实现k8s api接口的调试。1 rancher平台中选择API&KEY...【详细内容】
2022-03-30  80周辉    Tags:k8s   点击:(33)  评论:(0)  加入收藏
相关文章
    无相关信息
站内最新
站内热门
站内头条