非死book開源數據查詢語言GraphQL
最近非死book 開源了 GraphQL,它驅動了日均數十億次的API調用,同時圍繞它還形成也一個社區 graphql.org ;
一個GraphQL查詢是一個字符串,它被發送給一個與數據模式無關的服務器,然后服務器返回JSON數據。GraphQL是強類型的,并避免了版本控制,同時提供了隨著數據演進可以輕易改進查詢語句的能力。
InfoQ找到了Lee Byron,他在非死book工作同時也是GraphQL的早期貢獻者。
InfoQ:GraphQL已經出現幾年了。您能簡要介紹一下它的歷史和非死book在進軍移動計算的時候GraphQL是如何產生的?
Lee Byron:非死book最初作為一個網站被深深嵌入到我們原有的技術架構中。直到2012年,信息流都只能請求并從服務器以HTML的形式返回。在將信息流重建為以iOS原生 view的形式進行展示的過程中,我們不得不重新改造這個架構來獲得原始數據。
我們重新寫了一個系統,它看起來非常像一個傳統的基于REST的服務器,但作為iOS開發者發現它使用不便,并且我們看到了通過一個請求加載所有的信息同時使得我們的REST資源保持隔離之間的沖突。
特別是被分享的信息流故事和信息流故事的聚合體(它們本身就可能是被分享的信息流故事和信息流故事的聚合體)迫使我們不得不面對這個問題,使得我們重新思考如何去請求數據。
最終,在弄清楚信息流的原始數據應該如何處理以及確定通過移動網絡請求數據的最佳方式的努力中,就產生了GraphQL。
InfoQ:數據在本質上是分層的,同時它也是關系圖。GraphQL的中心目標是來表達這種圖形關系嗎?這種語言的其它目的是什么?
Lee Byron:當然,我們覺得很奇怪,我們的應用程序的服務器代碼以對象和關系的形式處理數據,然后以扁平的表格來表示它,后來才通過移動客戶端的代碼將它變回對象和關系。GraphQL的早期目的 是以清晰和易于使用的目標來暴露服務器的數據。
GraphQL還有其他幾個重要的目的。它的設計是為了滿足產品和創建它們的開發者的要求,而不是為了模擬一些數據庫或滿足傳輸語義。這有助于使GraphQL易于學習和使用,但它沒有抽象任何特定數據庫或傳輸方式以允許不同的方式來使用它。它同時也是強靜態類型的,這有助于促進各信息設計的規則,并且支持很多類似錯誤檢查、IDE集成和代碼生成有趣的工具。
InfoQ:服務器中的數據格式或服務器中的數據存儲對GraphQL有沒有影響?
Lee Byron:沒有。 GraphQL不是像MySQL或Redis這樣直接面向數據的接口,而是面向你已經存在的應用代碼的接口。你可以把GraphQL看作是為了調用應用服務器上的方法的一些內嵌的RPC。
InfoQ:你毫無顧忌地談論以產品為中心來幫助UI開發者?REST和JSON是否依然有意義以及不關心UI的中間件開發者如何使用它?
Lee Byron:我認為以產品為中心幫助的不僅僅是用戶界面開發。在非死book,GraphQL在服務器代碼中是一個真正強大的力量。JSON肯定還是有意義的,它是GraphQL的主要傳輸方式。在非死book,我們構建產品時,GraphQL取代了REST,但是在提供公共API時REST仍然是一個有用的工具。
InfoQ:什么是GraphQL服務器?你能否詳細說明一下強類型和GraphQL的路線圖。目前缺少什么?
Lee Byron:該GraphQL服務器的代碼相對小一點;它負責幾件事情。它提供了定義你的類型系統和與服務器代碼交互的工具。它接受GraphQL查詢并且將驗證他們以確保可以安全地和明確地在你的類型系統內運行。然后當然,它會依照你在你的類型系統內定義的代碼來執行查詢,這些代碼可能是處理同步、并行和錯誤捕獲的一些工作。
路線圖之前還有兩個方面需要解決。第一,需要更好地工具來幫助客戶端開發者做一些類似于代碼生成和查詢管理之類的事情。Relay是我們首要的和最顯著的客戶端工具。其次,在GraphQL中更好地支持流數據和推送的數據。在非死book我們一直在探索這些領域并很高興能夠在未來分享我們的成功經驗。
InfoQ:除了非死book,你可以說幾家已經在使用GraphQL的公司,以及社區有多強大?什么是Nuclide?開發者應該注意哪些其他的工具?
Lee Byron:GraphQL仍然是一個新興的技術。我們只在幾個月前發布GraphQL的預覽版,從那時起,我們已經看到了很多大大小小的公司的興趣。 Red Badger,總部設在英國的顧問公司,在開發金融時報的應用程序時已經使用了GraphQL。 Reindex.io是一個新公司,它將GraphQL作為一種服務提供給開發者。社區不僅僅使用GraphQL,同時也創建它。我們幾個月前發布了一款 GraphQL的JavaScript版本,自那時以來,社區成員已經建立GraphQL的Ruby、Java、Scala、.NET和Python版本。我很高興能在這樣短的時間有這樣的進展情況。
Nuclide是非死book的開發早期的React Native的IDE,它使用了Github的Atom編輯器。React、Relay和React Native都是非常有趣的工具,它們在產品工程領域提供了新的視角。 DataLoader 是我們最近發布的另一個工具,它包含了我們在非死book使用了數年的模式并幫助我們構建了效率很高的GraphQL服務器。
感興趣的讀者不妨移步這里了解如何 上手 。
查看英文原文: 非死book Open Sources Data Query Language GraphQL 。