餓了麼API Everything解決了前後端開發之間的所有問題?

餓了麼API Everything解決了前後端開發之間的所有問題?

內容來源:2018 年 01 月 05 日,餓了麼研發總監梁向東在“2018移動技術創新大會【行業技術落地案例專場】”上進行的《餓了麼API Everything的實踐》演講分享。IT 大咖說作為獨家視頻合作方,經主辦方和講者審閱授權發佈。

閱讀字數:2600 | 7分鐘閱讀

獲取嘉賓演講視頻及PPT,請複製:http://t.cn/EZid1TC,粘貼至瀏覽器即可。

餓了麼API Everything解決了前後端開發之間的所有問題?

摘要

本次分享將詳細介紹餓了麼API Everything框架概念以及構成部分,對比傳統開發解決了那些問題,又有那些有待解決的問題。

什麼是API Everything

簡單來說就是後端服務通過API的形式對外暴露,作為前端訪問後端的中間層。API Everything會將SOA服務接口適配給外部各端進行訪問。

餓了麼API Everything解決了前後端開發之間的所有問題?

為什麼需要API Everything

我們在之前的開發中後端沒有分層,是直接在Web API層寫業務邏輯,甚至直接訪問數據庫。但是Web API的風格存在差異,不利於團隊間的溝通合作。

API文檔也容易過時,不能及時反映代碼的變更情況。另一個常見的問題就是前後端開發不同步,前端需要等待後端的API 接口開發完成。

產品技術方案原則

餓了麼API Everything解決了前後端開發之間的所有問題?

我們在構建API Everything框架時所確定的最基本原則是穩定性、性能、高可用以及容錯性。另外為了讓業務團隊能夠自行解決使用API Everything時遇到的問題,還將DevOps中心配置到框架中。

其他一些原則,包括自動化、代碼即文檔、用戶體驗以及功能需求。這其中的代碼即文檔可以將代碼中的註釋給提取出來,使開發者無需另外創建API 文檔。用戶體驗是面向開發人員準備的,讓開發過程能夠更加方便。

生命週期

餓了麼API Everything解決了前後端開發之間的所有問題?

除了對產品原則的考量外,我們還需要考慮整個API的生命週期。API Everything作為SOA與前端之間的中間層,它的生命週期一般由API開發、API管理、API網關、API運維這樣的流程構成。上圖詳細的羅列出了各個生命週期所需要考慮的細節,例如在API開發時就要著手考慮文檔以及Mock的問題,API管理階段考慮訪問權限以及限流、灰度問題。

產品規劃

餓了麼API Everything解決了前後端開發之間的所有問題?

基於對產品原則和生命週期的考慮,我們提出了完善的產品規劃。API Portal負責從代碼中抽出文檔、API Mock、訪問權限、限流灰度以及API拼接剪裁,主要是對API的定義。

在定義完成後由Stargate Cluster來實現功能,包括鑑權認證、協議裝換、監控告警、部署擴容、API拼接裁剪。MockServer中包含的是針對Mock功能的實現,這裡不僅僅是Mock API還有Mock SOA,在SOA沒有準備好前,可以事先通過Mock SOA實現出來。最後的API Robot主要是一些測試相關的功能。

系統交互

餓了麼API Everything解決了前後端開發之間的所有問題?

前端通過Nginx訪問到達圈SOA服務,灰色表示正常訪問服務,紅色則是先通過query string訪問Mock。Stargatecluster會相對API Portal準備好的API定義,去調用SOA服務。API Robot則是消費API定義來進行API測試及迴歸測試。

提高效率 – Automation

  • API文檔生成自動化:代碼註釋和標註寫完,提交代碼,就可以看到API文檔。
  • API代碼自動生成:通過標註將SOA接口自動映射成Http接口,並且生成代碼。
  • API部署自動化:在SOA服務部署的時候,自動部署對應的Web API。
  • API Mock自動生成:根據API Model自動生成Mock數據,支持函數。
  • API自動監控告警:每個應用接入,自動進行全鏈路監控和告警。

StargateCluster技術架構

餓了麼API Everything解決了前後端開發之間的所有問題?

Stargate Cluster是運行在docker環境下的。圖中右上角的ELESS是餓了麼內部的發佈環境,當SOA環境發佈後會調用Stargate_core,然後進入MaxQ,再由Stargate運營管理服務去消費MaxQ,最後通知Stargatenodes進行分析處理。

Stargate Cluster基於Docker部署

餓了麼API Everything解決了前後端開發之間的所有問題?

圖中是Stargate Cluster的具體部署環境,流量先從F5api-xxx.ele.me到達Nginx,再通過upstream抵達Docker環境,最後Docker會將IP註冊到Nginx上。

部署環境

餓了麼API Everything解決了前後端開發之間的所有問題?

圖中是一些部署的log,包括部署消息、是否部署成功以及變更等。

APIPortal – 自動化文檔

餓了麼API Everything解決了前後端開發之間的所有問題?

這份文檔相對前端比較友好,後端可能更喜歡直觀的數據展示。文檔中會有一些討論、版本控制以及變更對比之類的信息。

API -討論

餓了麼API Everything解決了前後端開發之間的所有問題?

在API完成提交到git中後,發佈系統會創建build。buid完成後就會自動化生成API文檔。通過圖中的public APIs就可以通知相關人員API完成的消息,接受到消息的人員可以來到API界面進行討論留言,之後留言將被轉發給API開發人員。

MockServer流程

餓了麼API Everything解決了前後端開發之間的所有問題?

圖中的ServiceProvider需要依賴後面的服務,而通過Mock Server就可以Mock這些服務。

Mock Server – 自動解析

餓了麼API Everything解決了前後端開發之間的所有問題?

將相關的依賴放入Mock中後,Mock Server會自動解析依賴或者API對應架包所包含的方法,並且還能自主添加Mock case。

前後端分離

餓了麼API Everything解決了前後端開發之間的所有問題?

前面我們談論了StargateCluster、API Portal、Mock Server這些可以獨立使用的工具。而在前後端開發分離實踐中這些工具將會被很好的結合在一起。上圖就是整個開發過程的流程圖,能夠看到所有的部分都被有機的結合在一起。

應用實踐——配送範圍迭代

餓了麼API Everything解決了前後端開發之間的所有問題?

我們的前端基本上就是通過API Portal完成Mock相關的部分。後端原本是要寫Web controller,以及相應的測試,現在通過Stargate Cluster可以自動化生成Web API。之前開發中經常會出現部分功能留待聯調期間進行開發的情況,以至於聯調時間變長。而現在前後端是獨自進行開發的,聯調時間明顯減少。

問題解決了?

通過API Everything框架看起來是解決了所有的問題,但是其實還存在不足。

可以自動化迴歸測試嗎?

餓了麼API Everything解決了前後端開發之間的所有問題?

我們設想中API Robot會錄製線上流量,然後進行回放。錄製下來的流量會被回放給到新上線的系統,來測試新系統是否有問題。

而要完成迴歸測試需要錄製很多東西,包括SOA1和SOA2依賴、第三方應用、Redis還有Database。用戶端的至下而上請求同樣需要根據時間點錄製,再進行整合分析抽取出合適的順序,也就是Case。這整個過程可謂相當複雜。

今天的分享就到這裡,謝謝大家!


分享到:


相關文章: