色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

GraphQL有哪些優(yōu)勢(shì)

Linux愛(ài)好者 ? 來(lái)源:Linux愛(ài)好者 ? 作者:師兄睿談 ? 2021-02-02 14:09 ? 次閱讀

背景

REST作為一種現(xiàn)代網(wǎng)絡(luò)應(yīng)用非常流行的軟件架構(gòu)風(fēng)格,自從Roy Fielding博士在2000年他的博士論文中提出來(lái)到現(xiàn)在已經(jīng)有了20年的歷史。它的簡(jiǎn)單易用性,可擴(kuò)展性,伸縮性受到廣大Web開(kāi)發(fā)者的喜愛(ài)。

REST 的 API 配合JSON格式的數(shù)據(jù)交換,使得前后端分離、數(shù)據(jù)交互變得非常容易,而且也已經(jīng)成為了目前Web領(lǐng)域最受歡迎的軟件架構(gòu)設(shè)計(jì)模式。

但隨著REST API的流行和發(fā)展,它的缺點(diǎn)也暴露了出來(lái):

濫用REST接口,導(dǎo)致大量相似度很高(具有重復(fù)性)的API越來(lái)越冗余。

對(duì)于前端而言:REST API粒度較粗,難以一次性符合前端的數(shù)據(jù)要求,前端需要分多次請(qǐng)求接口數(shù)據(jù)。增加了前端人員的工作量。

對(duì)于后端而言:前端需要的數(shù)據(jù)往往在不同的地方具有相似性,但卻又不同,比如針對(duì)同樣的用戶信息,有的地方只需要用戶簡(jiǎn)要信息(比如頭像、昵稱),有些地方需要詳細(xì)的信息,這就需要開(kāi)發(fā)不同的接口來(lái)滿足這些需求。當(dāng)這樣的相似但又不同的地方多的時(shí)候,就需要開(kāi)發(fā)更多的接口來(lái)滿足前端的需要。增加了后端開(kāi)發(fā)人員的工作量和重復(fù)度。

那我們來(lái)分析一下,當(dāng)前端需求變化,涉及到改動(dòng)舊需求時(shí),會(huì)有以下這些情況:

「做加法:」

產(chǎn)品需求增加,頁(yè)面需要增加功能,數(shù)據(jù)也就相應(yīng)的要增加顯示,那么REST接口也需要做增加,這種無(wú)可厚非。

「做減法:」

產(chǎn)品需求減少,頁(yè)面需要減少功能,或者減少某些信息顯示,那么數(shù)據(jù)就要做減法。

一種通常懶惰的做法是,前端不與后端溝通,僅在前端對(duì)數(shù)據(jù)選擇性顯示。

因?yàn)楹蠖私涌谀軌驖M足數(shù)據(jù)需要,僅僅是在做顯示的時(shí)候?qū)?shù)據(jù)進(jìn)行了選擇性顯示,但接口的數(shù)據(jù)是存在冗余的,這種情況一個(gè)是存在數(shù)據(jù)泄露風(fēng)險(xiǎn),另外就是數(shù)據(jù)量過(guò)大時(shí)造成網(wǎng)絡(luò)流量過(guò)大,頁(yè)面加載緩慢,用戶流量費(fèi)白白消耗,用戶體驗(yàn)就會(huì)下降。

另外一種做法就是告知后端,要么開(kāi)發(fā)新的接口,要么,修改舊接口,刪掉冗余字段。

但一般來(lái)說(shuō),開(kāi)發(fā)新接口往往是后端開(kāi)發(fā)人員會(huì)選擇的方案,因?yàn)檫@個(gè)方案對(duì)現(xiàn)有系統(tǒng)的影響最低,不會(huì)有額外的風(fēng)險(xiǎn)。

修改舊接口刪除冗余數(shù)據(jù)的方案往往開(kāi)發(fā)人員不會(huì)選擇,這是為什么呢?

這就涉及到了系統(tǒng)的穩(wěn)定性問(wèn)題了,舊接口往往不止是一個(gè)地方在用,很有可能很多頁(yè)面、設(shè)置不同客戶端、不同服務(wù)都調(diào)用了這個(gè)接口獲取數(shù)據(jù),不做詳細(xì)的調(diào)查,是不可能知道到底舊接口被調(diào)用了多少次,一旦改動(dòng)舊接口,涉及范圍可能非常大,往往會(huì)引起其他地方出現(xiàn)崩潰。改動(dòng)舊接口成本太高,所以往往不會(huì)被采取。

「同時(shí)做加減法:」

既有加法,又有減法,其實(shí)這種就跟新需求沒(méi)啥區(qū)別,前端需要重做頁(yè)面,后端需要新寫接口滿足前端需要,但是舊接口還是不能輕舉妄動(dòng)(除非確定只有這一處調(diào)用才可以刪除)。

往往這個(gè)時(shí)候,其實(shí)用到的數(shù)據(jù)大多都是來(lái)自于同一個(gè)DO或者DTO,不過(guò)是在REST接口組裝數(shù)據(jù)時(shí),用不同的VO來(lái)封裝不同字段,或者,使用同樣的VO,組裝數(shù)據(jù)時(shí)做刪減。

看到這些問(wèn)題是不是覺(jué)得令人頭大?

所以需求頻繁改動(dòng)是萬(wàn)惡之源,當(dāng)產(chǎn)品小哥哥改動(dòng)需求時(shí),程序員小哥哥可能正提著鐵鍬趕來(lái)......

那么有沒(méi)有一種方案或者框架,可以使得在用到同一個(gè)領(lǐng)域模型(DO或者DTO)的數(shù)據(jù)時(shí),前端對(duì)于這個(gè)模型的數(shù)據(jù)字段需求的改動(dòng),后端可以根據(jù)前端的改動(dòng)和需要,自動(dòng)適配,自動(dòng)組裝需要的字段,返回給前端呢?如果能這樣做的話,那么后端程序猿小哥可能要開(kāi)心死了,前端妹子也不用那么苦口婆心地勸說(shuō)后端小哥哥了。

所以GraphQL隆重出世了!那么問(wèn)題來(lái)了!

Part 1 What is GraphQL

GraphQL簡(jiǎn)介

GraphQL是一種新的API標(biāo)準(zhǔn),它提供了一種比REST更有效、更強(qiáng)大和更靈活的替代方案。

它是由Facebook開(kāi)發(fā)并開(kāi)源的,現(xiàn)在由來(lái)自世界各地的公司和個(gè)人組成的大型社區(qū)維護(hù)。

GraphQL本質(zhì)上是一種基于api的查詢語(yǔ)言,現(xiàn)在大多數(shù)應(yīng)用程序都需要從服務(wù)器中獲取數(shù)據(jù),這些數(shù)據(jù)存儲(chǔ)可能存儲(chǔ)在數(shù)據(jù)庫(kù)中,API的職責(zé)是提供與應(yīng)用程序需求相匹配的存儲(chǔ)數(shù)據(jù)的接口。

它是數(shù)據(jù)庫(kù)無(wú)關(guān)的,而且可以在使用API的任何環(huán)境中有效使用,我們可以理解為GraphQL是基于API之上的一層封裝,目的是為了更好,更靈活的適用于業(yè)務(wù)的需求變化。

簡(jiǎn)單的來(lái)說(shuō),它

3f058f70-5f10-11eb-8b86-12bb97331649.png

它的工作模式是這樣子的:

3f7c7f86-5f10-11eb-8b86-12bb97331649.png

GraphQL 對(duì)比 REST API 有什么好處?

REST API 的接口靈活性差、接口操作流程繁瑣,GraphQL 的聲明式數(shù)據(jù)獲取,使得接口數(shù)據(jù)精確返回,數(shù)據(jù)查詢流程簡(jiǎn)潔,照顧了客戶端的靈活性。

客戶端拓展功能時(shí)要不斷編寫新接口(依賴于服務(wù)端),GraphQL 中一個(gè)服務(wù)僅暴露一個(gè) GraphQL 層,消除了服務(wù)器對(duì)數(shù)據(jù)格式的硬性規(guī)定,客戶端按需請(qǐng)求數(shù)據(jù),可進(jìn)行單獨(dú)維護(hù)和改進(jìn)。

REST API 基于HTTP協(xié)議,不能靈活選擇網(wǎng)絡(luò)協(xié)議,而傳輸層無(wú)關(guān)、數(shù)據(jù)庫(kù)技術(shù)無(wú)關(guān)使得 GraphQL 有更加靈活的技術(shù)棧選擇,能夠?qū)崿F(xiàn)在網(wǎng)絡(luò)協(xié)議層面優(yōu)化應(yīng)用。

舉個(gè)經(jīng)典的例子:前端向后端請(qǐng)求一個(gè)book對(duì)象的數(shù)據(jù)及其作者信息。

我用動(dòng)圖來(lái)分別演示下REST和GraphQL是怎么樣的一個(gè)過(guò)程。

先看REST API的做法:

404e2b08-5f10-11eb-8b86-12bb97331649.gif

REST API獲取數(shù)據(jù)

再來(lái)看GraphQL是怎么做的:

40adfb00-5f10-11eb-8b86-12bb97331649.gif

GraphQL獲取數(shù)據(jù)

可以看出其中的區(qū)別:

與REST多個(gè)endpoint不同,每一個(gè)的 GraphQL 服務(wù)其實(shí)對(duì)外只提供了一個(gè)用于調(diào)用內(nèi)部接口的端點(diǎn),所有的請(qǐng)求都訪問(wèn)這個(gè)暴露出來(lái)的唯一端點(diǎn)。

4129ee54-5f10-11eb-8b86-12bb97331649.png

Endpoints對(duì)比

41fba228-5f10-11eb-8b86-12bb97331649.png

REST API's Endpoints

GraphQL 實(shí)際上將多個(gè) HTTP 請(qǐng)求聚合成了一個(gè)請(qǐng)求,將多個(gè) restful 請(qǐng)求的資源變成了一個(gè)從根資源 POST 訪問(wèn)其他資源的 Comment 和 Author 的圖,多個(gè)請(qǐng)求變成了一個(gè)請(qǐng)求的不同字段,從原有的分散式請(qǐng)求變成了集中式的請(qǐng)求,因此GraphQL又可以被看成是圖數(shù)據(jù)庫(kù)的形式。

42d8bee2-5f10-11eb-8b86-12bb97331649.png

圖數(shù)據(jù)庫(kù)模式的數(shù)據(jù)查詢

那我們已經(jīng)能看到GraphQL的先進(jìn)性,接下來(lái)看看它是怎么做的。

GraphQL 思考模式

使用GraphQL接口設(shè)計(jì)獲取數(shù)據(jù)需要三步:

440cdde8-5f10-11eb-8b86-12bb97331649.gif

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

首先要設(shè)計(jì)數(shù)據(jù)模型,用來(lái)描述數(shù)據(jù)對(duì)象,它的作用可以看做是VO,用于告知GraphQL如何來(lái)描述定義的數(shù)據(jù),為下一步查詢返回做準(zhǔn)備;

前端使用模式查詢語(yǔ)言(Schema)來(lái)描述需要請(qǐng)求的數(shù)據(jù)對(duì)象類型和具體需要的字段(稱之為聲明式數(shù)據(jù)獲?。?/p>

后端GraphQL通過(guò)前端傳過(guò)來(lái)的請(qǐng)求,根據(jù)需要,自動(dòng)組裝數(shù)據(jù)字段,返回給前端。

GraphQL的這種思考模式是不是完美解決了之前遇到的問(wèn)題呢?!

總結(jié)它的好處:

在它的設(shè)計(jì)思想中,GraphQL 以圖的形式將整個(gè) Web 服務(wù)中的資源展示出來(lái),客戶端可以按照其需求自行調(diào)用,類似添加字段的需求其實(shí)就不再需要后端多次修改了。

創(chuàng)建GraphQL服務(wù)器的最終目標(biāo)是:

允許查詢通過(guò)圖和節(jié)點(diǎn)的形式去獲取數(shù)據(jù)。

44fa1d1a-5f10-11eb-8b86-12bb97331649.png

是什么讓我放棄了restful api?了解清楚后我全面擁抱GraphQL

GraphQL執(zhí)行邏輯

有人會(huì)問(wèn):

使用了GraphQL就要完全拋棄REST了嗎?

GraphQL需要直接對(duì)接數(shù)據(jù)庫(kù)嗎?

使用GraphQL需要對(duì)現(xiàn)有的后端服務(wù)進(jìn)行大刀闊斧的修改嗎?

答案是:NO!不需要!

它完全可以以一種不侵入的方式來(lái)部署,將它作為前后端的中間服務(wù),也就是,現(xiàn)在開(kāi)始逐漸流行的前端 —— 中端 —— 后端的三層結(jié)構(gòu)模式來(lái)部署!

那就來(lái)看一下這樣的部署模式圖:

46c1901a-5f10-11eb-8b86-12bb97331649.png

GraphQL執(zhí)行邏輯

也就是說(shuō),完全可以搭建一個(gè)GraphQL服務(wù)器,專門來(lái)處理前端請(qǐng)求,并處理后端服務(wù)獲取的數(shù)據(jù),重新進(jìn)行組裝、篩選、過(guò)濾,將完美符合前端需要的數(shù)據(jù)返回。

新的開(kāi)發(fā)需求可以直接就使用GraphQL服務(wù)來(lái)獲取數(shù)據(jù)了,以前已經(jīng)上線的功能無(wú)需改動(dòng),還是使用原有請(qǐng)求調(diào)用REST接口的方式,最低程度的降低更換GraphQL帶來(lái)的技術(shù)成本問(wèn)題!

如果沒(méi)有那么多成本來(lái)支撐改造,那么就不需要改造!

只有當(dāng)原有需求發(fā)生變化,需要對(duì)原功能進(jìn)行修改時(shí),就可以換成GraphQL了。

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

下圖是一個(gè) GraphQL 應(yīng)用的基本架構(gòu),其中客戶端只和 GraphQL 層進(jìn)行 API 交互,而 GraphQL 層再往后接入各種數(shù)據(jù)源。這樣一來(lái),只要是數(shù)據(jù)源有的數(shù)據(jù), GraphQL 層都可以讓客戶端按需獲取,不必專門再去定接口了。

47570550-5f10-11eb-8b86-12bb97331649.png

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

一個(gè)GraphQL服務(wù)僅暴露一個(gè) GraphQL Endpoint,可以按照業(yè)務(wù)來(lái)進(jìn)行區(qū)分,部署多個(gè)GraphQL服務(wù),分管不同的業(yè)務(wù)數(shù)據(jù),這樣就可以避免單服務(wù)器壓力過(guò)大的問(wèn)題了。

GraphQL特點(diǎn)總結(jié)

聲明式數(shù)據(jù)獲?。梢詫?duì)API進(jìn)行查詢):聲明式的數(shù)據(jù)查詢帶來(lái)了接口的精確返回,服務(wù)器會(huì)按數(shù)據(jù)查詢的格式返回同樣結(jié)構(gòu)的 JSON 數(shù)據(jù)、真正照顧了客戶端的靈活性。

一個(gè)微服務(wù)僅暴露一個(gè) GraphQL 層:一個(gè)微服務(wù)只需暴露一個(gè)GraphQL endpoint,客戶端請(qǐng)求相應(yīng)數(shù)據(jù)只通過(guò)該端點(diǎn)按需獲取,不需要再額外定義其他接口。

傳輸層無(wú)關(guān)、數(shù)據(jù)庫(kù)技術(shù)無(wú)關(guān):帶來(lái)了更靈活的技術(shù)棧選擇,比如我們可以選擇對(duì)移動(dòng)設(shè)備友好的協(xié)議,將網(wǎng)絡(luò)傳輸數(shù)據(jù)量最小化,實(shí)現(xiàn)在網(wǎng)絡(luò)協(xié)議層面優(yōu)化應(yīng)用。

47e60c0a-5f10-11eb-8b86-12bb97331649.png

Part 2 Schema & Type

GraphQL支持的數(shù)據(jù)操作

GraphQL對(duì)數(shù)據(jù)支持的操作有:

查詢(Query):獲取數(shù)據(jù)的基本查詢。

變更(Mutation):支持對(duì)數(shù)據(jù)的增刪改等操作。

訂閱(Subscription):用于監(jiān)聽(tīng)數(shù)據(jù)變動(dòng)、并靠websocket等協(xié)議推送變動(dòng)的消息給對(duì)方。

48b5d200-5f10-11eb-8b86-12bb97331649.gif

GraphQL支持的操作

GraphQL的核心概念:圖表模式(Schema)

要想要設(shè)計(jì)GraphQL的數(shù)據(jù)模型,用來(lái)描述你的業(yè)務(wù)數(shù)據(jù),那么就必須要有一套Schema語(yǔ)法來(lái)做支撐。

想要描述數(shù)據(jù),就必須離不開(kāi)數(shù)據(jù)類型的定義。所以GraphQL設(shè)計(jì)了一套Schema模式(可以理解為語(yǔ)法),其中最重要的就是數(shù)據(jù)類型的定義和支持。

那么類型(Type)就是模式(Schema)最核心的東西了。

什么是類型?

對(duì)于數(shù)據(jù)模型的抽象是通過(guò)類型(Type)來(lái)描述的,每一個(gè)類型有若干字段(Field)組成,每個(gè)字段又分別指向某個(gè)類型(Type)。這很像JavaC#中的類(Class)。

GraphQL的Type簡(jiǎn)單可以分為兩種,一種叫做Scalar Type(標(biāo)量類型),另一種叫做Object Type(對(duì)象類型)。

那么就分別來(lái)介紹下兩種類型。

標(biāo)量類型(Scalar Type)

標(biāo)量是GraphQL類型系統(tǒng)中最小的顆粒。類似于Java、C#中的基本類型。

其中內(nèi)建標(biāo)量主要有:

String

Int

Float

Boolean

Enum

ID

4992c7c8-5f10-11eb-8b86-12bb97331649.gif

Scalar Type

上面的類型僅僅是GraphQL默認(rèn)內(nèi)置的類型,當(dāng)然,為了保證最大的靈活性,GraphQL還可以很靈活的自行創(chuàng)建標(biāo)量類型。

對(duì)象類型(Object Type)

僅有標(biāo)量類型是不能滿足復(fù)雜抽象數(shù)據(jù)模型的需要,這時(shí)候我們可以使用對(duì)象類型。

通過(guò)對(duì)象模型來(lái)構(gòu)建GraphQL中關(guān)于一個(gè)數(shù)據(jù)模型的形狀,同時(shí)還可以聲明各個(gè)模型之間的內(nèi)在關(guān)聯(lián)(一對(duì)多、一對(duì)一或多對(duì)多)。

對(duì)象類型的定義可以參考下圖:

4b4a7a84-5f10-11eb-8b86-12bb97331649.png

對(duì)象模型引入關(guān)聯(lián)關(guān)系

是不是很方便呢?我們可以像設(shè)計(jì)類圖一樣來(lái)設(shè)計(jì)GraphQL的對(duì)象模型。

類型修飾符(Type Modifier)

那么,類型系統(tǒng)僅僅只有類型定義是不夠的,我們還需要對(duì)類型進(jìn)行更廣泛性的描述。

類型修飾符就是用來(lái)修飾類型,以達(dá)到額外的數(shù)據(jù)類型要求控制。

比如:

列表:[Type]

非空:Type!

列表非空:[Type]!

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

在描述數(shù)據(jù)模型(模式Schema)時(shí),就可以對(duì)字段施加限制條件。

例如定義了一個(gè)名為User的對(duì)象類型,并對(duì)其字段進(jìn)行定義和施加限制條件:

4eccd47c-5f10-11eb-8b86-12bb97331649.png

User字段控制

那么,返回?cái)?shù)據(jù)時(shí),像下面這種情況就是不允許的:

4f40123e-5f10-11eb-8b86-12bb97331649.png

錯(cuò)誤的表示

Graphql會(huì)根據(jù)Schema Type來(lái)自動(dòng)返回正確的數(shù)據(jù):

4f812d64-5f10-11eb-8b86-12bb97331649.png

正確的表示

其他類型

除了上面的,Graphql還有一些其他類型來(lái)更好的引入面向?qū)ο蟮脑O(shè)計(jì)思想:

接口類型(Interfaces):其他對(duì)象類型實(shí)現(xiàn)接口必須包含接口所有的字段,并具有相同的類型修飾符,才算實(shí)現(xiàn)接口。

比如定義了一個(gè)接口類型:

4fce6be2-5f10-11eb-8b86-12bb97331649.png

那么就可以實(shí)現(xiàn)該接口:

5025aa92-5f10-11eb-8b86-12bb97331649.png

聯(lián)合類型(Union Types):聯(lián)合類型和接口十分相似,但是它并不指定類型之間的任何共同字段。幾個(gè)對(duì)象類型共用一個(gè)聯(lián)合類型。

5059a5f4-5f10-11eb-8b86-12bb97331649.png

輸入類型(Input Types):更新數(shù)據(jù)時(shí)有用,與常規(guī)對(duì)象只有關(guān)鍵字修飾不一樣,常規(guī)對(duì)象時(shí) type 修飾,輸入類型是 input 修飾。

比如定義了一個(gè)輸入類型:

50b3bfda-5f10-11eb-8b86-12bb97331649.png

前端發(fā)送變更請(qǐng)求時(shí)就可以使用(通過(guò)參數(shù)來(lái)指定輸入的類型):

5113d9ba-5f10-11eb-8b86-12bb97331649.png

所以,這樣面向?qū)ο蟮脑O(shè)計(jì)方式,真的對(duì)后端開(kāi)發(fā)人員特別友好!而且前端MVVM框架流行以來(lái),面向?qū)ο蟮脑O(shè)計(jì)思想也越來(lái)越流行,前端使用Graphql也會(huì)得心應(yīng)手。

Part 3 GraphQL技術(shù)接入架構(gòu)

Graphql 技術(shù)接入架構(gòu)

那么,該怎么設(shè)計(jì)來(lái)接入我們現(xiàn)有的系統(tǒng)中呢?

將Graphql服務(wù)直連數(shù)據(jù)庫(kù)的方式:最簡(jiǎn)潔的配置,直接操作數(shù)據(jù)庫(kù)能減少中間環(huán)節(jié)的性能消耗。

51faf1b0-5f10-11eb-8b86-12bb97331649.png

直連數(shù)據(jù)庫(kù)的接入

集成現(xiàn)有服務(wù)的GraphQL層:這種配置適合于舊服務(wù)的改造,尤其是在涉及第三方服務(wù)時(shí)、依然可以通過(guò)原有接口進(jìn)行交互。

524c8322-5f10-11eb-8b86-12bb97331649.png

集成現(xiàn)有服務(wù)的GraphQL層

直連數(shù)據(jù)庫(kù)和集成服務(wù)的混合模式:前兩種方式的混合。

529e52f6-5f10-11eb-8b86-12bb97331649.png

混合接入方式

可以說(shuō)是非常靈活了!你都不用擔(dān)心會(huì)給你帶來(lái)任何的麻煩。

服務(wù)端實(shí)現(xiàn)

在服務(wù)端, GraphQL 服務(wù)器可用任何可構(gòu)建 Web 服務(wù)器的語(yǔ)言實(shí)現(xiàn)。有以下語(yǔ)言的實(shí)現(xiàn)供參考:

C# / .NET

Clojure

Elixir

Erlang

Go

Groovy

Java

JavaScript

Julia

Kotlin

Perl

PHP

Python

R

Ruby

Rust

Scala

Swift

種類繁多,幾乎流行的語(yǔ)言都有支持。

客戶端實(shí)現(xiàn)

在客戶端,Graphql Client目前有下面的語(yǔ)言支持:

C# / .NET

Clojurescript

Elm

Flutter

Go

Java / Android

JavaScript

Julia

Swift / Objective-C iOS

Python

R

覆蓋了眾多客戶端設(shè)計(jì)語(yǔ)言,而其他語(yǔ)言的支持也在推進(jìn)中。

Graphql的一些服務(wù)

整理了下目前比較流行的服務(wù)框架:

Apollo Engine:一個(gè)用于監(jiān)視 GraphQL 后端的性能和使用的服務(wù)。

Graphcool (github): 一個(gè) BaaS(后端即服務(wù)),它為你的應(yīng)用程序提供了一個(gè) GraphQL 后端,且具有用于管理數(shù)據(jù)庫(kù)和存儲(chǔ)數(shù)據(jù)的強(qiáng)大的 web ui。

Tipe (github): 一個(gè) SaaS(軟件即服務(wù))內(nèi)容管理系統(tǒng),允許你使用強(qiáng)大的編輯工具創(chuàng)建你 的內(nèi)容,并通過(guò) GraphQL 或 REST API 從任何地方訪問(wèn)它。

AWS AppSync:完全托管的 GraphQL 服務(wù),包含實(shí)時(shí)訂閱、離線編程和同步、企業(yè)級(jí)安全特性以及細(xì)粒度的授權(quán)控制。

Hasura:一個(gè) BaaS(后端即服務(wù)),允許你在 Postgres 上創(chuàng)建數(shù)據(jù)表、定義權(quán)限并使用 GraphQL 接口查詢和操作。

Graphql的一些工具

graphiql (npm): 一個(gè)交互式的運(yùn)行于瀏覽器中的 GraphQL IDE。

Graphql Language Service: 一個(gè)用于構(gòu)建 IDE 的 GraphQL 語(yǔ)言服務(wù)(診斷、自動(dòng)完成等) 的接口。

quicktype (github): 在 TypeScript、Swift、golang、C#、C++ 等語(yǔ)言中為 GraphQL 查 詢生成類型。

想要獲取更多關(guān)于Graphql的一些框架、工具,可以去awesome-graphql:一個(gè)神奇的社區(qū),維護(hù)一系列庫(kù)、資源等,地址是

https://github.com/chentsulin/awesome-graphql

好了,一個(gè)入門級(jí)的Graphql介紹篇就這樣完結(jié)了(盡管篇幅也很大哈哈)。

不知道你懂得它的原理和優(yōu)點(diǎn)了嗎?

你對(duì)它感興趣嗎?

看完這篇介紹,有沒(méi)有想動(dòng)手嘗試一下呢?

你會(huì)在你下一個(gè)項(xiàng)目中引入Graphql并使用它嗎?

你對(duì)Graphql還有什么疑惑的問(wèn)題呢?

責(zé)任編輯:xj

原文標(biāo)題:我為什么要放棄 RESTful,選擇擁抱 GraphQL

文章出處:【微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1499

    瀏覽量

    61964
  • Restful
    +關(guān)注

    關(guān)注

    0

    文章

    11

    瀏覽量

    3532
  • GraphQL
    +關(guān)注

    關(guān)注

    0

    文章

    14

    瀏覽量

    572

原文標(biāo)題:我為什么要放棄 RESTful,選擇擁抱 GraphQL

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛(ài)好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    mpo配線架優(yōu)勢(shì)哪些

    MPO配線架作為一種高密度光纖配線設(shè)備,具有多方面的優(yōu)勢(shì),這些優(yōu)勢(shì)使其在數(shù)據(jù)中心、機(jī)房、通信系統(tǒng)等需要高密度光纖連接和管理的場(chǎng)景中得到了廣泛應(yīng)用。以下是MPO配線架的主要優(yōu)勢(shì): 1. 高密度連接 多
    的頭像 發(fā)表于 09-26 10:24 ?277次閱讀

    ads8588s相對(duì)ad7606什么什么優(yōu)勢(shì)呢?

    ads8588s相對(duì)ad7606什么什么優(yōu)勢(shì)呢,現(xiàn)在項(xiàng)目再用ad7606,也想了解下ads8588,性價(jià)比高的話,就換了,外圍電路應(yīng)該怎么設(shè)計(jì)呢?謝謝
    發(fā)表于 08-27 07:11

    硅谷物理服務(wù)器哪些關(guān)鍵優(yōu)勢(shì)和特點(diǎn)

    硅谷的物理服務(wù)器設(shè)施全球知名,為各類企業(yè)提供了卓越的IT基礎(chǔ)設(shè)施支持。下面將逐一探討硅谷物理服務(wù)器的關(guān)鍵優(yōu)勢(shì)和特點(diǎn),rak小編為您整理發(fā)布硅谷物理服務(wù)器哪些關(guān)鍵優(yōu)勢(shì)和特點(diǎn)。
    的頭像 發(fā)表于 08-16 13:28 ?175次閱讀

    射頻技術(shù)哪些優(yōu)勢(shì)和劣勢(shì)

    射頻技術(shù),作為一種廣泛應(yīng)用的電磁波技術(shù),在通信、醫(yī)療、工業(yè)等多個(gè)領(lǐng)域發(fā)揮著重要作用。其優(yōu)勢(shì)在于高效性、靈活性、非接觸性等方面,但同時(shí)也存在一些劣勢(shì),如熱偏移現(xiàn)象、尖角效應(yīng)以及信號(hào)干擾等。以下是對(duì)射頻技術(shù)優(yōu)勢(shì)和劣勢(shì)的詳細(xì)探討。
    的頭像 發(fā)表于 08-13 10:13 ?1362次閱讀

    數(shù)字化工廠的數(shù)據(jù)采集平臺(tái)什么優(yōu)勢(shì)

    數(shù)字化工廠的數(shù)據(jù)采集平臺(tái)什么優(yōu)勢(shì)
    的頭像 發(fā)表于 07-31 16:17 ?265次閱讀

    一文詳解主機(jī)托管的產(chǎn)品優(yōu)勢(shì)哪些

    主機(jī)托管的產(chǎn)品優(yōu)勢(shì)哪些?主機(jī)托管在安全、性能、資源配置與擴(kuò)展性、技術(shù)支持與維護(hù)、成本效益、管理、合法性等方面有顯著的優(yōu)勢(shì)。這些產(chǎn)品優(yōu)勢(shì)可以幫助企業(yè)構(gòu)建穩(wěn)定、高效、安全的網(wǎng)絡(luò)環(huán)境。
    的頭像 發(fā)表于 07-24 13:12 ?206次閱讀

    電磁信號(hào)模擬系統(tǒng)哪些優(yōu)勢(shì)和劣勢(shì)

    智慧華盛恒輝電磁信號(hào)模擬系統(tǒng)具有一系列優(yōu)勢(shì)和劣勢(shì),這些優(yōu)勢(shì)和劣勢(shì)對(duì)于其應(yīng)用范圍和效果具有重要影響。以下是對(duì)電磁信號(hào)模擬系統(tǒng)優(yōu)勢(shì)和劣勢(shì)的詳細(xì)分析: 優(yōu)勢(shì) 高逼真度: 電磁信號(hào)模擬系統(tǒng)能夠
    的頭像 發(fā)表于 07-16 16:34 ?423次閱讀

    云安全的優(yōu)勢(shì)哪些

    云安全的優(yōu)勢(shì) 隨著云計(jì)算技術(shù)的快速發(fā)展,越來(lái)越多的企業(yè)和個(gè)人開(kāi)始將數(shù)據(jù)和應(yīng)用遷移到云端。然而,云安全問(wèn)題也日益凸顯,成為人們關(guān)注的焦點(diǎn)。本文將詳細(xì)介紹云安全的優(yōu)勢(shì)。 一、云安全的定義 云安全是指在云
    的頭像 發(fā)表于 07-02 09:19 ?544次閱讀

    激光焊接技術(shù)在焊接鎳鉻合金的工藝優(yōu)勢(shì)哪些

    獨(dú)特的優(yōu)勢(shì),為鎳鉻合金的焊接提供了高效、精準(zhǔn)、可靠的解決方案。下面來(lái)一起看看激光焊接技術(shù)在焊接鎳鉻合金的工藝優(yōu)勢(shì)哪些。 激光焊接技術(shù)在焊接鎳鉻合金的工藝優(yōu)勢(shì): 1、激光焊接機(jī)具有能量
    的頭像 發(fā)表于 05-29 14:52 ?380次閱讀

    mbed開(kāi)發(fā)平臺(tái)什么優(yōu)勢(shì)?

    以下問(wèn)題想了解了解: 1.用mbed開(kāi)發(fā)有什么優(yōu)勢(shì)? 2.mbed對(duì)硬件什么要求,即什么樣的硬件設(shè)計(jì)才支持mbed開(kāi)發(fā)? 3.mbed開(kāi)發(fā)和MDK開(kāi)發(fā)有和區(qū)別? 4.對(duì)于STM32,mbed開(kāi)發(fā)和ST的庫(kù)有關(guān)系嗎?
    發(fā)表于 04-30 07:50

    美國(guó)洛杉磯VPS的優(yōu)勢(shì)哪些?

    美國(guó)洛杉磯vps是很多用戶的選擇,那么美國(guó)洛杉磯VPS的優(yōu)勢(shì)哪些?rak部落小編為您整理發(fā)布美國(guó)洛杉磯VPS的優(yōu)勢(shì)哪些? 美國(guó)洛杉磯VPS的優(yōu)勢(shì)
    的頭像 發(fā)表于 04-28 10:19 ?435次閱讀

    ARM-based相比ARM cortex優(yōu)勢(shì)?

    你看好ARM-based架構(gòu)嗎 相比ARM cortex優(yōu)勢(shì) ARM其他還有什么架構(gòu)啊,感覺(jué)曝光的好少。。
    發(fā)表于 04-24 06:55

    國(guó)巨陶瓷貼片電容哪些優(yōu)勢(shì)?

    國(guó)巨陶瓷貼片電容哪些優(yōu)勢(shì),YAGEO貼片電容(MLCC)是一種電容材質(zhì)。貼片電容全稱為:多層(積層,疊層)片式陶瓷電容器,也稱為貼片電容,片容。陶瓷貼片電容相比其它電容占據(jù)較大優(yōu)勢(shì),由于體積小作用強(qiáng)大,較多的應(yīng)用到精密電子產(chǎn)品
    的頭像 發(fā)表于 03-12 14:05 ?1049次閱讀
    國(guó)巨陶瓷貼片電容<b class='flag-5'>有</b>哪些<b class='flag-5'>優(yōu)勢(shì)</b>?

    人工智能技術(shù)的優(yōu)勢(shì)哪些

    人工智能技術(shù)的優(yōu)勢(shì)
    的頭像 發(fā)表于 01-19 15:58 ?3111次閱讀

    你的BurpSuite該更新了

    引入了新工具,使在 Burp Suite 中使用 GraphQL API,當(dāng) Burp 檢測(cè)到來(lái)自目標(biāo)的 GraphQL 請(qǐng)求時(shí),它會(huì)將 GraphQL 選項(xiàng)卡添加到該請(qǐng)求的消息編輯器中。
    的頭像 發(fā)表于 12-27 17:36 ?541次閱讀
    你的BurpSuite該更新了
    主站蜘蛛池模板: 免费看黄色一级| 亚洲欧美另类无码专区| 最近中文字幕无吗免费高清| 国产精品高清视亚洲一区二区| 麻豆精品人妻一区二区三区蜜桃| 消息称老熟妇乱视频一区二区| qvod电影资源| 久欠热视频精品首页| 亚洲精品色播一区二区| 国产36d在线观看| 欧美美女一区二区三区| 找老女人泻火对白自拍| 国产亚洲免费观看| 十分钟免费视频大全在线| 99在线观看视频免费| 久久视频在线视频观品15| 亚洲国产精品特色大片观看| 国产AV国产精品国产三级在线L| 欧美xxxx印度| 91福利在线观看| 久久青青草原| 一本道高清无码v| 国产在线精彩亚洲久久| 天天狠狠弄夜夜狠狠躁·太爽了| 啊灬啊别停灬用力啊在线观看视频 | 暖暖在线观看播放视频 | 久久麻豆国产国产AV| 亚洲精品国产高清不卡在线| 国产精品成人无码久免费| 色人阁久久| 成人毛片手机版免费看| 欧美一区二区三区播放| 2020最新国产自产精品| 空姐内射出白浆10p| 在线观看a视频| 久久久久久91香蕉国产| 一本色道久久综合亚洲精品蜜桃冫| 国模丽丽啪啪一区二区| 亚洲精品国产拍在线观看| 国产色婷婷精品人妻蜜桃成熟 | 拔萝卜视频免费看高清|