PayPal 大規模採用 GraphQL 的探索和實踐

作者 | Shruti Kapoor

譯者 | 張健欣

策劃 | 蔡芳芳  

1 如今 GraphQL 在 PayPal 的狀態

我們通過構建收銀臺體驗開啓了我們的 GraphQL 採用之旅。當 我們用 GraphQL 構建收銀臺應用程序 時,我們看到了採用 GraphQL 的巨大好處,這成爲我們的指路明燈。我們構建了更多的應用程序,提供了基礎設施支持,發佈了一個公共 GraphQL API,並在全公司提供了培訓和學習材料。我們還建立了一個標準機構,提供了一個 GraphQL 工具 fanny pack,並構建了示例應用程序來幫助團隊開始使用 GraphQL。

如今,PayPal 的多個生產應用程序都在使用 GraphQL。現在,使用 GraphQL 構建新的 UI 應用程序已經成爲默認模式。許多現有應用程序正在遷移到 GraphQL。GraphQL 正被身份(Identity)、支付(Payment)、合規性(Compliance)等常見平臺使用,以在所有 PayPal 產品中提供一致的體驗。我們的 API 開發人員已經開始使用 GraphQL 來構建 API。Braintree 發佈了它的 公共 GraphQL API。

在 GraphQL 的幫助下,我們已經能夠彌合面向前端應用程序的後端(BFF,backend for frontend)和後端 API 功能之間的差距,因爲 GraphQL 可以作爲下游 API 的編排層,執行後端 API 的功能,並充當 UI 應用程序的 API 接口。我們正朝着統一的 GraphQL 網關邁進,以支持整個公司。

2 爲什麼 PayPal 需要 GraphQL?

當我們選擇 GraphQL 時,我們正在尋找一種技術來幫助我們解決以下問題:

圖片來源:drmakete lab on Unsplash

3 爲什麼我們開始採用 GraphQL?

PayPal 有一套龐大的 REST API,支持應用程序核心功能,並且非常靠近數據庫。GraphQL 在我們的應用程序中用作編排層。它位於前端 UI 應用程序和後端 API 層之間,充當面向前端的後端(BFF)。這意味着 UI 應用程序與 GraphQL 端點對話,這些端點確定要調用哪個下游服務。可以直接在 GraphQL 層構建新功能。一些團隊選擇使用 GraphQL 作爲純編排層,而其它一些團隊使用 GraphQL 作爲業務邏輯層。

收銀臺團隊是第一個率先使用 GraphQL 的團隊。Mark Stuart 在《收銀臺應用程序詳解(Checkout app in this blog post in detail)》中分享了我們採用 GraphQL 的過程。當收銀臺團隊展示他們的應用程序時,我們的工程團隊真正感受到了編排和開發人員生產力提高的好處。這引發了整個 PayPal 的興趣,團隊開始開發在他們的應用程序中使用 GraphQL 的示例程序。

這是新的吸引人的事情。每個人都對這一宣傳感到興奮,但對團隊來說最重要的是,編排下游 API 和爲客戶創建統一體驗有多容易。使用 GraphQL,所有下游的複雜性都可以隱藏,客戶不必擔心找出哪一部分連接到了哪裏。它爲客戶提供了更加連貫的體驗。

團隊開始構建產品,在我們的技術展覽中展示,並使其他人也興奮不已。很快,所有人都感到好奇。一旦我們說服了領導,我們就可以真正起飛了。

4 我們如何擴大 GraphQL 的採用範圍?

當我們開始擴大 GraphQL 的採用範圍時,我們意識到每個應用程序都在試圖解決自己的 GraphQL 問題。通常,各個團隊都在解決相同的問題並重復發明輪子。我們意識到有必要將這些工作統一到一個框架下,因此,我們成立了一個標準機構。我們爲工具、前端和中端示例應用程序、異常處理技術和學習資源提供了支持。

我們構建了有助於支持 GraphQL 採用的工具:

擁有一個標準機構和工具非常棒,可以幫助團隊更快地建立他們的圖。然而,我們注意到有些問題仍然存在。我們注意到某個圖偏離了正確的操作方式,例如身份驗證。我們在單個圖中失去了對認證流程的控制。我們還認識到,擁有多個圖會使 schema 共享更加困難。我們希望提供一個統一的入口點,共同管理 schema,以全局方式對數據建模,並提供一種重用類型的方式。這就是促使我們使用 Apollo Federation 構建了一個單圖網關的原因。

5 採用 GraphQL 有哪些優勢?

我們能夠協調周邊服務,並將一個 PayPal 子系統的賬號轉變爲一個 PayPal 賬戶,這很讓我們自豪。我們最初發布了我們的 Braintree API,我們能夠很快完成它。交付速度更快,GraphQL 能夠報告使用了 schema 的哪一部分。我們已經看到的 GraphQL 的主要優勢有:

6 我們面臨哪些挑戰?

圖片來源:Possessed Photography on Unsplash

我們仍在創建一種標準方法來應對 GraphQL 技術中的挑戰,如異常處理、身份認證、文件處理和批處理。

各個團隊都在獨立地構建他們自己的圖,這會導致重複工作、不同的異常處理和呈現方式,以及與處理身份認證標準方式的偏差。

我們仍在整合內部工具。由於這些工具很多依賴於 API 響應的狀態碼——200、400、500 等等,因此我們很難將 GraphQL 響應(都是 200)映射到這些工具。

PayPal 的 GraphQL 增長非常快。許多團隊構建了他們自己的方法來處理異常,解決 GraphQL 問題,並對內部日誌系統進行檢測。在它發展之後,我們通過添加內部插件和中間件來提供支持,以規範化錯誤處理、檢測和減少內部網絡聊天,但我們希望能夠更快地構建支持。

我們對單圖方案的採用速度很慢。各個團隊必須改變他們目前製作應用程序的許多行爲,才能採用單圖,增加了交付過程和時間。挑戰在於告訴人們,現在我們有規則可以添加到圖中,但要讓他們有動力使用單圖。Joey Nenni 在 JS @ PayPal 上發表演講,談到了我們實現單圖的方案,以及克服這一挑戰的潛在解決方案。

7 我們如何說服我們的工程和領導團隊?

我們的前端開發人員立即看到了使用 GraphQL 的好處。說服在 UI 團隊中工作的後端開發人員也很容易。他們理解使用 GraphQL 進行編排的力量。對於核心平臺 API 團隊,我們還沒有完全說服他們。當我們介紹 GraphQL 概念時,有時我們被告知 REST 也可以這樣做。是的,它可以,我們也可以使用 REST 複製 GraphQL 所做的事情,但最後,我們只是在重新創建 GraphQL。我們還沒有得到所有前端或後端開發人員的完全認證,但是我們的 REST API 和 GraphQL API 可以共存。我們學會了不操之過急,一點點來。

圖片來源:Christoffer Engström on Unsplash

爲了說服我們的領導,我們知道僅僅關注 GraphQL API 的性能是不夠的。編排的 GraphQL API 的性能取決於它所使用的 API。GraphQL API 的速度僅與最慢的下游 API 的速度相同。相反,我們將重點放在開發人員的生產力和交付產品的時間上。我們演示了使用 GraphQL 可以幫助更快地構建產品,提升團隊協作,並使文檔更容易瀏覽。當我們向我們的團隊介紹 GraphiQL 和 Playground 工具時,他們立刻看到了使用 GraphQL 端點和 playground 工具來在瀏覽文檔時發出請求的好處。

我們演示了 GraphQL 如何幫助提高內部和外部開發人員的生產力,GraphQL 如何幫助減少交付功能的時間,以及我們如何能夠向客戶端隱藏複雜性。使用 GraphQL,我們不必爲每個平臺編寫多個 SDK。我們構建一次 API 就可以了。沒有 GraphQL,我們不知道商戶正在使用哪些字段以及調用了哪些端點。我們在 KPI 上沒有指標,例如首次集成到生產中。通過 GraphQL,我們能夠展示我們的學習、工具和字段級別的監測情況。

8 你如何開始在自己的公司採用 GraphQL?

  1. 當你第一次推測 GraphQL 是否是正確的技術時,構建一個示例應用程序來演示 GraphQL 如何適合你的企業架構是很有幫助的。

  2. 帶上團隊——演示你的應用程序並展示使用 GraphQL 的好處,你採用 GraphQL 的經歷,你所看到的好處,以及你在幫助公司其他人方面所面臨的困難。

  3. 爲成功建立機構——成立一個工作組,幫助建立標準。爲 GraphQL 建立學習資源、提供指導、構建工具和支持。

  4. 讓團隊參與進來——從生產力的角度展示使用 GraphQL 的優勢。每個人都希望更快地發佈產品,並使其更容易與 API 集成。GraphQL 正好提供了這一點。向你的團隊成員和領導演示使用 GraphQL 構建新功能是多麼容易,向現有客戶發送更新是多麼容易,而不必發佈新版本,同時仍然向後兼容。

9 特別鳴謝

圖片來源:Wilhelm Gunkel on Unsplash

這篇文檔是我們寶貴的團隊成員的貢獻促成的。感謝 Mark Stuart、Joey Nenni、Walmik Deshpande 和 Miriam Goldberg,感謝他們願意接受採訪並分享他們的經歷。非常感謝 Mark Stuart 在 PayPal 中領導 GraphQL 的採用,激勵我分享我的 GraphQL 經驗,並激勵我們的開發者社區。

作者介紹:

Shruti Kapoor 是 PayPal 的軟件工程師、freecodecamp 和 codeburst 的作家,寫一些 JavaScript 相關的內容。Twitter:shrutikapoor08

原文鏈接:

https://medium.com/paypal-tech/graphql-at-paypal-an-adoption-story-b7e01175f2b7

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/JeONdEN6swrMHJeSZ89zaQ