對於支票2,這取決於您的客戶在哪裏或如何使用。這也依賴於客戶端代碼是否是你的控制之下
如果你的客戶是
- 一個Java庫,再加入已過時警告日誌。
- 一個js庫運行的是瀏覽器,然後控制檯警告/錯誤可能會有所幫助,但大多數這些被忽視。
- 任何其他語言 - 使用其各自的警告或棄用系統。
- 如果它是具有UI的企業應用程序,那麼在UI上顯示錯誤消息也會得到正確的關注。對於面向非企業客戶的UI應用程序錯誤,這將無濟於事,因爲普通用戶大多無法做任何事情。
另一個硬盤的方式(這可能不是在面對客戶的情況下,可以接受的)
如果客戶端源代碼在你的控制,那麼你可以開始打破調用舊版本的API之前,你實際上將其刪除從服務器。讓我解釋我的意思。現在
您的客戶端有一個調用函數getData(params: ParamType)
,也是你的客戶在客戶端檢查平坦的setter函數爲useDeprecated(value: Boolean)
你getData(params: ParamType)
如果客戶端可以調用的API已過時,如果不允許客戶端則拋出錯誤。
interface Client {
//Clients extend this interface
void useDeprecated(boolean deprecated);
default boolean isDeprecated(int serverVersion, int clientVersion) {
// you can string for representing versions as well.
// complicated logic of deprecation here
return result;
}
boolean isAllowedToUseDeprecated();
default Object getData() {
if(isDeprecated(serverVersion, clientVersion)) {
if(isAllowedToUseDeprecated()) {
return getDataFromServer();
} else {
throw new DeprecatedException(expectedVersion, actualVersion, message);
}
} else {
return getDataFromServer();
}
}
Object getDataFromServer(); //Clients implement this
}
假設您的當前版本是2.1.1(211 in int),並且您希望棄用先前的版本2.0.0(200)。然後客戶端使用2.0.0將開始獲得DeprecatedException
這有什麼用?
當一個API被棄用時,客戶端將開始獲得DeprecatedException
,他們的調用將失敗,但他們可以應用useDeprecated(value: Boolean)
來設置標誌並繼續使用棄用的API。這給客戶帶來了貶值的通知,也爲他們提供了短期的緊急緩解措施。
這個硬性方法對於內部團隊來說效果最好,只有當客戶端來源在你的控制之下。
請務必事先通過警告和控制檯消息進行良好的溝通棄用,並通過郵寄等
我的客戶有一個MMC插件(用C#編寫的),這是我們的控制和Python的自動化腳本這是下在QE的控制之下。你給了我一個非常好的例子,當客戶端用舊版本發送REST請求時,我可以在REST響應中拋出一個帶有警告消息的DeprecatedException,然後客戶端可以爲以下REST請求添加一個參數useDeprecated = true,以強制服務器接受其請求。感謝提示。 – Lee
@李:很高興我能幫到你。 :) – faizan