GraphQL從入門到放棄

xeblog發表於2019-03-04

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

簡介

千言萬語匯成一句話:我的未來式由我做主。

GraphQL是一個用於 API 的查詢語言,是一個使用基於型別系統來執行查詢的服務端執行時(型別系統由你的資料定義)。GraphQL並沒有和任何特定資料庫或者儲存引擎繫結,而是依靠你現有的程式碼和資料支撐。(完美的一段Copy)

為什麼要用它?

  • 前端自己定義返回的資料及結構,降低前後端溝通成本
  • 無需編寫介面文件(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定義的是查詢相關的入口

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

剖析

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

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

User: 返回值型別,這裡返回的是一個java物件

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

scheme定義

resources目錄下建立一個{beanName}.graphqls的檔案 這個檔案是 query/mutation 具體的 scheme 定義欄位、型別

示例:user.graphqls

# 使用者資訊物件
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預設請求路徑: /graphql

視覺化除錯介面:/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/

相關文章