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

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

新聞中心

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

概述

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

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

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

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

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

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

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

場景模擬

考慮下面的場景:

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

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

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

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

開發(fā)實戰(zhàn)

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

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

通過IDEA創(chuàng)建一個SpringBoot項目,并引入對應(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實體類

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.  

定義了兩個JAVA實體:Post,User。

編寫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, 

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

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

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


分享標(biāo)題:SpringBoot開發(fā)秘籍之集成GraphqlQuery
網(wǎng)頁URL:http://www.5511xx.com/article/cciecgi.html