前端網站開發人員和後端資料庫管理人員的執掌分工將有大改變!因為當代網頁應用系統慣用的API資料傳輸風格REST架構,現在有了新的選擇,臉書開源釋出的資料查詢語言GraphQL,逐漸成為新的網頁應用傳輸架構,甚至被譽為是REST殺手,可以取代問世快20年的RESTful網頁程式API設計風格。
GraphQL是2012年時,臉書為了改善手機App操作體驗而開發的API查詢語言,可以網頁應用直接透過API,來描述所需要的資料,來向後端資料庫取得,而不用多次透過Rest API呼叫,才能來拼出所需資料,最直接的好處是,可以減少同一個網頁向後端呼叫的次數,加快網頁應用的反應速度,提供更順暢少等待的用戶操作體驗。
後來,2015年時,臉書將這項技術開源釋出,竟成了許多網路巨頭愛用的網頁資料層存取技術,如Netflix、Airbnb、GitHub、Twitter、Pinrerest、Yelp、PayPal都採用,也有不少大型媒體集團如紐約時報、CNBC、丹麥第二電視臺也導入,作為打造新一代雲端原生應用與大規模網路應用的新資料傳輸架構,JIRA和Trello服務的母公司Atlassian也是GraphQL的重度用戶。而身為開發源頭的臉書,全球每天數十億次的API呼叫,早就改成了GraphQL。
臺灣也有不少新創公司愛用,例如iCHEF餐飲POS 公司資廚早在2017年就開始導入,來加快各種POS報表程式的開發。
資廚管理顧問共同創辦人暨資訊長何明政就曾透露,過去前端工程師開發報表時,所需調度的資料庫內容,得先請後端工程師開發好幾支API,才能到個別資料庫查詢資料,再做成報表提供給餐廳用戶,相當繁瑣,但改用GraphQL後,可以簡化到,前端工程師只需透過單一API,就能直接取得資料庫裡的資料,自行組合或調整報表呈現的樣貌。何明政說,GraphQL也能讓後端工程師,可以更專注於維護架構,進而提升整體團隊的溝通效率。
甚至連汽車大廠Audi和BMW,都用GraphQL來打造電動車數位服務與後端系統間串接的資料服務,例如BMW的汽車資料API,就是透過GraphQL來存取資料,而不是透過傳統的RESTful網頁API設計。
過去採用REST架構的API呼叫方式,後端程式負責資料層的處理,而前端程式只負責拿到資料後的呈現處理。當前端程式有資料需求時,只能概略向資料源API提出請求,而由後端程式決定,下達SQL指令到資料庫取出資料,再拋給前端。
但是,這樣的資料存取方式,往往得依賴DBA,為每次不同的資料需求,開發不同的查詢程式。而且REST API每次只能呼叫單一資料源,同一網頁若有多種資料源的需求,例如用戶帳號資料、交易資料、推薦產品清單,就得向三個資料源提出三次API呼叫請求,而且因為後端程式無法得知前端程式目前的處理狀態,只能將符合條件的資料全都拋給前端,這都會徒增了拋給前端的資料量和連線複雜度。
GraphQL的作法則和REST截然不同,GraphQL可以讓前端程式以物件結構來描述所需要的資料,甚至可以使用巢狀結構來描述資料物件的欄位,能更精準也更明確地描述所需要的資料,再透過統一的後端GraphQL伺服器,自動向各資料源所在的資料庫取得資料,而不用透過DBA客製專用SQL指令。應用程式還可以「訂閱」(subscribe)資料,一旦資料庫中的內容有異動,可以送出更新事件通知,讓應用程式決定是否要重新查詢新的資料內容。
網頁應用的資料層責任,從後端轉移到前端
資料查詢語言GraphQL等於可以將應用的資料層主導權,從後端團隊,轉移到了前端團隊的手上,甚至前端網頁設計師就能直接透過GraphQL來存取後端資料庫。
GraphQL是Node.js的模組之一,直接使用npm來安裝GraphQL.js,提供給前端應用程式呼叫之用,也可以部署到API伺服器中。現在還有新創公司Apollo在2018年11月推出了企業級GraphQL平臺產品,可部署在用戶端或伺服器端,來提供大規模GraphQL API的呼叫,等於是特定用於資料查詢的API平臺。Audi就是用Apollo來打造一個GraphQL API的資料調度層。
因為使用者越來越多,臉書也決定放手,釋出開源專案管理權,成立了GraphQL基金會,捐給Linux基金會這個中立組織來管理,來確保GraphQL的中立發展。
Linux基金會目前正在招募GraphQL基金會的初始成員,要建立一個管理董事會、技術指導委員會和行銷團隊來共同維護,這也讓GraphQL的長期發展,不再完全由Facebook決定,而是透過開源社群來主導,有利於吸引其他科技巨頭的加入,來壯大其發展規模。
企業級產品出爐和開源基金會的設立,對GraphQL來說,等於開始跨出了制度化的關鍵一步,有利於長期發展,也更適合大型企業的導入。GraphQL這個可以成為網頁應用架構新溝通方式的REST架構殺手,在2018年底走出了臉書的領域,成為全球開源社群的資產,在2019年可以有寬廣的天空可以發展了。