日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
SpringBoot開(kāi)發(fā)秘籍之集成GraphqlQuery

概述

REST作為一種現(xiàn)代網(wǎng)絡(luò)應(yīng)用非常流行的軟件架構(gòu)風(fēng)格受到廣大WEB開(kāi)發(fā)者的喜愛(ài),在目前軟件架構(gòu)設(shè)計(jì)模式中隨處可見(jiàn)REST的身影,但是隨著REST的流行與發(fā)展,它的一個(gè)最大的缺點(diǎn)開(kāi)始暴露出來(lái):

創(chuàng)新互聯(lián)從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元盧氏做網(wǎng)站,已為上家服務(wù),為盧氏各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108

在很多時(shí)候客戶端需要的數(shù)據(jù)往往在不同的地方具有相似性,但卻又不盡相同。

如同樣的用戶信息,在有的場(chǎng)景下前端只需要用戶的簡(jiǎn)要信息(名稱、頭像),在其他場(chǎng)景下又需要用戶的詳細(xì)信息。當(dāng)這樣的相似但又不同的地方多的時(shí)候,就需要開(kāi)發(fā)更多的接口來(lái)滿足前端的需要。

隨著這樣的場(chǎng)景越來(lái)越多,接口越來(lái)越多,文檔越來(lái)越臃腫,前后端溝通成本呈指數(shù)增加。

基于上面的場(chǎng)景,我們迫切需要有一種解決方案或框架,可以使得在使用同一個(gè)領(lǐng)域模型(DO、DTO)的數(shù)據(jù)接口時(shí)可以由前端指定需要的接口字段,而后端根據(jù)前端的需求自動(dòng)適配并返回對(duì)應(yīng)的字段。

這就是我們今天的主角GraphQL。

場(chǎng)景模擬

考慮下面的場(chǎng)景:

用戶 與 文章 是一對(duì)多的關(guān)系,一個(gè)用戶可以發(fā)表多篇文章,同時(shí)又可以根據(jù)文章找到對(duì)應(yīng)的作者。

我們需要構(gòu)建以下幾個(gè)Graphql查詢:

  • 根據(jù)用戶ID獲取用戶詳情,并獲取此用戶發(fā)表的所有文章
  • 根據(jù)文章ID獲取文章詳情,并獲取文章作者的信息

當(dāng)然項(xiàng)目是基于SpringBoot開(kāi)發(fā)的。

開(kāi)發(fā)實(shí)戰(zhàn)

在正式開(kāi)發(fā)之前我推薦你在IDEA上安裝一下 JS GraphQL插件,這個(gè)插件方便我們編寫(xiě)Schema,語(yǔ)法糾錯(cuò),代碼高亮等等。。。

創(chuàng)建一個(gè)SpringBoot項(xiàng)目

通過(guò)IDEA創(chuàng)建一個(gè)SpringBoot項(xiàng)目,并引入對(duì)應(yīng)的jar

 
 
 
 
  1.  
  2.   
  3.   org.springframework.boot 
  4.   spring-boot-starter 
  5.   
  6.  
  7.   
  8.   org.springframework.boot 
  9.   spring-boot-starter-web 
  10.   
  11.  
  12.   
  13.   
  14.   com.graphql-java 
  15.   graphql-spring-boot-starter 
  16.   5.0.2 
  17.   
  18.   
  19.   com.graphql-java 
  20.   graphql-java-tools 
  21.   5.2.4 
  22.   
  23.   
  24.  
  25.   
  26.   org.projectlombok 
  27.   lombok 
  28.   
  29.  

這里主要需要引入 graphql-spring-boot-starter和 graphql-java-tools。

建立Java實(shí)體類

User

 
 
 
 
  1. @Data 
  2. public class User { 
  3.     private int userId; 
  4.     private String userName; 
  5.     private String realName; 
  6.     private String email; 
  7.     private List posts; 
  8.  
  9.     public User() { 
  10.     } 
  11.  
  12.     public User(int userId, String userName, String realName, String email) { 
  13.         this.userId = userId; 
  14.         this.userName = userName; 
  15.         this.realName = realName; 
  16.         this.email = email; 
  17.     } 

Post

 
 
 
 
  1. @Data 
  2. public class Post { 
  3.     private int postId; 
  4.     private String title ; 
  5.     private String text; 
  6.     private String  category; 
  7.     private User user; 
  8.  
  9.     public Post() { 
  10.  
  11.     } 
  12.  
  13.     public Post(int postId, String title, String text, String category) { 
  14.         this.postId = postId; 
  15.         this.title = title; 
  16.         this.text = text; 
  17.         this.category = category; 
  18.     } 
  19.  

定義了兩個(gè)JAVA實(shí)體:Post,User。

編寫(xiě)Schema文件

在resources/schema目錄下創(chuàng)建GraphQL Schema文件

 
 
 
 
  1. schema { 
  2.     query: Query, 
  3.  
  4. type Query { 
  5.     # 獲取具體的用戶 
  6.     getUserById(id:Int) : User 
  7.     # 獲取具體的博客 
  8.     getPostById(id:Int) : Post 
  9.  
  10. type User { 
  11.     userId : ID!, 
  12.     userName : String, 
  13.     realName : String, 
  14.     email : String, 
  15.     posts : [Post], 
  16.  
  17. type Post { 
  18.     postId : ID!, 
  19.     title : String!, 
  20.     text : String, 
  21.     category: String 
  22.     user: User, 

如上,我們通過(guò) type關(guān)鍵字定義了兩個(gè)對(duì)象,User與Post。在屬性后面添加!表明這是一個(gè)非空屬性,通過(guò)[Post]表明這是一個(gè)Post集合,類似于Java對(duì)象中List。

通過(guò)Query關(guān)鍵字定義了兩個(gè)查詢對(duì)象,getUserById,getPostById,分別返回User對(duì)象和Post對(duì)象。

關(guān)于schema的語(yǔ)法大家可以


新聞標(biāo)題:SpringBoot開(kāi)發(fā)秘籍之集成GraphqlQuery
鏈接地址:http://www.5511xx.com/article/cciecgi.html