返回顶部
首页 > 资讯 > 精选 >SpringBoot怎么使用GraphQL开发Web API
  • 642
分享到

SpringBoot怎么使用GraphQL开发Web API

2023-07-05 21:07:41 642人浏览 八月长安
摘要

这篇文章主要讲解了“SpringBoot怎么使用GraphQL开发WEB api”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot怎么使用GraphQL开发Web&

这篇文章主要讲解了“SpringBoot怎么使用GraphQL开发WEB api”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“springBoot怎么使用GraphQL开发Web API”吧!

前言

传统的Restful API 存在诸多的问题,首先它无法控制返回的字段,前端也无法预判后端的返回结果,另外不同的返回结果对应不同的请求地址,这就导致了多次请求的问题。而GraphQL正是基于这样的背景而构建出来的API查询语言,相对于传统Restful API 它具有以下几个优点:

  • 灵活性:GraphQL 可以根据客户端的需求灵活地查询数据,而不是像 RESTful API 那样返回固定结构的数据。

  • 减少网络请求:GraphQL 允许客户端在一次请求中获取多个资源,这有助于减少网络请求的数量和提高性能。

  • 强类型:GraphQL 有一种强类型系统,客户端可以在编译时检测到查询中的错误,这有助于减少运行时错误。

  • 缓存:GraphQL 具有可缓存性,这意味着服务器可以缓存查询的结果,从而提高性能和可伸缩性。

  • 文档化:GraphQL 具有自我文档化的能力,使得开发者可以快速了解 API 的结构和功能。

Spring Boot中GraphQL的实现方案

如果后端语言为Java,那么GraphQL Java则是实现GraphQL的基础库。另外Spring已经整合了GraphQL,如果项目中使用了Spring,那么更加推荐Spring GraphQL。

Spring GraphQL的开发总体分为如下几个步骤

添加 Spring GraphQL 依赖项

在您的项目中添加 Spring GraphQL 依赖项。您可以通过 Maven 或 Gradle 等构建工具来添加依赖项。例如,如果您使用 Maven,则可以添加以下依赖项

        <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-graphql</artifactId>        </dependency>

定义 GraphQL Schema

在您的应用程序中定义 GraphQL Schema。Schema 定义了可查询的类型和字段。您可以使用 SDL(Schema Definition Language)或编程方式定义 Schema。

对于Spring Boot 工程来说schema文件放到resources/graphql/目录下,文件名后缀graphqls,下面是我定义一个的简单的schema.graphqls。

它指定了两个查询实现,author(id:Int)表示通过id查询Author,allAuthors则表示查询Author数组

schema {
    query: Query
}

type Query {
    author(id:Int): Author
    allAuthors: [Author]
}

type Author {
    id:Int
    firstName:String
    lastName:String
    email:String
    birthdate:String
}

实现RuntimeWirinGConfigurer

RuntimeWiringConfigurer是实现GraphQL获取数据的核心,使用GraphQL并不能直接去掉mybatis/Jpa这类持久层框架,从数据库获取数据仍然需要这类框架的支持。

而RuntimeWiringConfigurer则类似于Spring中的service层,它是实现基础数据的核心。

以下是一个简单示例:

@Componentpublic class AuthorWiring implements RuntimeWiringConfigurer {    private final AuthorRepository authorRepository;    public AuthorWiring(AuthorRepository authorRepository) {        this.authorRepository = authorRepository;    }    @Override    public void configure(RuntimeWiring.Builder builder) {        builder.type("Query", typeWiring -> typeWiring                        .dataFetcher("allAuthors", environment -> authorRepository.findAll())                        .dataFetcher("author", environment -> authorRepository.getReferenceById(environment.getArgument("id")))    }}

这里configure方法内部分别定义了两个DataFetcher对象,用来指定author和allAuthors查询数据的方式,可以看出依然是通过JPA去查询数据。

定义GraphQL Controller

我么定义GraphQLController用来接收web请求的入参,示例如下:

@RestController@RequestMapping("graphql")public class GraphQLController {    private final GraphQL graphQL;    @Autowired    public GraphQLController(GraphQlSource graphQlSource) {        graphQL = graphQlSource.graphQl();    }    @PostMapping("query")    public ResponseEntity<Object> query(@RequestBody String query) {        ExecutionResult result = graphQL.execute(query);        return ResponseEntity.ok(result.getData());    }}

代码中GraphQL对象是执行查询的入口,但GraphQL只有一个私有的构造方法,所以不能直接注入,必须通过注入GraphQlSource的方式来获取GraphQL对象。

注意在GraphQL中我们只能使用String来接收参数,无法使用model对象,这是因为Graph请求参数并不是JSON结构。

测试Graph请求

我们创建一个graphql.Http的文件,用于在idea中执行http请求

### Send POST request with json body
POST http://localhost:8080/graphql/query
Content-Type: application/json

{
  author(id: 1) {
    id
    firstName
    lastName
    birthdate
  }
}

### Send POST request with json body
POST http://localhost:8080/graphql/query
Content-Type: application/json

{
  allAuthors {
    id
    firstName
    lastName
    birthdate
  }
}

运行author(id: 1) 的查询,可以看到正常返回结果了。如果我们只需要 firstName和lastName两个字段,那么在请求入参中直接去掉id和birthdate就好了,而不用改动任何后端代码。

SpringBoot怎么使用GraphQL开发Web API

SpringBoot怎么使用GraphQL开发Web API

感谢各位的阅读,以上就是“SpringBoot怎么使用GraphQL开发Web API”的内容了,经过本文的学习后,相信大家对SpringBoot怎么使用GraphQL开发Web API这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: SpringBoot怎么使用GraphQL开发Web API

本文链接: https://lsjlt.com/news/355430.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot怎么使用GraphQL开发Web API
    这篇文章主要讲解了“SpringBoot怎么使用GraphQL开发Web API”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot怎么使用GraphQL开发Web&...
    99+
    2023-07-05
  • SpringBoot使用GraphQL开发WebAPI实现方案示例讲解
    目录前言Spring Boot中GraphQL的实现方案前言 传统的Restful API 存在诸多的问题,首先它无法控制返回的字段,前端也无法预判后端的返回结果,另外不同的返回结果...
    99+
    2023-05-14
    SpringBoot GraphQL开发Web API SpringBoot Web API
  • 开发效率翻倍的Web API使用技巧
    目录引言Clipboard API(剪切板)Fullscreen API(进入/退出全屏)Online State API(网络状态)Page Visibility API(页面显示...
    99+
    2023-05-20
    Web API使用技巧 开发效率翻倍Web API
  • Web应用开发TypeScript怎么使用
    这篇文章主要介绍“Web应用开发TypeScript怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Web应用开发TypeScript怎么使用”文章能帮助大家解决问题。一、什么是 TypeSc...
    99+
    2023-06-30
  • SpringBoot怎么简化Web应用程序的开发
    Spring Boot 是一个开箱即用的微服务框架,它简化了 Spring 应用程序的开发过程。以下是 Spring Boot 简化...
    99+
    2024-04-09
    SpringBoot
  • 怎么利用SpringBoot与Swagger提高API开发的效率
    怎么利用SpringBoot与Swagger提高API开发的效率?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。现在Web开发越来越倾向于前后端分离,前端使用An...
    99+
    2023-05-31
    springboot api swagger
  • 为什么Rust不适合开发Web API
    这篇文章主要讲解了“为什么Rust不适合开发Web API”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“为什么Rust不适合开发Web API”吧!Rust 是一门神奇的编程语言,有非常好的...
    99+
    2023-06-15
  • C#怎么使用RestClient调用Web API
    这篇文章主要介绍“C#怎么使用RestClient调用Web API”,在日常操作中,相信很多人在C#怎么使用RestClient调用Web API问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家...
    99+
    2023-06-30
  • 灵活的API查询语言GraphQL怎么用
    灵活的API查询语言GraphQL怎么用,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。GraphQL 是什么GraphQL 是一种 API 查询语言,是一个对自...
    99+
    2023-06-04
  • 怎么利用Spring Boot和JPA创建GraphQL API
    本篇内容主要讲解“怎么利用Spring Boot和JPA创建GraphQL API”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么利用Spring Boot和JP...
    99+
    2023-06-30
  • PHP Web 服务开发与 API 设计用于移动开发
    php web 服务开发涉及设置服务器环境、建立数据库和编写 php 脚本,以处理请求并生成 json 响应。面向移动的 api 设计遵循 restful 原则、使用 json 数据格式...
    99+
    2024-05-06
    api php mysql 移动应用程序
  • 怎么使用Flask编写Python Web API
    这篇文章主要介绍了怎么使用Flask编写Python Web API,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Python 是一个以语法简洁著称的高级的、面向对象的程序语...
    99+
    2023-06-16
  • web开发中Vuex怎么用
    这篇文章给大家分享的是有关web开发中Vuex怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。什么是vuex说白了就是一个可以全局管理状态的东西,用官方的话说是它采用集中式存...
    99+
    2024-04-02
  • Python中的Web开发框架怎么使用
    这篇文章主要介绍了Python中的Web开发框架怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python中的Web开发框架怎么使用文章都会有所收获,下面我们一起来看看吧。在开始之前,我们先要安装好需要...
    99+
    2023-07-06
  • 怎么使用Flutter开发简单的Web应用
    本篇内容主要讲解“怎么使用Flutter开发简单的Web应用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Flutter开发简单的Web应用”吧!为 W...
    99+
    2024-04-02
  • ASP Web API 开源工具箱:精选实用工具,助力 API 开发
    ASP Web API 作为一种流行的轻量级 Web 服务框架,以其出色的灵活性、可扩展性和跨平台能力,深受广大开发者的青睐。然而,在实际开发过程中,API 开发人员可能面临诸多挑战,例如代码调试、性能优化、安全防护等。 为解决这些痛点...
    99+
    2024-02-24
    ASP Web API 开源工具箱 调试 部署 性能优化 稳定性
  • SpringBoot开发怎么使用AOP记录日志
    这篇文章主要讲解了“SpringBoot开发怎么使用AOP记录日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“SpringBoot开发怎么使用AOP记录日志”吧!为什么要用AOP?答案是解...
    99+
    2023-06-25
  • 使用springboot怎么结合mqtt进行开发
    这篇文章给大家介绍使用springboot怎么结合mqtt进行开发,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MQTT(Message Queuing Telemetry Transport)是基于二进制消息的发布/...
    99+
    2023-05-31
    springboot mqtt
  • 怎么使用Python开发自定义Web框架
    开发自定义Web框架接收web服务器的动态资源请求,给web服务器提供处理动态资源请求的服务。根据请求资源路径的后缀名进行判断:如果请求资源路径的后缀名是.html则是动态资源请求, 让web框架程序进行处理。否则是静态资源请求,让web服...
    99+
    2023-05-17
    Python web
  • Python怎么使用Web框架Flask开发项目
    本篇内容主要讲解“Python怎么使用Web框架Flask开发项目”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么使用Web框架Flask开发项目”吧!一、简介Flask是一个轻量...
    99+
    2023-07-06
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作