【ReactJs+springBoot项目——租房】第4章:GraphQL开发房源接口+搭建前台系统+首页轮播广告功能GraphQ+Apollo Client

使用GraphQL开发房源接口
实现房源列表查询的接口
搭建前台系统
实现首页轮播广告功能
改造轮播广告接口方式为GraphQL
 学习使用Apollo Client的使用

1、使用GraphQL开发房源接口

下面我们基于GraphQL实现查询房源的接口服务。将涉及到GraphQL与SpringBoot整合的知识点。
1.1、实现根据id查询房源的dubbo服务
1.1.1、定义接口方法
在itcast-haoke-manage-dubbo-server-house-resources-dubbo-interface中:

在这里插入图片描述
1.1.2、实现接口
在itcast-haoke-manage-dubbo-server-house-resources-dubbo-service中:
在这里插入图片描述

1.1.3、业务Service实现
在这里插入图片描述
在这里插入图片描述

1.2、引入graphql-java依赖

加粗样式

1.3、编写haoke.graphqls文件
在resources目录下创建haoke.graphqls文件:
在这里插入图片描述

1.4、编写GraphQLController
在这里插入图片描述
在这里插入图片描述

1.5、编写GraphQLProvider
在GraphQLProvider中,需要与Spring整合,并且将GraphQL对象载入到Spring容器。

在这里插入图片描述

在这里插入图片描述

1.6、chrome安装GraphQL client插件
为chrome浏览器安装Altair GraphQL Client插件,方便对GraphQL接口进行测试。
插件安装地址:https://chrome.google.com/webstore/detail/altair-graphql-client/flnheeellpciglgpaodhkhmap eljopja?hl=zh-CN

在这里插入图片描述

安装完成后进行测试:

在这里插入图片描述
1.7、优化改进GraphQLProvider逻辑
问题:
在这里插入图片描述

以后每当增加查询时,都需要修改该方法,如果查询方法很多的话,那么这个方法将变得非常难以维护,所以需要 进改进。
改进思路:
1.编写接口
2.所有实现查询的逻辑都实现该接口
3.在GraphQLProvider中使用该接口的实现类进行处理
4.以后需要新增查询逻辑只需要增加实现类即可
1.7.1、编写MyDataFetcher接口

在这里插入图片描述
在这里插入图片描述

1.7.2、编写实现类HouseResourcesDataFetcher

在这里插入图片描述
1.7.3、修改GraphQLProvider逻辑

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

重启服务进行测试,测试结果和之前一致。
1.8、实现查询房源列表接口
1.8.1、修改haoke.graphqls文件

在这里插入图片描述
在这里插入图片描述

1.8.2、新增HouseResourcesListDataFetcher实现

在这里插入图片描述

1.8.3、测试
查询:

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2、搭建前台系统

好客租房项目是采用前后端分离开发模式,前端系统由前端团队进行开发,接下来我们需要整合前端,前端是使用
React+semantic-ui实现移动端web展示,后期可以将web打包成app进行发布。
前台系统效果:
在这里插入图片描述

2.1、搭建工程
第一步,将资料中的haoke-web.zip解压到项目目录,我的是:F:\code\itcast-haoke\itcast-haoke-web

在这里插入图片描述

第二步,导入到idea中
在这里插入图片描述
导入完成:
在这里插入图片描述

第三步,执行命令进行初始化和导入相关依赖包

输入地址:http://localhost:9000/

在这里插入图片描述

2.2、搭建api工程
前端团队在开发时,没有采用mock的方式,而是采用了使用node.js开发服务端的方式进行了demo化开发。 所以,我们也需要将该服务搭建起来,以便进行开发。
第一步,将资料中的haoke-web-api.zip解压到项目目录,我的是:F:\code\itcast-haoke\itcast-haoke-web- api

在这里插入图片描述

第二步,创建数据库
创建myhome数据库,并且执行资料中的myhome.sql脚本。
在这里插入图片描述
第三步,修改配置文件
在这里插入图片描述

修改成自己的mysql配置:
在这里插入图片描述
第四步,输入命令进行初始化和启动服务
在这里插入图片描述
在这里插入图片描述

2.3、登录系统进行测试
在users系统中查询到用户的信息如下:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

可以看到首页了。
2.4、前台系统实现分析
2.4.1、目录结构

在这里插入图片描述
2.4.2、加载数据流程
以首页为例,查看数据加载流程。
打开home.js文件可以看到,在组件加载完成后进行加载数据:
在这里插入图片描述

通过axios进行加载数据,在App.js中对axios进行了全局的配置:

在这里插入图片描述

在common.js中进行配置:
在这里插入图片描述

2.4.3、加载到数据后的处理
在这里插入图片描述
从代码中可以看出,通过Promise.all()方法获取到所有的异步处理的结果,并且将结果保存到this.state中。 然后,在render中进行渲染:
在这里插入图片描述

也就是说,我们只需要按照前端的请求以及响应数据的结构进行开发接口,即可完成前后端的整合。
3、首页轮播广告

在首页中,有轮播广告,需要实现在后台更新数据,前台将数据显示出来。效果:
在这里插入图片描述
3.1、查看数据结构
请求地址:
在这里插入图片描述

响应:
在这里插入图片描述

从数据结果中可以看出,数据只需要返回图片链接即可。
3.2、数据库表设计
在这里插入图片描述

构造数据:
在这里插入图片描述
在这里插入图片描述

3.3、实现查询接口(dubbo服务)
3.3.1、分析
首页的轮播广告,属于网站广告,不能只是开发一个功能而是要开发全站广告功能 实现独立的dubbo服务,便于后期的扩展和维护
多个dubbo服务,需要抽取公共的类、方法到common工程中
3.3.2、创建common工程
创建itcast-haoke-manage-dubbo-server-common工程,将BasePojo、BaseServiceImpl移动至该工程。
在这里插入图片描述

其他工程,如itcast-haoke-manage-dubbo-server-house-resources,需要依赖此工程,并且将自己工程中的相关类删除。
导入公用依赖:

在这里插入图片描述
在这里插入图片描述

3.3.3、创建工程
在这里插入图片描述
itcast-haoke-manage-dubbo-server-ad的pom.xml文件:

在这里插入图片描述
在这里插入图片描述

itcast-haoke-manage-dubbo-server-ad-service的pom.xml文件

在这里插入图片描述
3.3.4、编写pojo
itcast-haoke-manage-dubbo-server-ad-interface
在这里插入图片描述
在这里插入图片描述

3.3.5、定义dubbo接口
itcast-haoke-manage-dubbo-server-ad-interface
在这里插入图片描述

3.3.6、实现dubbo服务

itcast-haoke-manage-dubbo-server-ad-service
在这里插入图片描述

3.3.7、实现AdService
定义接口:
在这里插入图片描述

编写实现类:
在这里插入图片描述
在这里插入图片描述

3.3.8、创建AdMapper接口
itcast-haoke-manage-dubbo-server-ad-service
在这里插入图片描述

3.3.9、编写MybatisConfig
itcast-haoke-manage-dubbo-server-ad-service
在这里插入图片描述

3.3.10、编写application.properties配置文件
在这里插入图片描述

注意:端口号不要和其他的服务冲突了。
3.3.11、编写启动类
在这里插入图片描述

启动进行测试:
在这里插入图片描述

已经完成了注册。
3.4、实现api接口服务(RESTful接口)
3.4.1、引入依赖
在这里插入图片描述

3.4.2、编写Controller

在这里插入图片描述
在这里插入图片描述

3.4.3、编写Service
在这里插入图片描述

3.4.4、编写WebResult
WebResult用于和前端系统交互的数据结构定义。
在这里插入图片描述

3.4.5、测试

在这里插入图片描述
在这里插入图片描述

4.5、整合前端系统
修改home.js文件中请求地址:
在这里插入图片描述

进行测试:

在这里插入图片描述
发现,没有对CORS进行支持,所以需要在服务端进行配置:
在这里插入图片描述
添加@CrossOrigin注解的支持,表明该请求地址下都支持跨域。
在这里插入图片描述
在这里插入图片描述
可以看到,成功的获取到数据。
4、广告服务的GraphQL接口

4.1、数据结构优化
之前的数据结构是这样的:
在这里插入图片描述

结合轮播图组件的需求,只需要返回list数组,并且每个对象包含original字段即可。
优化后的结构为:
在这里插入图片描述
4.2、编写haoke.graphqls
在这里插入图片描述
在这里插入图片描述
4.3、根据GraphQL结构编写vo

在这里插入图片描述

4.4、编写IndexAdDataFetcher
编写IndexAdDataFetcher用于广告数据的查询。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

4.5、测试
测试:

在这里插入图片描述
在这里插入图片描述
4.6、GraphQL客户端

在这里插入图片描述

我们选用Apollo Client作为前端使用的GraphQL客户端使用。
参考文档:https://www.apollographql.com/docs/react/essentials/get-started.html
4.6.1、安装依赖
在这里插入图片描述

4.6.2、创建客户端
在这里插入图片描述

4.6.3、创建查询

在这里插入图片描述
在这里插入图片描述

4.6.4、测试
在这里插入图片描述
发现有2个问题:
1.GraphQL服务没有支持cross
2.Apollo Client发起的数据请求为POST请求,现在实现的GraphQL仅仅实现了GET请求处理
解决:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
成功获取到数据,页面效果也实现了:
在这里插入图片描述

4.6.5、查询的其他的用法
具体参见:https://www.apollographql.com/docs/react/essentials/queries.html

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值