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
(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.https://editor.swagger.io/
- 使用Yaml語言, 定義好API接口
- 點選 generate server code, 選擇需要的語言, 即可下載下傳自動生成的相關接口的初始化項目
- 點選 generate client code, 選擇需要的語言, 即可以下載下傳自動生成調用這個接口的用戶端代碼
接口定義檢視工具:Swagger UI
Swagger UI 可以将項目接口自動生産具有互動的html頁面, 是一個前端頁面的自動生成項目. Swagger UI的 demo見:
swagger ui demo.
(2)接口實作階段
按節奏逐漸實作接口的能力。
- 對于已實作的能力,要清晰描述能力
- 對于在在研的能力,要描述清晰狀态
後端服務工程引入swagger的依賴
<dependency>
<groupId>io.springfox</groupId
<artifactId>springfox-swagger2</artifactId
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId
<artifactId>springfox-swagger-ui</artifactId
<version>2.7.0</version>
</dependency>
生成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/apigatewayAPI 網關(API Gateway),提供API托管服務,涵蓋API釋出、管理、運維、售賣的全生命周期管理。輔助使用者簡單、快速、低成本、低風險的實作微服務聚合、前後端分離、系統內建,向合作夥伴、開發者開放功能和資料。
- 提供防攻擊、防重放、請求加密、身份認證、權限管理、流量控制等多重手段保證 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 的運維成本。
- 提供可視化的界面調試工具,快速測試,快速上線。