2017-07-27 73 views
0

我們有一個ProductsAPI來瀏覽我們網站上的產品,這些產品已被我們的移動應用程序使用(Android & iOS)。以下爲基本設計:使用HATEOAS對耦合RESTful API進行版本控制

URL: /api/products/ 
Response: 
[ 
    { 
     "id" : 123, 
     "name" : "abc", 
     "detailsUrl" : "/api/products/123" 
    }, 
    { 
     "id" : 124, 
     "name" : "xyz", 
     "detailsUrl" : "/api/products/124" 
    } 
] 

這裏,detailsUrl包含ProductDetails頁面的API URL。

現在,我們需要在新版本的應用中對ProductDetails API的響應進行一些更改,並且需要對其進行版本管理。 URL將更改爲 - /api/v2/products/{id}(我們使用通過URL進行API版本控制)。

由於我們不希望在以前版本的應用中使用新的響應,因此我們需要創建一個新版本的ProductsAPI,這也將發送新的ProductDetailsAPI url作爲迴應。

API以這種方式耦合。如果我們更改任何子API的版本,則父API版本也需要更改。建議如何處理這個問題?我們是否應該改變API版本的使用方式(使用頭文件或其他)?

回答

1

我會推薦一個全新的版本,所以父母和孩子都將/v2添加到他們的URL或使用媒體類型。媒體類型的想法是,客戶端發送Content-Type標題來指定應該爲每個資源返回哪個版本的響應。使用這種方法避免了重新版本整個API,但確實意味着對每個端點進行版本檢查。

正在使用的媒體類型的一個很好的例子是GitHub API,您可能會發現在這裏閱讀文檔很有用:https://developer.github.com/v3/media/

相關問題