当前位置:首页 > 单片机 > 架构师社区
[导读]前言在浅尝GraphQL一文描述了GraphQL及基本使用,本文提供一个基本示例,描述如何基于springboot的web项目快速应用。graphql-java的官方文档:GettingstartedwithGraphQLJavaandSpringBoot,提供了相关依赖用以快速...

前言

在浅尝GraphQL一文描述了GraphQL及基本使用,本文提供一个基本示例,描述如何基于spring boot的web项目快速应用。graphql-java的官方文档:Getting started with GraphQL Java and Spring Boot,提供了相关依赖用以快速配置,但是个人真心不建议使用这个库及相关配置方式来搭建脚手架,在实际开发中,业务比较复杂的时候,会导致需要配置的业务代码比较多也比较繁琐,相对下面这种方式,代码复杂性比较高。本文提供一种更灵活快捷的方式,在spring boot项目中快速应用开发。使用的依赖也和上面官方提供的都不一样,请注意区分。

快速开始

创建spring boot工程

通过Spring Initializr快速搭建,我选的jdk版本及spring boot版本,如下所示,其它版本未做兼容性测试。
Spring Boot   GraphQL 才是 API 的未来!
点击下方的Generate按钮:
Spring Boot   GraphQL 才是 API 的未来!
打开工程结构如下,我将application.properties删除了替换成applicaiton.yml,因为我个人比较喜欢yaml的配置方式:
Spring Boot   GraphQL 才是 API 的未来!

引入相关依赖

pom.xml配置如下:"1.0" encoding="UTF-8"?>
"http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
 4.0.0
 
  org.springframework.boot
  spring-boot-starter-parent
  2.4.6
   
 
 com.xuxd
 graphql.demo
 0.0.1-SNAPSHOT
 graphql.demo
 GraphQL Demo project for Spring Boot
 
  1.8
  1.8
  1.8
  UTF-8
  UTF-8
  1.18.20
  11.0.1
  2.8.7
 
 
  
   org.springframework.boot
   spring-boot-starter
  


  
   org.springframework.boot
   spring-boot-starter-web
  


  
   org.springframework.boot
   spring-boot-starter-test
   test
  


  
   org.projectlombok
   lombok
   ${lombok.version}
   provided
  


  
   com.graphql-java-kickstart
   graphql-java-tools
   ${graphql-java-tools.version}
  


  
   com.google.code.gson
   gson
   ${gson.version}
  

 


 
  
   
    org.springframework.boot
    spring-boot-maven-plugin
   
  
 



初始化GraphQL实例

我们将创建一个GraphQL实例并将其注册到spring容器中,代码如下。Spring Boot 基础就不介绍了,推荐下这个实战教程:https://www.javastack.cn/categories/Spring-Boot/创建一个GraphQLProvider类:@Component
public class GraphQLProvider {

    private GraphQL graphQL;

    @Autowired
    private IItemService itemService;

    @Bean
    public GraphQL graphQL() {
        return graphQL;
    }

    @PostConstruct
    public void init() throws IOException {
        GraphQLSchema graphQLSchema = SchemaParser.newParser()
            .file("graphql/base.graphqls")
            .resolvers(new Query(), new Mutation())
            .file("graphql/item.graphqls")
            .resolvers(new ItemResolver(itemService))
//            .file("book.graphqls")
//            .resolvers(new BookResolver())  //其它定义照上面的示例,继续增加
            .build().makeExecutableSchema();

        this.graphQL = graphQL.newGraphQL(graphQLSchema).build();
    }

}
关于*.graphqls或者对应的Resolver如ItemResolver,可以参看浅尝GraphQL相关描述,这里只是作了微调整,相关代码如下:base.grqphqlsschema {
    # 查询
    query: Query
    # 更新
    mutation: Mutation
}

type Query {
    version: String
}

type Mutation {
    version: String
}
item.graphqls# 定义一个查询类型
extend type Query {
    queryItemList: ItemList  # 定义查询项目列表
    queryById(id: ID): Item
}

extend type Mutation {
    updateName(param: Param): Item
}

# 定义项目字段
type Item {
    id: ID!
    code: String!
    name: String!
}

type ItemList {
    itemList: [Item!]!  #获取项目列表
    total: Int!      # 获取项目总数
}

input Param {
    id: ID!
    name: String!
}
ItemResolverpublic class ItemResolver implements GraphQLQueryResolver, GraphQLMutationResolver {

    private IItemService itemService;

    public ItemResolver(IItemService itemService) {
        this.itemService = itemService;
    }

    // 对应item.graphqls里的queryItemList
    public ItemList queryItemList() {
        return itemService.queryItemList();
    }

    public Item queryById(Long id) {
        return itemService.queryById(id);
    }

    public Item updateName(Param param) {
        return itemService.updateName(param);
    }
}
相关业务代码比较多,就不一一贴了。

提供API

 result = new HashMap<>();        ExecutionResult executionResult = graphQL.execute(executionInput);        List errors = executionResult.getErrors();        if (errors != null 
本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读

在微服务架构逐渐成为主流的今天,系统被拆分为多个独立的微服务,每个微服务都有自己的API接口。随着微服务数量的不断增加,系统面临的流量管控、安全防护、服务治理等问题也日益突出。API网关作为微服务架构的入口层,能够统一管...

关键字: API 网关

东京2026年2月1日 /美通社/ -- NTT DOCOMO, INC.与Aduna今日共同宣布,双方已于2026年1月29日签署合作协议(简称“协议”)。 此次合作将使D...

关键字: API COM 网络 AD

新增手表、手链、戒指、耳环、项链、围巾、帽子、鞋子、包袋九大品类虚拟试穿API,完善 AI 驱动时尚生态,赋能全球品牌与开发者打造全场景穿搭体验 上海2026年1月22日 /美通社/ -- 全球领先的人工智能与增强现实...

关键字: API 移动 AI BSP

正值成立 25 周年之际,维基百科母公司维基媒体基金会(Wikimedia)于当地时间 1 月 15 日通过博客宣布,已与亚马逊、Meta、微软、Mistral AI 及 Perplexity 等多家科技企业达成新合作。

关键字: 维基百科 AI API 网络爬虫

在数字化转型加速的2025年,API已成为企业数据交互的核心通道。随着物联网、云计算和微服务架构的普及,API接口的安全防护面临前所未有的挑战。据行业报告显示,超过92%的数据泄露事件源于API攻击,涉及金融、电商、医疗...

关键字: API数据安全 API

阿布扎比2025年12月7日 /美通社/ -- 12月7日,壳牌携全新升级的壳牌超凡喜力极速闪电系列润滑油(以下简称"闪电红2.0")亮相阿布扎比。作为法拉利车队的甄选用油,"闪电红&quo...

关键字: 发动机 奔驰 宝马 API

-Nomad eSIM宣布业务实现强劲增长,企业级与消费级产品线全面扩展 加利福尼亚州圣克拉拉2025年11月19日 /美通社/ -- Nomad eSIM是Lo...

关键字: ESIM AD API ENTERPRISE

技术供应商 API 选择 Datavault AI,以持续打造其领先的技术创新文化费城, Oct. 30, 2025 (GLOBE NEWSWIRE) -- 据 IBN 报道,专利数据代币化与货币化技术领军企业 Da...

关键字: API MEDIA AI ASDA

北京——2025年10月15日 亚马逊云科技近日宣布,Amazon Verified Permissions 已在由西云数据运营的亚马逊云科技中国(宁夏)区域和由光环新网运营的亚马逊云科技中国(北京)区域正式上线。该服务...

关键字: API 亚马逊云科技

新加坡2025年9月17日 /美通社/ -- 9月11日,第三届亚洲愿景论坛在新加坡拉开帷幕。本届论坛由财新国际主办,新加坡旅游局(STB)担任合作主办方。本届论坛延续其在促进国际对话方面取得的成功经验,以"变...

关键字: 新加坡 人工智能 AI技术 API
关闭