GraphQL從入門到放棄

原文地址:https://xeblog.cn/articles/6前端

簡介

千言萬語匯成一句話:個人將來式由我作主。java

GraphQL是一個用於 API 的查詢語言,是一個使用基於類型系統來執行查詢的服務端運行時(類型系統由你的數據定義)。GraphQL並無和任何特定數據庫或者存儲引擎綁定,而是依靠你現有的代碼和數據支撐。(完美的一段Copy)spring

爲何要用它?

  • 前端本身定義返回的數據及結構,下降先後端溝通成本
  • 無需編寫接口文檔(GraphQL會根據schema自動生成API文檔)
  • schema拼接,能夠組合和鏈接多個GraphQL API,合併爲一個,減小請求次數

運用

基於SpringBoot的運用數據庫

依賴

<dependency>
	<groupId>com.graphql-java</groupId>
	<artifactId>graphql-spring-boot-starter</artifactId>
	<version>4.0.0</version>
</dependency>
<dependency>
	<groupId>com.graphql-java</groupId>
	<artifactId>graphql-java-tools</artifactId>
	<version>4.3.0</version>
</dependency>
<!-- 可視化調試工具 -->
<dependency>
    <groupId>com.graphql-java</groupId>
    <artifactId>graphiql-spring-boot-starter</artifactId>
    <version>4.0.0</version>
</dependency>
複製代碼

定義

服務入口定義

resources目錄下建立一個名爲root.graphqls的文件後端

# 查詢相關接口
type Query {
    # 經過id獲取用戶信息
    getUserById(id: Int!): User
    # 用戶信息列表
    listUser: [User]
}

# 變動相關接口
type Mutation {
    # 添加用戶信息
    saveUser(user: addUserInput!): Boolean
    # 刪除用戶信息
    deleteUser(id: Int!): Boolean
    # 更新用戶信息
    updateUser(user: updateUserInput!): Boolean
}
複製代碼

Query定義的是查詢相關的入口bash

Mutation定義的是增刪改相關的入口spring-boot

剖析

geUserById: 與java類中的方法名一致

id: 方法參數,Int(I大寫) 表示是一個int類型,"!"表示非空

User: 返回值類型,這裏返回的是一個java對象

[type]: 表示是一個列表
複製代碼

scheme定義

resources目錄下建立一個{beanName}.graphqls的文件 這個文件是 query/mutation 具體的 scheme 定義字段、類型工具

示例:user.graphqlsui

# 用戶信息對象
type User {
    # 編號
    id: Int!
    # 用戶名
    username: String!
    # 密碼
    password: String!
    # 年齡
    age: Int
}

# 添加用戶信息輸入參數
input addUserInput {
    id: Int!
    username: String!
    password: String!
    age: Int
}

# 更新用戶信息輸入參數
input updateUserInput {
    id: Int!
    username: String!
    password: String!
    age: Int
}
複製代碼

實現入口

實體類

image

Query相關Java類實現

  • 實現 GraphQLQueryResolver 接口
  • 添加 @Component 註解
  • 方法名、參數類型、返回值與root.graphqls內的定義一致

image

Mutation相關Java類實現

  • 實現 GraphQLMutationResolver 接口
  • 添加 @Component 註解
  • 方法名、參數類型、返回值與root.graphqls內的定義一致

image

接口調試

graphql默認請求路徑: /graphqlspa

可視化調試界面:/graphiql

使用GraphiQL調試

訪問地址:http://localhost:8080/graphiql

界面是長這個樣子的

image

Query

查詢單條數據

image

查詢全部數據

image

組合查詢

相同名稱的接口組合爲一個接口調用,須要取一個別名用於區分它們

定義別名 相似這樣的格式

別名: 接口
複製代碼

image

Mutation

添加

image

修改

image

刪除

image

Console

image

使用Postman調試

Query

查詢單條數據

image

查詢全部數據

image

組合查詢

image

Mutation

添加

image

修改

image

刪除

image

參考

graphql.cn/learn/

相關文章
相關標籤/搜索