文章來源地址http://www.zghlxwxcb.cn/news/detail-646261.html
1.?在軟件與外部環(huán)境之間的許多交匯點(diǎn)上,版本控制基本上處于混亂狀態(tài)
1.1.?不應(yīng)該為了更新自身系統(tǒng)的API,而讓服務(wù)消費(fèi)者被迫與你同時(shí)發(fā)布新版本
1.2.?多數(shù)服務(wù)新版本的發(fā)布應(yīng)該具有兼容性
2.?分層的“約定”棧
2.1.?連接握手和持續(xù)時(shí)間
2.2.?請求組幀
2.3.?內(nèi)容編碼
2.4.?消息語法
2.5.?消息語義
2.6.?鑒權(quán)和身份驗(yàn)證
3.?對請求要協(xié)變
3.1.?covariant request
4.?對響應(yīng)要逆變
4.1.?contravariant response
5.?即
5.1.?可以比以往提出的要求更少
5.2.?可以比以往接受的可選信息更多
5.3.?可以比以往返回的響應(yīng)更多
5.4.?可以類比必填參數(shù)和可選參數(shù)
6.?安全的變更
6.1.?在參數(shù)上強(qiáng)制執(zhí)行以前所需約束的子集
6.2.?返回以前可返回值的超集
6.3.?接受以前可以接受的參數(shù)的超集
6.4.?要求必須填寫以前必填參數(shù)的一個(gè)子集
7.?生成式測試技術(shù)
8.?破壞API的變更
8.1.?減少API破壞性變更影響的第一個(gè)先決條件是在請求和回復(fù)消息格式中添加一個(gè)版本號字段
8.2.?為URL添加版本辨別字段,可以用前綴形式或查詢參數(shù)來實(shí)現(xiàn)
8.2.1.?同一實(shí)體的不同表示看起來像是不同的資源,而這在REST世界中是禁忌
8.3.?使用PUT和POST上的Content-Type標(biāo)頭指示正在發(fā)送的版本
8.3.1.?可以為版本定義一個(gè)媒體類型application/vnd.lendzit.loan-request.v1和一個(gè)新的媒體類型application/vnd.lendzit.loan-request.v2
8.3.2.?優(yōu)點(diǎn)
8.3.2.1.?在數(shù)據(jù)庫中存儲的所有URL都可以繼續(xù)工作,客戶端無須更改路由就可升級
8.3.3.?缺點(diǎn)
8.3.3.1.?單單憑借URL已經(jīng)不夠區(qū)分版本了,像application/json和text/xml這樣的通用媒體類型根本提供不了任何幫助
8.3.3.2.?客戶端必須事先知道存在這種特殊的媒體類型,以及所有允許的媒體類型
8.3.3.3.?一些框架雖然支持基于媒體類型的路由,但配置起來會(huì)有難度
8.4.?僅針對PUT和POST,在請求正文中添加一個(gè)字段來指示預(yù)期版本
8.4.1.?優(yōu)點(diǎn)是不需要路由,易于實(shí)施
8.4.2.?缺點(diǎn)是無法涵蓋所需要的所有場景
8.5.?使用特定于應(yīng)用程序的自定義標(biāo)頭指示所需的版本
8.5.1.?可以定義一個(gè)類似api-version的標(biāo)頭
8.5.2.?優(yōu)點(diǎn)是具有完全的靈活性,并且與媒體類型和URL正交
8.5.3.?缺點(diǎn)
8.5.3.1.?要為特定框架編寫路由處理器
8.5.3.2.?這個(gè)標(biāo)頭是另一個(gè)必須與服務(wù)消費(fèi)者分享的秘密
8.6.?服務(wù)提供方都必須在一段時(shí)間內(nèi)同時(shí)支持舊版本和新版本
8.7.?如果要在一些URL中添加版本信息,那么務(wù)必同時(shí)在所有路由中都添加這個(gè)版本
8.7.1.?即使這次變更只涉及一個(gè)路由,也不要強(qiáng)制用戶記住哪些版本號對應(yīng)哪些API
8.8.?只要不影響未來進(jìn)行的變更,盡可能地減少代碼重復(fù)
9.?處理其他系統(tǒng)的版本問題
9.1.?軟件應(yīng)該保持杞人憂天的狀態(tài)
9.2.?雖然請求規(guī)范中添加了一些新字段,但并不意味著所有人都會(huì)遵守新規(guī)范
9.3.?請求端與響應(yīng)端檢查自己是否符合規(guī)范
9.4.?將測試分為不同的部分,有助于隔離通信中的故障,并能使代碼更加穩(wěn)健
9.4.1.?我們不會(huì)再對另一方的行為做出不合理的假設(shè)
文章來源:http://www.zghlxwxcb.cn/news/detail-646261.html
到了這里,關(guān)于讀發(fā)布!設(shè)計(jì)與部署穩(wěn)定的分布式系統(tǒng)(第2版)筆記31_版本問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!