日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Springboot整合GraphQL使你的API更易理解可讀性更強(qiáng)

來(lái)源: 責(zé)編: 時(shí)間:2023-08-09 23:03:53 352觀看
導(dǎo)讀環(huán)境:Springboot3.0.9概述一種用于 API 的查詢(xún)語(yǔ)言GraphQL 既是一種用于 API 的查詢(xún)語(yǔ)言也是一個(gè)滿足你數(shù)據(jù)查詢(xún)的運(yùn)行時(shí)。GraphQL 對(duì)你的 API 中的數(shù)據(jù)提供了一套易于理解的完整描述,使得客戶(hù)端能夠準(zhǔn)確地獲得它需要的

環(huán)境:Springboot3.0.9rpX28資訊網(wǎng)——每日最新資訊28at.com

概述

  • 一種用于 API 的查詢(xún)語(yǔ)言

GraphQL 既是一種用于 API 的查詢(xún)語(yǔ)言也是一個(gè)滿足你數(shù)據(jù)查詢(xún)的運(yùn)行時(shí)。GraphQL 對(duì)你的 API 中的數(shù)據(jù)提供了一套易于理解的完整描述,使得客戶(hù)端能夠準(zhǔn)確地獲得它需要的數(shù)據(jù),而且沒(méi)有任何冗余,也讓 API 更容易地隨著時(shí)間推移而演進(jìn),還能用于構(gòu)建強(qiáng)大的開(kāi)發(fā)者工具。rpX28資訊網(wǎng)——每日最新資訊28at.com

  • 請(qǐng)求你所要的數(shù)據(jù)

向你的 API 發(fā)出一個(gè) GraphQL 請(qǐng)求就能準(zhǔn)確獲得你想要的數(shù)據(jù),不多不少。GraphQL 查詢(xún)總是返回可預(yù)測(cè)的結(jié)果。使用 GraphQL 的應(yīng)用可以工作得又快又穩(wěn),因?yàn)榭刂茢?shù)據(jù)的是應(yīng)用,而不是服務(wù)器。rpX28資訊網(wǎng)——每日最新資訊28at.com

  • 獲取多個(gè)資源

GraphQL 查詢(xún)不僅能夠獲得資源的屬性,還能沿著資源間引用進(jìn)一步查詢(xún)。典型的 REST API 請(qǐng)求多個(gè)資源時(shí)得載入多個(gè) URL,而 GraphQL 可以通過(guò)一次請(qǐng)求就獲取你應(yīng)用所需的所有數(shù)據(jù)。這樣一來(lái),即使是比較慢的移動(dòng)網(wǎng)絡(luò)連接下,使用 GraphQL 的應(yīng)用也能表現(xiàn)得足夠迅速。rpX28資訊網(wǎng)——每日最新資訊28at.com

  • 描述所有的可能

GraphQL API 基于類(lèi)型和字段的方式進(jìn)行組織,而非入口端點(diǎn)。你可以通過(guò)一個(gè)單一入口端點(diǎn)得到你所有的數(shù)據(jù)能力。GraphQL 使用類(lèi)型來(lái)保證應(yīng)用只請(qǐng)求可能的數(shù)據(jù),還提供了清晰的輔助性錯(cuò)誤信息。應(yīng)用可以使用類(lèi)型,而避免編寫(xiě)手動(dòng)解析代碼。rpX28資訊網(wǎng)——每日最新資訊28at.com

有關(guān)GraphQL的語(yǔ)法相關(guān)知識(shí),請(qǐng)參考rpX28資訊網(wǎng)——每日最新資訊28at.com

https://graphql.org/中文rpX28資訊網(wǎng)——每日最新資訊28at.com

https://graphql.cn/rpX28資訊網(wǎng)——每日最新資訊28at.com

接下來(lái)將以一個(gè)完整的示例演示GraphQL的使用。rpX28資訊網(wǎng)——每日最新資訊28at.com

環(huán)境配置

  • 引入依賴(lài)
<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開(kāi)啟后,將會(huì)提供一個(gè)UI界面供我們快速查詢(xún)測(cè)試使用rpX28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rpX28資訊網(wǎng)——每日最新資訊28at.com

做好以上配置后,接下來(lái)就是建立2張表t_book和t_author。rpX28資訊網(wǎng)——每日最新資訊28at.com

實(shí)體定義

BookrpX28資訊網(wǎng)——每日最新資訊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<>();}

AuthorrpX28資訊網(wǎng)——每日最新資訊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定義

BookRepositoryrpX28資訊網(wǎng)——每日最新資訊28at.com

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

AuthorRepositoryrpX28資訊網(wǎng)——每日最新資訊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 ;  }  }

以上是基本的數(shù)據(jù)庫(kù)操作,很容易理解。接下來(lái)就是定義GraphQL SchemarpX28資訊網(wǎng)——每日最新資訊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}

有關(guān)graphql相關(guān)語(yǔ)法請(qǐng)參考上面提到的網(wǎng)址。接下來(lái)是定義訪問(wèn)接口rpX28資訊網(wǎng)——每日最新資訊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);  }}

訪問(wèn)測(cè)試

只需訪問(wèn)統(tǒng)一的入口即可:rpX28資訊網(wǎng)——每日最新資訊28at.com

#該訪問(wèn)路徑可以在配置文件中修改rpX28資訊網(wǎng)——每日最新資訊28at.com

http://localhost:8080/graphqlrpX28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rpX28資訊網(wǎng)——每日最新資訊28at.com


rpX28資訊網(wǎng)——每日最新資訊28at.com

這里是訪問(wèn)的完整的信息,我們可以在請(qǐng)求的query中設(shè)置需要訪問(wèn)的字段,如下:rpX28資訊網(wǎng)——每日最新資訊28at.com

圖片圖片rpX28資訊網(wǎng)——每日最新資訊28at.com

只訪問(wèn)book信息rpX28資訊網(wǎng)——每日最新資訊28at.com

只訪問(wèn)部分字段信息只訪問(wèn)部分字段信息rpX28資訊網(wǎng)——每日最新資訊28at.com

你需要訪問(wèn)那些字段,是完全由客戶(hù)端定義的。rpX28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5198-0.htmlSpringboot整合GraphQL使你的API更易理解可讀性更強(qiáng)

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 三言?xún)烧Z(yǔ)說(shuō)透webpack對(duì)vue的編譯

下一篇: 電腦技巧:Ditto剪切板增強(qiáng)工具介紹(附下載)

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
  • 直屏旗艦來(lái)了 iQOO 12和K70 Pro同臺(tái)競(jìng)技

    旗艦機(jī)基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛(ài)好者在苦等一款直屏旗艦,這次,你們等到了。據(jù)博主數(shù)碼閑聊站帶來(lái)的最新爆料稱(chēng),Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 容量越大越不壞?24萬(wàn)塊硬盤(pán)故障率報(bào)告公布 這些產(chǎn)品零故障

    8月5日消息,云存儲(chǔ)服務(wù)商Backblaze發(fā)布了最新的硬盤(pán)故障率報(bào)告,年故障率有所上升。Backblaze發(fā)布的硬盤(pán)季度統(tǒng)計(jì)數(shù)據(jù),其中包括故障率等重要方面。這些結(jié)
  • 印度登月最關(guān)鍵一步!月船三號(hào)今晚進(jìn)入環(huán)月軌道

    8月5日消息,據(jù)印度官方消息,月船三號(hào)將于北京時(shí)間今晚21時(shí)30分左右開(kāi)始近月制動(dòng)進(jìn)入環(huán)月軌道。這是該探測(cè)器能夠成功的最關(guān)鍵步驟之一,如果成功將開(kāi)始圍
  • 在線圖片編輯器,支持PSD解析、AI摳圖等

    自從我上次分享一個(gè)人開(kāi)發(fā)仿造稿定設(shè)計(jì)的圖片編輯器到現(xiàn)在,不知不覺(jué)已過(guò)去一年時(shí)間了,期間我經(jīng)歷了裁員失業(yè)、面試找工作碰壁,寒冬下一直沒(méi)有很好地履行計(jì)劃.....這些就放在日
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級(jí)

    來(lái)源 | 伯虎財(cái)經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報(bào)道,拼多多旗下跨境電商平臺(tái)Temu正對(duì)競(jìng)爭(zhēng)對(duì)手SHEIN提起新訴訟,訴狀稱(chēng)Shein&ldquo;利用市場(chǎng)支配力量強(qiáng)迫服裝廠商與之簽訂獨(dú)家
  • 電視息屏休眠仍有網(wǎng)絡(luò)上傳 愛(ài)奇藝被質(zhì)疑“薅消費(fèi)者羊毛”

    記者丨寧曉敏 見(jiàn)習(xí)生丨汗青出品丨鰲頭財(cái)經(jīng)(theSankei) 前不久,愛(ài)奇藝發(fā)布了一份亮眼的一季報(bào),不僅營(yíng)收和會(huì)員營(yíng)收創(chuàng)造歷史最佳表現(xiàn),其運(yùn)營(yíng)利潤(rùn)也連續(xù)6個(gè)月實(shí)現(xiàn)增長(zhǎng)。自去年年初
  • 自律,給不了Keep自由!

    來(lái)源 | 互聯(lián)網(wǎng)品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶(hù)自由暫時(shí)不好說(shuō),但大概率不能給Keep自由。近日,全球最大的在線健身平臺(tái)Keep正式登陸港交所,努力
  • 國(guó)行版三星Galaxy Z Fold5/Z Flip5發(fā)布 售價(jià)7499元起

    2023年8月3日,三星電子舉行Galaxy新品中國(guó)發(fā)布會(huì),正式在國(guó)內(nèi)推出了新一代折疊屏智能手機(jī)三星Galaxy Z Fold5與Galaxy Z Flip5,以及三星Galaxy Tab S9
  • 回歸OPPO兩年,一加贏了銷(xiāo)量,輸了品牌

    成為OPPO旗下主打性能的先鋒品牌后,一加屢創(chuàng)佳績(jī)。今年618期間,一加手機(jī)全渠道銷(xiāo)量同比增長(zhǎng)362%,憑借一加 11、一加 Ace 2、一加 Ace 2V三款爆品,一加
Top 主站蜘蛛池模板: 万州区| 阿勒泰市| 横峰县| 诏安县| 岳西县| 巴中市| 浠水县| 黎川县| 临泉县| 清新县| 东安县| 灵璧县| 辉县市| 泽州县| 海盐县| 广南县| 永宁县| 太湖县| 蚌埠市| 灵川县| 呈贡县| 永寿县| 神农架林区| 黄梅县| 敦煌市| 环江| 五台县| 辽宁省| 长阳| 西贡区| 曲水县| 景洪市| 益阳市| 蓬莱市| 临沭县| 尉犁县| 抚州市| 红原县| 东光县| 罗江县| 临汾市|