1. 程式人生 > 實用技巧 >Nginx居然還能實現Restful介面的版本控制,漲知識了

Nginx居然還能實現Restful介面的版本控制,漲知識了

1. 前言

軟體迭代是開發者必須面臨的問題,現在有一個容易被大家忽略的問題就是 API 的版本控制。不是所有的使用者都熱衷於最新的版本的軟體,而業務又是多變的。因此當新版本釋出時要確保向後相容,所以就需要 API 的版本控制。今天就來探討一下常用的 Restful API 版本控制。

2. API 版本控制

Restful API 版本控制與業務息息相關,但是目前很多水平一般的產品經理不會考慮這些,沒有平穩的過度就容易造成業務動盪,影響品牌形象和使用者體驗。

主版本一致性策略

當業務變動對以往的客戶端造成破壞性,無法相容時,我們應該將此次業務的釋出版本作為一個主版本(Major)來發布,否則以一個次要版本(Minor)來發布。

Nginx居然還能實現Restful介面的版本控制,漲知識了

版本示意圖

客戶端應該檢驗自身主版本號(上圖中的 1)與服務端主版本的一致性,當不一致時可要求使用者升級。這種控制是最簡單、最硬核的。但是不是所有的場景都適合這種方式,有時候我們需要支援多版本的客戶端並行的情況。

多版本並行

多版本並行都要求客戶端在請求時攜帶版本標識,通常有以下幾種做法。

在 URI 中標記版本

胖哥在以往文章的教程中多用這種方式,在所有的 URI 前增加/api/v1,其中1就是版本號,是可迭代的。

在 Host 中標記版本

你也可以通過 Host 來指定版本,如https://v1.myapi.com、https://v2.myapi.com分別指向了不同的版本,這種使用的也是目前比較多的。

在 Header 中宣告版本

上面兩種會帶來版本號爆炸的情況,所以儘量在重大改版中使用。為了保證 API 的一致性,也可以在請求頭中設定版本號,例如:

Nginx居然還能實現Restful介面的版本控制,漲知識了

Nginx居然還能實現Restful介面的版本控制,漲知識了

我們通過在 Header 中新增Api-Version來標識我們期望請求的 API 版本。

3. 如何路由

多版本的情況下路由就是一個問題,這就需要結合應用的部署方式來談,如果是單應用多版本,需要我們編寫過濾器,攔截器來進行路由,這裡 URI 方式是一個例外,URI 的版本控制的最小粒度已經是介面了。這種方式一般用於中小型專案比較多。

如果你是在 A 伺服器跑v1版本,B 伺服器跑v2版本,就需要藉助於閘道器、代理來進行路由了,無論你版本號宣告在哪裡。以請求頭攜帶版本號由 Nginx 路由為例:

Nginx居然還能實現Restful介面的版本控制,漲知識了

Host、URI 也可以進行類似的路由分發。

高頻面試題答案文件獲取,新增VX:MXW5308 即可免費獲取

(視訊教程+面試寶典+pdf書籍+筆記+學習思維導圖 )

Java進階架構師視訊教程:價值上萬足足100G、1000+小時架構師教程.,Java程式設計師進階架構師看這個就夠了!

程式設計師必備演算法教程:有史以來最全阿里、騰訊、位元組、美團、谷歌演算法面試題合集

Java面試教程合集:2020年覆盤阿里、位元組、美團、騰訊、谷歌Java面試(大廠必問108個知識點)