返回上乙個版本 GraphQL 概念與測試(上)

2021-10-14 20:28:17 字數 2141 閱讀 4811

graphql是近幾年突然興起的一種介面定義模式,那麼它有什麼特點?相對於傳統的介面定義又有什麼優勢呢?

官網:
例如對於抖音中使用者這個模型,在詳情頁、好友列表頁、好友推薦頁、下拉選擇列表中所需的字段屬性都不一樣,有的多有的少。

傳統的restful風格的介面要麼用乙個完整的介面返回全部資料(浪費資料),要麼拆分多個介面(增加前後端成本)。

然而graphql可以只通過乙個請求,解決以上問題。graphql通過引數控制返回字段,你需要什麼字段,就給你什麼字段。

如何定義自己的graphql介面

首先,你需要使用graphql的模型定義語言(sdl)來對你的模型進行定義,例如圖中右下角對maindomain的定義。

其次,你需要對入口進行定義,例如圖中右上角的query,這就是請求maindomain的介面表達。

然後,你就可以按照圖中左側的方式來進行graphql請求了;這個字串理論上是需要放在http post請求體中,對graphql的介面服務進行請求;而請求路徑一般就是/graphql,不再需要像restful那樣預設請求url。

如果想要使用引數化來傳遞入參,可以使用下圖中右側這樣的形式;可以看到最下面對 maindomainid 進行了引數化,而上方則使用$maindomainid進行了輸入。

當然,上面舉的例子是query方法,也就是查詢方法;也可以定義mutation方法,也就是對模型資料進行修改(增刪改)。

graphql的特性

1. 需要什麼,就給你什麼

請求中的graphql字串和返回字段一一對應;如果只需要id和name,就是需要只請求id和name,那麼就只返回id,name。

需要其他字段,就拓撲請求字串即可,如下圖。

2. 一次請求全部所需資料

如果把整個系統的資料看做乙個有向圖,那麼graphql查詢請求的做法,實際等於是:

3. 前後端解耦,相容新舊版本介面

當新版本加了乙個返回字段,傳給舊版本的前端可能會引發未知的問題。

在restful風格的介面中,只要後端返回了,前端就會收到。而graphql的介面,由前端來控制返回字段,於是:後端新版本增加的字段,舊版本的前端是可以完全無感知的。

額外地,如果這個字段本身就在原有的後端資料模型中,那後端完全不需要改碼,前端請求時增加字段即可;如果新版本前端展示時減少了乙個字段,前端請求時去掉該欄位即可,後端甚至不一定需要進行改動。

4. graphql is doc, and code

graphql本身支援直接啟動playground,可以直接當做頁面除錯入口,或者介面文件展示頁面;許多語言也支援由graphql模型定義直接生成基礎**。這樣,graphql的定義既可以快速形成介面文件,也可以快速形成**。

值得注意的是,最新版本的postman也已經開始graphql風格的請求了。

graphql vs restful

graphql更傾向於描述模型與模型之間的關係,建立他們之間的連線。

這樣帶來的好處有:

這樣帶來的壞處:

好的,關於graphql的基礎知識和特性就介紹到這裡了。

git 回到上乙個版本

本人常用下面的命令 git reset hard head 1 git reset head filename 把這個 file 移除暫緩區,其實就是相當於沒用 add這個 file git commit am 提交 提交暫緩區 git reset head 撤銷最近一次 commit git re...

安卓點選返回鍵返回上乙個Activity

實現功能 有兩個activity,乙個為mainactivity,乙個為zcactivity,mainactivity進入zcactivity後,在zcactivity中單擊返回鍵返回mainactivity.涉及到onkeydown 和intent。只要在zcactivity中重寫onkeydow...

Android 返回上乙個介面重新整理資料

有些介面需要返回上乙個介面刷刷新資料,再此做個記錄.首先startactivityforresult進行actvity進行跳轉,這是跳轉前的介面.通過 startactivityforresult 啟動 activityb intent intent newintent getactivity no...