干掉 RESTful API !
閱讀本文大概需要 10?分鐘。
來自:toutiao.com/i6833818331884028419


濫用REST接口,導(dǎo)致大量相似度很高(具有重復(fù)性)的API越來越冗余。 對于前端而言:REST API粒度較粗,難以一次性符合前端的數(shù)據(jù)要求,前端需要分多次請求接口數(shù)據(jù)。增加了前端人員的工作量。 對于后端而言:前端需要的數(shù)據(jù)往往在不同的地方具有相似性,但卻又不同,比如針對同樣的用戶信息,有的地方只需要用戶簡要信息(比如頭像、昵稱),有些地方需要詳細的信息,這就需要開發(fā)不同的接口來滿足這些需求。當這樣的相似但又不同的地方多的時候,就需要開發(fā)更多的接口來滿足前端的需要。增加了后端開發(fā)人員的工作量和重復(fù)度。



GraphQL簡介
GraphQL是一種新的API標準,它提供了一種比REST更有效、更強大和更靈活的替代方案。 它是由Facebook開發(fā)并開源的,現(xiàn)在由來自世界各地的公司和個人組成的大型社區(qū)維護。 GraphQL本質(zhì)上是一種基于api的查詢語言,現(xiàn)在大多數(shù)應(yīng)用程序都需要從服務(wù)器中獲取數(shù)據(jù),這些數(shù)據(jù)存儲可能存儲在數(shù)據(jù)庫中,API的職責(zé)是提供與應(yīng)用程序需求相匹配的存儲數(shù)據(jù)的接口。 它是數(shù)據(jù)庫無關(guān)的,而且可以在使用API的任何環(huán)境中有效使用,我們可以理解為GraphQL是基于API之上的一層封裝,目的是為了更好,更靈活的適用于業(yè)務(wù)的需求變化。


GraphQL 對比 REST API 有什么好處?


Endpoints對比

GraphQL 思考模式

GraphQL獲取數(shù)據(jù)三步驟

GraphQL執(zhí)行邏輯
使用了GraphQL就要完全拋棄REST了嗎? GraphQL需要直接對接數(shù)據(jù)庫嗎? 使用GraphQL需要對現(xiàn)有的后端服務(wù)進行大刀闊斧的修改嗎?

GraphQL應(yīng)用的基本架構(gòu)

GraphQL特點總結(jié)
聲明式數(shù)據(jù)獲取(可以對API進行查詢): 聲明式的數(shù)據(jù)查詢帶來了接口的精確返回,服務(wù)器會按數(shù)據(jù)查詢的格式返回同樣結(jié)構(gòu)的 JSON 數(shù)據(jù)、真正照顧了客戶端的靈活性。 一個微服務(wù)僅暴露一個 GraphQL 層:一個微服務(wù)只需暴露一個GraphQL endpoint,客戶端請求相應(yīng)數(shù)據(jù)只通過該端點按需獲取,不需要再額外定義其他接口。 傳輸層無關(guān)、數(shù)據(jù)庫技術(shù)無關(guān):帶來了更靈活的技術(shù)棧選擇,比如我們可以選擇對移動設(shè)備友好的協(xié)議,將網(wǎng)絡(luò)傳輸數(shù)據(jù)量最小化,實現(xiàn)在網(wǎng)絡(luò)協(xié)議層面優(yōu)化應(yīng)用。

GraphQL支持的數(shù)據(jù)操作
查詢(Query):獲取數(shù)據(jù)的基本查詢。 變更(Mutation):支持對數(shù)據(jù)的增刪改等操作。 訂閱(Subscription):用于監(jiān)聽數(shù)據(jù)變動、并靠websocket等協(xié)議推送變動的消息給對方。

GraphQL的核心概念:圖表模式(Schema)
對于數(shù)據(jù)模型的抽象是通過類型(Type)來描述的,每一個類型有若干字段(Field)組成,每個字段又分別指向某個類型(Type)。這很像Java、C#中的類(Class)。 GraphQL的Type簡單可以分為兩種,一種叫做Scalar Type(標量類型),另一種叫做Object Type(對象類型)。
標量類型(Scalar Type)
String Int Float Boolean Enum ID

對象類型(Object Type)

類型修飾符(Type Modifier)
列表:[Type] 非空:Type! 列表非空:[Type]! 非空列表,列表內(nèi)容類型非空:[Type!]!



其他類型










客戶端實現(xiàn)
推薦閱讀:
IDEA 上位?不!Eclipse Theia 1.0 發(fā)布!
微服務(wù)架構(gòu):注冊中心 ZooKeeper、Eureka、Consul 、Nacos 對比!
微信掃描二維碼,關(guān)注我的公眾號
朕已閱?
評論
圖片
表情

