GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)

GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)

ID:43445634

大?。?03.58 KB

頁數(shù):42頁

時間:2019-10-02

GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)_第1頁
GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)_第2頁
GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)_第3頁
GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)_第4頁
GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)_第5頁
資源描述:

《GraphQL在微服務(wù)架構(gòu)中實踐架構(gòu)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫

1、GraphQL在微服務(wù)架構(gòu)中的實踐架構(gòu)目錄GraphQL是什么?iGraphQL在微服務(wù)架構(gòu)中的使用2GraphQL在實踐過程中遇到的棘手問題3合理的GraphQL彳敦服務(wù)架構(gòu)的設(shè)計4一、GraphQL是什么?簡單對象訪問協(xié)議(SOAP)從今天來看已經(jīng)是一門非常古老的Web服務(wù)技術(shù)了,雖然很多服務(wù)仍然在使用遵循SOAP的接口,但是到今天REST風(fēng)格的面向資源的API接口已經(jīng)非常深入人心,也非常的成熟;但是這篇文章要介紹的主角其實是另一門更加復(fù)雜、完備的查詢語言GraphQLo作為Facebook在2015年推出的查詢語言,GraphQL能夠?qū)PI中的數(shù)據(jù)提供一套易于理解

2、的完整描述,使得客戶端能夠更加準(zhǔn)確的獲得它需要的數(shù)據(jù),目前包括Facebook.Twitter.GitHub在內(nèi)的很多公司都已經(jīng)在生產(chǎn)環(huán)境使用GraphQL提供API;其實無論我們是否決定生產(chǎn)環(huán)境中使用GraphQL,它確實是一門值得學(xué)習(xí)的技術(shù)。二、GraphQL在微服務(wù)架構(gòu)中的使用類型系統(tǒng)GraphQL的強大表達(dá)能力主要還是來自于它完備的類型系統(tǒng),與REST不同,它將整個Web服務(wù)中的全部資源看成一個有連接的圖,而不是一個個資源孤島,在訪問任何資源時都可以通過資源之間的連接訪問其它的資源。GRAPHQUERYLANGUAGEIssue如上圖所示,當(dāng)我們訪問User資源時

3、,就可以通過GraphQL中的連接訪問當(dāng)前User的Repo和Issue等資源,我們不再需要通過多個REST的接口分別獲取這些資源,只需要通過如下所示的查詢就能一次性拿到全部的結(jié)果:{user{idemailusernamerepos(first:10){idurlnameissues(first:20){idauthortitle}GraphQL這種方式能夠?qū)⒃蠷ESTful風(fēng)格時的多次請求聚合成一次請求,不僅能夠減少多次請求帶來的延遲,還能夠降低服務(wù)器壓力,加快前端的渲染速度。它的類型系統(tǒng)也非常豐富,除了標(biāo)量、枚舉、列表和對象等類型之外,還支持接口和聯(lián)合類型等高級特

4、性。GRAPHQLSCHEMAInputUnionInterface為了能夠更好的表示非空和空字段,GraphQL也引入了NomNull等標(biāo)識代表非空的類型,例如String!表示非空的字符串。schema{query:Querymutation:MutationSchema中絕大多數(shù)的類型都是普通的對象類型,但是每一個Schema中都有兩個特殊類型:query和mutation,匕們是GraphQL中所有查詢的入口,在使用時所有查詢接口都是query的子字段,所有改變服務(wù)器資源的請求都應(yīng)該屬于mutation類型。集中式vs分散式GraphQL以圖的形式將整個Web服務(wù)

5、中的資源展示出來,其實我們可以理解為它將整個Web服務(wù)以〃SQL〃的方式展示給前端和客戶端,服務(wù)端的資源最終都被聚合到一張完整的圖上,這樣客戶端可以按照其需求自行調(diào)用,類似添加字段的需求其實就不再需要后端多次修改了。與RESTful不同,每一個的GraphQL服務(wù)其實對外只提供了一個用于調(diào)用內(nèi)部接口的端點,所有的請求都訪問這個暴露出來的端點。GraphQLvsRESTful(endpoint)dravorwtt.”/叩1!/potttdr^venessGraphQL實際上將多個HTTP請求聚合成了一個請求,它只是將多個RESTful請求的資源變成了一個從根資源Post訪問

6、其他資源的Comment和Author的圖,多個請求變成了一個請求的不同字段,從原有的分散式請求變成了集中式的請求,這種方式非常適合單體服務(wù)直接對外提供GraphQL服務(wù),能夠在數(shù)據(jù)源和展示層建立一個非常清晰的分離,同時也能夠通過一些強大的工具,例如GraphiQL直接提供可視化的文檔;但是在業(yè)務(wù)復(fù)雜性指數(shù)提升的今天,微服務(wù)架構(gòu)成為了解決某些問題時必不可少的解決方案,所以如何在微服務(wù)架構(gòu)中使用GraphQL提高前后端之間的溝通效率并降低開發(fā)成本成為了一個值得考慮的問題。Relay標(biāo)準(zhǔn)如果說RESTful其實是客戶端與服務(wù)端在HTTP協(xié)議通信時定義的固定標(biāo)準(zhǔn),那么Relay

7、其實也是我們在使用GraphQL可以遵循的一套規(guī)范。GRAPHQLANDRELAY這種標(biāo)準(zhǔn)的出現(xiàn)能夠讓不同的工程師開發(fā)出較為相似的通信接口,在一些場景下,例如標(biāo)識對象和分頁這種常見的需求,引入設(shè)計良好的標(biāo)準(zhǔn)能夠降低開發(fā)人員之間的溝通成本。Relay標(biāo)準(zhǔn)其實為三個與API有關(guān)的最常見的問題制定了一些規(guī)范:提供能夠重新獲取對象的機制;提供對^何對連接進(jìn)行分頁的描述;標(biāo)準(zhǔn)化mutation請求,使它們變得更加可預(yù)測;通過將上述的三個問題規(guī)范化,能夠極大地增加前后端對于接口制定和對接時的工作效率。對象標(biāo)識符Node是Relay標(biāo)準(zhǔn)中定

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。