GraphQL API 性能測(cè)試:查詢到底能有多快?
圖源:unsplash
自2015年開源以來,GraphQL因其靈活性和高效率而迅速普及。它可以通過允許客戶端在一個(gè)請(qǐng)求中準(zhǔn)確指定他們所需的數(shù)據(jù)來處理復(fù)雜的嵌套查詢,從而消除了RESTful API固有的數(shù)據(jù)冗余和請(qǐng)求冗余的經(jīng)典問題。
此外,由于它只是一種查詢語言,與協(xié)議無關(guān),因此可以通過HTTP2、websockets或TCP使用。
有什么潛在的風(fēng)險(xiǎn)?
但是,GraphQL并不是萬金油,做出轉(zhuǎn)變時(shí)還有一些問題需要考慮。
· 出錯(cuò)信息:即使查詢失敗,客戶端也始終會(huì)收到200狀態(tài),因?yàn)榉?00響應(yīng)代碼表示問題發(fā)生在HTTP傳輸層而不是GraphQL層。
· 模式設(shè)計(jì):如果開發(fā)人員在進(jìn)行模式設(shè)計(jì)時(shí)粗心了(尤其是在定義resolver函數(shù)時(shí)),那么性能和效率可能會(huì)急劇下降——使用GraphQL API可能比RESTful API更糟糕。
· 性能測(cè)試:使用GraphQL API很難進(jìn)行有意義的性能測(cè)試,因?yàn)樗鼉H公開一個(gè)測(cè)試端點(diǎn)。在對(duì)包含多個(gè)嵌套查詢的請(qǐng)求進(jìn)行故障排除時(shí),開發(fā)人員如何才能知道瓶頸在哪里,或者是什么導(dǎo)致請(qǐng)求失敗?
這些都是在設(shè)計(jì)API時(shí)需要考慮的問題。不過也有好消息,即使存在些局限,性能優(yōu)化和測(cè)試也能輕松完成。
查詢有多快呢?
進(jìn)入OpticQL,這是OSLabs Beta最近啟動(dòng)的開源項(xiàng)目,旨在通過性能測(cè)試解決上述問題。OpticQL是一個(gè)桌面應(yīng)用程序,它為GraphQL API提供了用戶友好的測(cè)試平臺(tái),并結(jié)合了輕量級(jí)的NPM軟件包,該軟件包使開發(fā)人員能夠?qū)?yīng)用程序無縫連接到OpticQL,導(dǎo)入其架構(gòu)并捕獲數(shù)據(jù)庫請(qǐng)求的性能指標(biāo)。
OpticQL的功能包括:
· 模式可視化,以圖形方式表示所有模式的字段和邊。所有類型名稱都以顏色編碼和動(dòng)態(tài)視圖連接到其字段,還提供了模式可視化的全屏視圖。
· 輸入字段以編寫和提交查詢和修改。當(dāng)查詢或修改發(fā)送到OpticQL時(shí),架構(gòu)的所有受影響部分將變?yōu)榫G色,以指示請(qǐng)求已“到達(dá)”它們。
· 包含返回的響應(yīng)數(shù)據(jù)、細(xì)粒度的resolver跟蹤信息,以及請(qǐng)求觸發(fā)的所有錯(cuò)誤的列表的視圖。
· 以毫秒為單位的請(qǐng)求執(zhí)行情況的圖形化概覽,可選擇查看最新請(qǐng)求的性能,并與對(duì)OpticQL作出的歷史請(qǐng)求的性能進(jìn)行比較。
· 瀏覽受查詢影響的每個(gè)字段的擴(kuò)展性能指標(biāo)的更多選項(xiàng)。
對(duì)于希望測(cè)試和優(yōu)化GraphQL API性能的開發(fā)人員而言,OpticQL強(qiáng)大且易于使用,你可以在OpticsQL的網(wǎng)站下載它或了解更多信息。