API版本控制

服務(wù)API的版本控制歷來(lái)沒(méi)有一個(gè)完美的解決方案,本篇列出了業(yè)界常見(jiàn)的三類(lèi)API版本控制方案,每一類(lèi)中又有1到2種實(shí)現(xiàn)方式(可能還有更多),看官們可根據(jù)自己項(xiàng)目的規(guī)模和要求選擇適合自己的方案。


1. 強(qiáng)制使用統(tǒng)一API版本

整個(gè)項(xiàng)目使用一個(gè)API版本,每次變更需要考慮向后兼容性,基本原則:只能在原來(lái)的結(jié)構(gòu)基礎(chǔ)上增加屬性,而不能刪除,同時(shí)需要客戶端進(jìn)行配合。

比如:有個(gè)返回值是string類(lèi)型,如果要變成int類(lèi)型,不能改變?cè)瓉?lái)的字段值,只能增加一個(gè)新的屬性,這樣才能保證老版本的正常使用。

缺點(diǎn):返回?cái)?shù)據(jù)過(guò)于冗余,不好判斷哪個(gè)屬性是哪個(gè)版本在用,也就無(wú)法定期下線指定版本。

2. URI中顯式添加版本號(hào)

第一種,把版本號(hào)嵌入到URL路徑中,例如:http://example.com/v3/item/list

第二種,把版本號(hào)放在RequestParam中,例如:http://example.com/item/list?version=3

第一種方便在服務(wù)端用不同的方法進(jìn)行版本區(qū)分,第二種只能在同一個(gè)方法中進(jìn)行判斷區(qū)分。

有點(diǎn):夠直觀,方便調(diào)試。

缺點(diǎn):不符合RestFull原則(原則又不能當(dāng)飯吃,解決問(wèn)題才是王道),版本過(guò)多會(huì)不好控制。

3. 添加頭信息控制版本

第一種,?在Header中添加自定義參數(shù),例如:? api-version: 2?

第二種,在ContentType中添加版本號(hào),例如:Accept: application/vnd.haveibeenpwned.v2+json? 或 Accept: application/vnd.haveibeenpwned+json; version=2.0

優(yōu)點(diǎn):符合RestFull原則,保持各版本的URL一致。

缺點(diǎn):不夠直觀,只能使用帶有設(shè)置header的工具進(jìn)行調(diào)試。

縱觀各大網(wǎng)站的API,使用URL中顯示添加版本號(hào)的最多,添加頭部信息控制版本的次之,幾乎沒(méi)有強(qiáng)制使用統(tǒng)一版本的,so,you know~

關(guān)于版本過(guò)多難于維護(hù)的問(wèn)題,解決辦法是控制API使用周期,最多不超過(guò)5個(gè)版本同時(shí)在使用,并定期下架老舊的API版本。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,711評(píng)論 19 139
  • 做RESTful開(kāi)放平臺(tái),一方面其API變動(dòng)越少, 對(duì)API調(diào)用者越有利;另一方面,沒(méi)有人可以預(yù)測(cè)未來(lái),系統(tǒng)在發(fā)展...
    FrancisSoung閱讀 2,064評(píng)論 2 5
  • 上篇寫(xiě)《聊聊數(shù)據(jù)庫(kù)和緩存同步機(jī)制》的時(shí)候,收到一份讀者留言,希望我來(lái)談?wù)凙PI開(kāi)發(fā)過(guò)程中的版本控制。這是一個(gè)很好的...
    ForestXie閱讀 1,687評(píng)論 1 8
  • 簡(jiǎn)評(píng):這是 fly.io分享的一篇文章,講了他們是怎么對(duì)自家 REST API 做版本控制的。另外還有很多其他的技...
    極小光閱讀 2,846評(píng)論 1 10
  • 一說(shuō)到REST,我想大家的第一反應(yīng)就是“啊,就是那種前后臺(tái)通信方式?!钡窃谝笤敿?xì)講述它所提出的各個(gè)約束,以及如...
    時(shí)待吾閱讀 3,608評(píng)論 0 19

友情鏈接更多精彩內(nèi)容