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