題目與適用場景
提供者希望在遷移窗口後移除 /v1/items,但用戶端屬於不同團隊,其中一些長期不活躍。假設提供者能按用戶端身分觀察請求,並可並行執行 /v2/items。方案必須區分棄用通知和移除日期,保留安全回退,不能假設只靠回應標頭就能遷移用戶端。
面試官考察點
- 區分協定提示、文件、用戶端清單和執行措施。
- 設計增量相容與可度量的遷移門檻。
- 處理未知用戶端、長期整合和緊急回滾。
- 選擇狀態碼和回應標頭,不超出標準定義自行發明語意。
回答前需要釐清的問題
確認用戶端是否傳送穩定身分、/v2 是否能增量相容、最短支援期、合約通知要求,以及移除前是否能只讀。若缺少身分,遷移證據應來自憑證、網路中繼資料或明確註冊,而不是猜測 User-Agent。
30 秒回答框架
我會盤點呼叫方,發布版本化遷移指南,增量上線 /v2,並按用戶端測量流量和錯誤對等性。給 /v1 回應加標準 Deprecation 訊號和 Sunset 日期,同時提供儀表板並通知已知負責人。保持舊路徑到明確窗口結束,滿足證據門檻後才執行,返回有文件的終止回應和遷移連結。用功能開關和可逆路由支援關鍵用戶端出問題時回滾。
分步深入解答
1. 建立相容性和證據
定義欄位差異、預設行為、分頁、錯誤和驗證變化。對兩個版本執行契約測試並比較代表性回應。指標按用戶端、版本、端點、狀態和遷移階段標記;不能只看彙總流量,因為低流量用戶端可能很關鍵。
2. 精確表達棄用訊號
Deprecation 回應標頭表示資源已棄用;Sunset 回應標頭表示計畫停止提供的日期。它們只是訊號,不能保證每個用戶端都會理解。文件和負責人通知中重複日期,並在回應體或 API 協定定義的 Link 關係中提供穩定遷移引用。
3. 分階段遷移與執行
先發出警告並建立儀表板,再要求未達目標的用戶端申請明確例外。提供影子比較或選擇加入的流量後再切換預設版本。執行門檻到達後,只拒絕可以安全退役的舊操作,返回機器可讀錯誤並保留支援路徑。風險不同的場景可讓只讀相容期長於寫入相容期。
4. 讓回滾和治理可執行
在變更記錄中保存日落日期、負責人、例外原因和審批。監控遷移後的錯誤差異和未知用戶端請求。舊路徑透過功能開關路由,回滾只需改設定而非重新部署。移除後保留足夠長的遙測和墓碑回應,解釋失敗但不洩露密鑰。
高品質示範回答
我會先盤點 1 萬個呼叫方,明確 /v1 到 /v2 的協定差異。兩個版本並行運行,按用戶端收集指標並執行契約測試。/v1 回應攜帶 Deprecation 和 Sunset 訊號,文件與負責人通知重複日期和步驟。提供者經過警告、選擇加入、預設 v2、執行四階段,並支援明確例外和機器可讀終止錯誤。功能開關保證可回滾,日落門檻依據用戶端證據,而不是彙總流量百分比。
常見錯誤
- 認為回應標頭會自動遷移 → 許多用戶端會忽略 → 結合標準訊號、負責人發現和遷移指南。
- 沒有清單就設定日期 → 休眠但關鍵的用戶端會突然失敗 → 要求用戶端身分和例外審查。
- 只比較總錯誤率 → 單一租戶故障會淹沒在平均值裡 → 監控每用戶端對等性和流量。
/v2上線後立即刪除 → 用戶端沒有相容證據 → 先並行或選擇加入。- 回滾必須重新部署 → 故障時恢復緩慢 → 用可逆開關路由版本。
- 日落時返回無文件的 404 → 自動化無法區分退役和拼寫錯誤 → 發布穩定終止錯誤和遷移引用。
追問及應對
用戶端從不傳送身分標頭,遷移門檻是什麼?
使用提供者已有的憑證、帳戶、網路或註冊身分。沒有可靠身分時延長舊端點支援期,並在執行前要求明確註冊。
Sunset 日期可以調整嗎?
可以,但必須同步更新變更記錄、文件、回應標頭和負責人通知。把日期當作治理承諾,並持續提醒仍依賴舊路徑的用戶端。
/v2 正確但某個用戶端更慢,怎麼辦?
單獨比較該用戶端的延遲和錯誤預算,再優化或授予有時限例外。沒有證據證明是系統性問題時,不要延長所有用戶端的日落窗口。
如何安全退役寫入端點?
證據門檻通過後停止新寫入,盡可能保留讀取,並讓重試返回確定性終止錯誤。移除前確認下游佇列和稽核記錄不再依賴舊寫入。