簡體   English   中英

版本化RESTful服務?

[英]Versioning RESTful services?

我在http://example.com/v1/SomeResource上部署了RESTful Web服務。 有一天,新的協議版本( 不向后兼容 )被部署到http://example.com/v2/SomeResource 從客戶端看,此升級可能在兩個HTTP請求之間的任何時間發生。

服務器如何向客戶端指示它不再支持v1調用,並且客戶端應該升級到v2? 我可以使用適當的響應代碼嗎?

我想向客戶提供以下信息:

  1. 發生了不兼容的升級。 客戶端無法使用新服務,因為協議可能完全不同。
  2. 新客戶端軟件的URL。
  3. 向用戶解釋他們必須升級的消息。

我推薦Peter Williams的以下文章

最佳實踐:

最好將版本控制保留在URL之外,並使新資源向后兼容舊版本。

向后兼容:

如果您必須將v1保留在URL中,並且正在制作v2 URL,那么您必須決定是否要支持這兩種格式,或者使舊的v1過時。 如果您決定使舊的v1過時,那么我建議為請求v1 URL的任何人返回303或401。

使舊網址過時:

我建議使用303見其他。 或者,如果沒有關聯的重定向,則使用410 Gone。

資源

303見其他

可以在不同的URI下找到對請求的響應,並且應該使用該資源上的GET方法檢索。 此方法主要用於允許輸出POST激活的腳本以將用戶代理重定向到選定的資源。 新URI不是最初請求的資源的替代引用。 303響應絕不能被緩存,但對第二個(重定向)請求的響應可能是可緩存的。

不同的URI應該由響應中的Location字段給出。 除非請求方法是HEAD,否則響應的實體應該包含一個帶有指向新URI的超鏈接的短超文本注釋。

注意:許多pre-HTTP / 1.1用戶代理不了解303狀態。 當考慮與這樣的客戶端的互操作性時,可以替代地使用302狀態代碼,因為大多數用戶代理對302響應做出反應,如針對303所描述的。

記錄一切:

需要關注的主要問題是您選擇返回的內容,只需在文檔中記錄即可。 您可以決定服務的工作方式,其他想要使用它的人也會遵循文檔。

我認為你不應該首先這樣做,但可能為時已晚。

URI也應該是靜態的,以便在資源更改或服務實現發生更改時,鏈接保持不變。 這允許書簽。 在URI中編碼的資源之間的關系保持獨立於存儲它們的關系的方式也很重要。

從文章RESTful Web服務:基礎知識

我建議改為使用301(301 Moved Permanently)。 了解原因

希望它有所幫助,Bruno Figueiredo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM