1.問題描述
1.1 背景
大中型產品研發中,由於參與人員過多的原因,手機應用程序、後端服務研發通常會拆分開,由不同的團隊負責。這即促進了專業領域的聚焦,又減少了團隊管理與溝通的複雜度。
1.2 現象
好現象
- 內部溝通效率得到提升:手機應用程序、後端服務研發團隊內部討論、傳遞的信息都是和絕大數人有關的信息;溝通網絡效應造成溝通負擔得到遏制。
- 大部分人聚焦內部,少數人做邊界溝通,緩解溝通能力的要求。
- 各自內部迭代速度加速。
壞現象
- 組織牆阻隔了團隊間集體感。
- 由於缺乏跨組織交流,對合作團隊工作認同感降低。
- 前後端聯調滯後,導致項目中後期問題激增,團隊氛圍惡化,項目延期。
1.3 影響
- 產品發佈節奏放緩。
- 產品研發成本增加。
- 技術方案傾向於團隊折中、妥協,而非基於產品發展。
2.主因分析
核心原因在溝通阻力增加和利益不一致。
原因 1:溝通阻力增加
- 術業有專攻,且缺少天天耳濡目染,對跨組織的工作越來越不理解。
- 因物理和心理兩個維度上距離增加,導致小問題得不到及時暴露和解決。如接口的定義、參數的設計、業務邏輯的真正討論,被延期到集成階段。
- 工作排期聚焦內部,對於彼此協調、依賴的事項關注不足。
原因 2:利益不一致
- 獨立 KPI 考核
- 獨立研發計劃
- 前端應用面臨海量客戶的壓力,後端面臨多個前端應用需求的壓力
3.項目治理方案
- 建立持續交付的工作模式,以持續交付用戶價值為共同目標。
- 建立跨組織的產品級路線圖。
- 建立以產品經理和系統架構師為核心的跨組織領導體系,擁有決策權和評價權。
- 後端服務團隊的接口人以虛擬角色形式,參與到前端團隊的研發管理,包括日會、技術會。
- 建立面向接口的開發模式。
- 定期組織跨組織的團隊建設活動。
4.實施方案
4.1 組建階段
- 明確授權產品經理、產品級架構師
- 統一研發基礎設施,包括接口設計與發佈流程
- 統一溝通工具,制定溝通計劃
- 統一迭代節奏
4.2 實施階段
- 保持後端團隊代表的有效參與前端團隊,需產品經理、架構師監督。
- 保持按節奏持續發佈至測試環境,包括前端、後端,讓問題在有限時間內得到暴露和解決
4.3 接口開發技術
方案一:基於 Swagger
基於接口設計、描述框架 Swagger (https://swagger.io/),構建基於接口的研發流程。
- 後端服務即 API 文檔,前端團隊清晰瞭解接口能力,利於持續集成。
- 後端持續發佈接口能力,簡化 API 文檔維護成本。
- 需要前後端團隊遵循開發流程,提高項目的整體效率,而非單次溝通效率。
Swagger - Simplify API development for users, teams, and enterprises with the Swagger open source and professional toolset. Find out how Swagger can help you design and document your APIs at scale.
by https://swagger.io/
(1)接口設計階段
針對業務需求清晰的接口,即通過規劃的接口,啟動基於Swagger的接口設計。
- 側重基於真實服務代碼描述接口設計
- 不做功能的有效實現
- 將設計通過的接口,發佈到測試環境,供前端團隊查閱和開發聯調
接口設計規範:OpenAPI Specification
https://swagger.io/resources/open-api/
接口設計工具:Swagger Editor
Design, describe, and document your API on the first open source editor fully dedicated to OpenAPI-based APIs. The Swagger Editor is great for quickly getting started with the OpenAPI (formerly known as the Swagger Specification) specification, with support for Swagger 2.0 and OpenAPI 3.0.
- 使用Yaml語言, 定義好API接口
- 點擊 generate server code, 選擇需要的語言, 即可下載自動生成的相關接口的初始化項目
- 點擊 generate client code, 選擇需要的語言, 即可以下載自動生成調用這個接口的客戶端代碼
接口定義查看工具:Swagger UI
Swagger UI 可以將項目接口自動生產具有交互的html頁面, 是一個前端頁面的自動生成項目. Swagger UI的 demo見: swagger ui demo.
(2)接口實現階段
按節奏逐漸實現接口的能力。
- 對於已實現的能力,要清晰描述能力
- 對於在在研的能力,要描述清晰狀態
後端服務工程引入swagger的依賴
io.springfoxspringfox-swagger22.7.0io.springfoxspringfox-swagger-ui2.7.0
生成API的server stub和client SDK
Swagger Codegen can simplify your build process by generating server stubs and client SDKs for any API, defined with the OpenAPI (formerly known as Swagger) specification, so your team can focus better on your API’s implementation and adoption.
(3)接口設計變更
後端人員無需關注Swagger描述文件和接口文檔,有需求變更導致接口變化,直接寫代碼就好了。把調用層的代碼做個修改,然後生成新的描述文件和接口文檔後,給到前端即可。
方案二:基於阿里雲 API 網關
https://www.aliyun.com/product/apigateway
API 網關(API Gateway),提供API託管服務,涵蓋API發佈、管理、運維、售賣的全生命週期管理。輔助用戶簡單、快速、低成本、低風險的實現微服務聚合、前後端分離、系統集成,向合作伙伴、開發者開放功能和數據。https://www.aliyun.com/product/apigateway
- 提供防攻擊、防重放、請求加密、身份認證、權限管理、流量控制等多重手段保證 API 安全,降低 API 開放風險。
- 提供 API 定義、測試、發佈、下線等全生命週期管理,並生成 SDK、API 說明文檔,提升 API 管理、迭代的效率。
- 提供便捷的監控、報警、分析、API 市場等運維、運營工具,降低 API 運營、維護成本。
API 網關功能
- API 生命週期管理
- 支持包括 API 發佈、API 測試、API 下線等生命週期管理功能。
- 支持 API 日常管理、API 版本管理、API 快速回滾等維護功能。
- 全面的安全防護
- 支持多種認證方式,支持 HMAC (SHA-1,SHA-256) 算法簽名。
- 支持 HTTPS 協議,支持 SSL 加密。
- 防攻擊、防注入、請求防重放、請求防篡改。
- 靈活的權限控制
- 用戶以 APP 作為請求 API 的身份,網關支持針對 APP 的權限控制。
- 只有已經獲得授權的 APP 才能請求相應的 API。
- API 提供者可以將調用某個API 的權限主動授予給某個APP。
- 若 API上架到 API 市場,購買者可以將已購買的 API 授權給自己的 APP。
- 精準的流量控制
- 流量控制可以用於管控 API的被訪問頻率、APP的請求頻率、用戶的請求頻率。
- 流量控制的時間單位可以是分鐘、小時、天。
- 支持流控例外,允許設置特殊的 APP 或者用戶。
- 請求校驗
- 支持參數類型、參數值(範圍、枚舉、正則)校驗,無效校驗會被 API 網關直接拒絕,以減少無效請求對後端造成的資源浪費,大幅降低後端服務的處理成本。
- 數據轉換:通過配置映射規則,實現前、後端數據翻譯。
- 支持前端請求的數據轉換。
- 支持返回結果的數據轉換。
- 監控報警
- 提供可視化的API實時監控,包括:調用量、流量大小、響應時間、錯誤率,在陸續增加維度。
- 支持歷史情況查詢,以便統籌分析。
- 可配置預警方式(短信、Email),訂閱預警信息,以便實時掌握API運行情況。
- 自動工具
- 自動生成 API 文檔,可供在線查看。
- API 網關提供多種語言 SDK 的示例。降低 API 的運維成本。
- 提供可視化的界面調試工具,快速測試,快速上線。