当前位置:首页 > 科技  > 软件

Springboot整合GraphQL使你的API更易理解可读性更强

来源: 责编: 时间:2023-08-09 23:03:53 236观看
导读环境:Springboot3.0.9概述一种用于 API 的查询语言GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的

环境:Springboot3.0.9VoZ28资讯网——每日最新资讯28at.com

概述

  • 一种用于 API 的查询语言

GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时。GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述,使得客户端能够准确地获得它需要的数据,而且没有任何冗余,也让 API 更容易地随着时间推移而演进,还能用于构建强大的开发者工具。VoZ28资讯网——每日最新资讯28at.com

  • 请求你所要的数据

向你的 API 发出一个 GraphQL 请求就能准确获得你想要的数据,不多不少。GraphQL 查询总是返回可预测的结果。使用 GraphQL 的应用可以工作得又快又稳,因为控制数据的是应用,而不是服务器。VoZ28资讯网——每日最新资讯28at.com

  • 获取多个资源

GraphQL 查询不仅能够获得资源的属性,还能沿着资源间引用进一步查询。典型的 REST API 请求多个资源时得载入多个 URL,而 GraphQL 可以通过一次请求就获取你应用所需的所有数据。这样一来,即使是比较慢的移动网络连接下,使用 GraphQL 的应用也能表现得足够迅速。VoZ28资讯网——每日最新资讯28at.com

  • 描述所有的可能

GraphQL API 基于类型和字段的方式进行组织,而非入口端点。你可以通过一个单一入口端点得到你所有的数据能力。GraphQL 使用类型来保证应用只请求可能的数据,还提供了清晰的辅助性错误信息。应用可以使用类型,而避免编写手动解析代码。VoZ28资讯网——每日最新资讯28at.com

有关GraphQL的语法相关知识,请参考VoZ28资讯网——每日最新资讯28at.com

https://graphql.org/中文VoZ28资讯网——每日最新资讯28at.com

https://graphql.cn/VoZ28资讯网——每日最新资讯28at.com

接下来将以一个完整的示例演示GraphQL的使用。VoZ28资讯网——每日最新资讯28at.com

环境配置

  • 引入依赖
<dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-graphql</artifactId></dependency><dependency>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-starter-web</artifactId></dependency><dependency>  <groupId>com.mysql</groupId>  <artifactId>mysql-connector-j</artifactId>  <scope>runtime</scope></dependency>
  • 配置文件
spring:  datasource:    driverClassName: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://localhost:3306/testjpa?serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&useSSL=false    username: root    password: xxxxxx    type: com.zaxxer.hikari.HikariDataSource    hikari:      minimumIdle: 10      maximumPoolSize: 200      autoCommit: true      idleTimeout: 30000      poolName: MasterDatabookHikariCP      maxLifetime: 1800000      connectionTimeout: 30000      connectionTestQuery: SELECT 1  ---spring:  jpa:    generateDdl: false    hibernate:      ddlAuto: update    openInView: true    show-sql: true---spring:  graphql:    path: /graphql    graphiql:      enabled: true      path: /graphiql    cors:      allow-credentials: true      allowed-headers: '*'      allowed-methods: '*'    schema:      locations:      - classpath*:graphql/**/      file-extensions:      - .graphqls      - .gqls      printer:        enabled: true

注意:这里的
spring.graphql.graphql.enabled=true开启后,将会提供一个UI界面供我们快速查询测试使用VoZ28资讯网——每日最新资讯28at.com

图片图片VoZ28资讯网——每日最新资讯28at.com

做好以上配置后,接下来就是建立2张表t_book和t_author。VoZ28资讯网——每日最新资讯28at.com

实体定义

BookVoZ28资讯网——每日最新资讯28at.com

@Entity@Table(name = "t_book")public class Book {  @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private Long id ;  private String name ;  private Integer pageCount ;  @Transient  private List<Author> author = new ArrayList<>();}

AuthorVoZ28资讯网——每日最新资讯28at.com

@Entity@Table(name = "t_author")public class Author {    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)  private Long id ;  private String firstName ;  private String lastName ;  // Book表的主键  private Long bid ;}

Repository定义

BookRepositoryVoZ28资讯网——每日最新资讯28at.com

public interface BookRepository extends JpaRepository<Book, Long>, JpaSpecificationExecutor<Book> {}

AuthorRepositoryVoZ28资讯网——每日最新资讯28at.com

public interface AuthorRepository extends JpaRepository<Author, Long>, JpaSpecificationExecutor<Author> {  List<Author> findByBid(Long bid) ;  }

Service定义

@Servicepublic class BookService {    @Resource  private BookRepository bookRepository ;  @Resource  private AuthorRepository authorRepository ;    public Book queryBook(Long id) {    Book book = bookRepository.findById(id).orElse(null) ;    List<Author> authors = authorRepository.findByBid(id) ;    book.setAuthor(authors) ;    return book ;  }  }

以上是基本的数据库操作,很容易理解。接下来就是定义GraphQL SchemaVoZ28资讯网——每日最新资讯28at.com

GraphQL Schema定义

schema {  query: BookQuery}type BookQuery {  bookById(id: ID): Book}type Book {  id: ID  name: String  pageCount: Int  author: [Author]}type Author {  id: ID  firstName: String  lastName: String}

有关graphql相关语法请参考上面提到的网址。接下来是定义访问接口VoZ28资讯网——每日最新资讯28at.com

Controller接口

@Controllerpublic class BookController {  @Resource  private BookService bookService;  @Resource  private AuthorRepository authorRepository;  @SchemaMapping(typeName = "BookQuery", field = "bookById")  public Book bookById(@Argument Long id) {    return bookService.queryBook(id);  }}

访问测试

只需访问统一的入口即可:VoZ28资讯网——每日最新资讯28at.com

#该访问路径可以在配置文件中修改VoZ28资讯网——每日最新资讯28at.com

http://localhost:8080/graphqlVoZ28资讯网——每日最新资讯28at.com

图片图片VoZ28资讯网——每日最新资讯28at.com


VoZ28资讯网——每日最新资讯28at.com

这里是访问的完整的信息,我们可以在请求的query中设置需要访问的字段,如下:VoZ28资讯网——每日最新资讯28at.com

图片图片VoZ28资讯网——每日最新资讯28at.com

只访问book信息VoZ28资讯网——每日最新资讯28at.com

只访问部分字段信息只访问部分字段信息VoZ28资讯网——每日最新资讯28at.com

你需要访问那些字段,是完全由客户端定义的。VoZ28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5198-0.htmlSpringboot整合GraphQL使你的API更易理解可读性更强

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 三言两语说透webpack对vue的编译

下一篇: 电脑技巧:Ditto剪切板增强工具介绍(附下载)

标签:
  • 热门焦点
  • 把LangChain跑起来的三个方法

    把LangChain跑起来的三个方法

    使用LangChain开发LLM应用时,需要机器进行GLM部署,好多同学第一步就被劝退了,那么如何绕过这个步骤先学习LLM模型的应用,对Langchain进行快速上手?本片讲解3个把LangChain跑起来
  • 一个注解实现接口幂等,这样才优雅!

    一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • JVM优化:实战OutOfMemoryError异常

    JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • Temu起诉SHEIN,跨境电商战事升级

    Temu起诉SHEIN,跨境电商战事升级

    来源 | 伯虎财经(bohuFN)作者 | 陈平安日前据外媒报道,拼多多旗下跨境电商平台Temu正对竞争对手SHEIN提起新诉讼,诉状称Shein&ldquo;利用市场支配力量强迫服装厂商与之签订独家
  • 当家的盒马,加速谋生

    当家的盒马,加速谋生

    来源 | 价值星球Planet作者 | 归去来自己&ldquo;当家&rdquo;的盒马,开始加速谋生了。据盒马官微消息,盒马计划今年开放生鲜供应链,将其生鲜商品送往食堂。目前,盒马在上海已经与
  • 半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    半导体需求下滑 三星电子DS业务部门今年营业亏损预计超10万亿韩元

    7月17日消息,据外媒报道,去年下半年开始的半导体需求下滑,影响到了三星电子、SK海力士、英特尔等诸多厂商,营收明显下滑,部分厂商甚至出现了亏损。作为
  • iQOO Neo8系列新品发布会

    iQOO Neo8系列新品发布会

    旗舰双芯 更强更Pro
  • Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    Counterpoint :OPPO双旗舰战略全面落地 高端产品销量增长22%

    2023年6月30日,全球行业分析机构Counterpoint Research发布的《中国智能手机高端市场白皮书》显示,中国智能手机品牌正在寻求高质量发展,中国高端智能
  • 2022爆款:ROG魔霸6 冰川散热系统持续护航

    2022爆款:ROG魔霸6 冰川散热系统持续护航

    喜逢开学季,各大商家开始推出自己的新产品,进行打折促销活动。对于忠实的端游爱好者来说,能够拥有一款梦寐以求的笔记本电脑是一件十分开心的事。但是现在的
Top