從前浪漫的聯調時光,現在回不去了

pont

前情提要

在項目研發階段,各端會把接口約定寫在接口文檔上,集團內有 Rap、DIP,開源的有 Swagger、MockJs,更有團隊用 lark,甚至 Office Word。不管用什麼,有一份清晰接口文檔,能減少很大的溝通成本和維護成本。

寫接口文檔的時候拼錯了接口地址、前端拼錯了字段名、後端接口做了變更卻沒有同步到接口文檔,凡此等等。這些現象都很正常,無可厚非。所以我們要去聯調,調這些接口約定的一致性。我們還要在後續項目的維護中,圍繞着殘餘或新增的各種不一致的約定,不斷地消耗精力。

代碼一次編譯運行通過,是每個工程師的理想和追求。但是到了工程層面,堅實的磚塊不一定造的出牢固的橋。各端銜接的自動化和工程化,往往被人忽略,但大有可爲。在這方面上,我們自研並開源了 pont。其主要原理是通過分析各種接口平臺的數據產生一個 Typescript 類型完美、正確可靠的 API 代碼庫。

按慣例,我們先吹牛

pont 是以 IDE 插件的形式來服務的,以下列舉一些 pont 的特性:
用 pont 查找接口

接口 url,method 都不需要關心,也不怕傳錯

當你在開發界面和接口文檔頁來回切換看接口參數的時候,我們是這樣的

接口返回結構清清楚楚:

再也不用害怕參數傳錯:

返回字段也不怕拼錯:

後端接口更新的時候,也許你比他更早發現!第一時間修復接口更新導致的問題,前端兼容接口更新幾乎零成本:

pont 接入非常簡單,但工程意義很大。 pont 已經在筆者團隊穩定運行半年了,對項目研發和維護都起到了很大的作用。筆者通過此文將 pont 安利給大家,希望 pont 能對更多得團隊和項目產生幫助。

pont 是什麼

pont 在法語裏是橋的意思,寓意着前後端之間的橋樑。

pont 做的事情,就是把 swagger、rap、dip 等多種接口文檔,轉換成一份接口元數據以及一份Typescript API。其中 swagger 數據源的方式,已經在我們團隊所有中穩定使用了半年了!項目中碰到的各種定製化需求也都可以毫無壓力的滿足。所以本文主要以 swagger 爲例來介紹 pont,安利給大家。(其它的接口平臺,也可以簡單地通過寫一份數據源格式轉換程序來支持)

Swagger

相對於其他接口平臺, swagger 是使用最爲廣泛的,這裏也順帶介紹一下。swagger 通過分析服務端代碼,自動產生一份接口文檔的元數據。通過這份元數據,swagger 再提供由這份元數據產生的接口測試、接口 mock 數據、接口文檔界面等服務。

pont 服務方式

pont 目前主要以 IDE 插件的形式提供服務,目前只提供了 vscode 插件。不過通過 pont-engine 內核,可以很方便地支持更多的 IDE 。

pont-demo 是我用 pont 生成代碼的一個示例,讀者可以 clone 下來在 vscode 上體驗效果。

只要項目中任意位置包含合法的 pont-config.json 文件,插件便會啓動。
插件提供的功能如下:

  • 接口查找

    -接口按需更新

vscode 底部會一直顯示最新的後端接口與當前的API差異狀況。

例如點擊上圖中的 mods(2),vscode 彈出模塊的差異詳情。工程師可視情況點擊更新模塊或基類。

  • 其它

1、pont 會不斷地請求接口文檔,並重新計算 API 更新情況。不過輪詢頻率不高,偶偶後端更新了,前端需要馬上跟着改,這時可以點擊 sync 按鈕手動同步遠程數據。
2、點擊 all 按鈕,可以全量更新模塊和基類。

3、上述的更新操作只是更新了本地的接口元數據,點擊 generate 按鈕,纔會通過本地接口元數據來更新代碼。
pont 工作流程
插件基本工作流程如下所示:

pont 接入

1、pont 暫時支持 Swagger。
2、在項目中任意位置新建 pont-config.json 文件。示例配置如下:

{
  // 配置代碼模板
  "templatePath":"./template","outDir":"../src/services",
  // 數據源
  "originUrl":"http://your-service-hostname/v2/api-docs",
  // 配置代碼風格
  "prettierConfig":{"printWidth":120,"singleQuote":true,"trailingComma":"none","jsxBracketSameLine":true}
  }

配置內容詳細介紹請參看 pont 文檔。

Typescript 類型推導

使用 Typescript 結合 Pont 功能更加強大。

Typescript 的類型推導能力很強大。一個 Typescript 項目只需要保證原始類型完美,Typescript 會幫我們推導出各種衍生類型,這樣整個項目就可以保持類型完美。

一個 Typescript 項目,其原始類型一方面是業務模型、一方面是產品需求規格。現在業務模型類型,pont 已經可以完美提供了(基類),用戶只需要自己定義產品需求規格帶來的少量類型定義

然而有了完美的原始類型,如果大家在寫 Typescript 過程中,類型推導使用不當,導致類型丟失,那就不應該了。

順帶提一下 redux 這種類型不友好的框架,正確使用類型推導很難。好在筆者還提供了 iron-redux ,Redux + Typescript 項目必備!

最後

另外如果大家使用 pont 有任何的問題和建議,歡迎來騷擾筆者。筆者也希望感興趣的小夥伴一起來把 pont 建設的更加強大。

關於我們

我們是阿里巴巴-數據技術及產品部-體驗技術團隊, 主要支撐 QuickBI, FBI 等數據產品,團隊技術好、大神多、妹子也多。並且BU業務發展迅速,招聘要求也相對寬鬆,如果有興趣,歡迎隨時勾搭(勾搭必回覆)~~~
如果你有興趣加入我們,也可以將簡歷直接發送到我的郵箱 [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章