微服務(wù)查詢語言restQL已經(jīng)成為了一個開源項目,使用MIT開源許可。restQL語言旨在簡化客戶端訪問RESTful微服務(wù)的常用場景,包括并行調(diào)用和鏈?zhǔn)秸{(diào)用。由拉丁美洲最大的電子商務(wù)公司B2W開發(fā)的restQL,是為了避免Falcor和GraphQL這兩個更為人熟知的數(shù)據(jù)查詢和管理框架的一些限制而誕生的。
Falcor僅適用于使用JavaScript的客戶端,而restQL對于任何支持HTTP REST調(diào)用的客戶端都適用。這意味著restQL也能適用于使用Swift和Java編寫的移動應(yīng)用。盡管GraphQL現(xiàn)在已經(jīng)是一種成熟的數(shù)據(jù)查詢語言,但是它不支持一些對RESTful服務(wù)來說簡單或約定俗成的特性,比如HTTP響應(yīng)狀態(tài)碼或者本地瀏覽器緩存。
與其他查詢語言類似,restQL語句描述了要獲取的資源,并用參數(shù)進行過濾。比如:
from hero with name = "Restman"默認(rèn)情況下,查詢是并行執(zhí)行的,無須任何特殊語法。對于更復(fù)雜也更常見的場景,比如鏈?zhǔn)秸{(diào)用或者多路復(fù)用調(diào)用(如下例所示)也非常清晰直觀。
from hero with name = "Restman" from sidekick with hero = hero.id對restQL查詢的解析和響應(yīng)由restQL服務(wù)端處理。restQL服務(wù)端是用Clojure實現(xiàn)的,它充當(dāng)著提交restQL查詢的客戶端和后端APIs之間的橋梁。所有的配置信息都是存在服務(wù)端的,以匹配資源名稱和相應(yīng)的調(diào)用端點(endpoint)。由于restQL服務(wù)端開放了標(biāo)準(zhǔn)的REST調(diào)用端點,所以不需要專門處理的客戶端。
在一篇聲明restQL的博客文章中,B2W Digital的IT經(jīng)理,同時也是restQL的作者之一的Ricardo Mayerhofer提到,這個項目是在公司向微服務(wù)遷移的過程中誕生的。開發(fā)團隊很快從向微服務(wù)的遷移中受益,因為應(yīng)用程序變得更小,相應(yīng)的維護也更簡單。但是,前端代碼變得更加復(fù)雜了,因為需要向多個微服務(wù)發(fā)送請求,而不是像以前那樣只用向一個整體的服務(wù)發(fā)送一個請求。Ricardo總結(jié)了他們的經(jīng)驗:“基于微服務(wù)的架構(gòu)并不是什么銀彈。盡管能給服務(wù)端團隊帶來直接的好處,但是它的特性給使用者帶來了復(fù)雜性和性能方面的挑戰(zhàn)。”在參考了Falcor和GraphQL后,restQL誕生了,并被證明有助于簡化客戶端對大量后端服務(wù)的訪問。
你可以在項目主頁http://restql.b2w.io/上找到更多關(guān)于restQL的信息。源代碼則在GitHub上。
查看英文原文:restQL, a Microservices Query Language, Released on GitHub