簡體   English   中英

如何在REST API URI地址中進行版本控制?

[英]How to do versioning in the REST API URI address?

我正在尋找對Spring REST API的URI進行版本控制的方法,因為在啟動新應用程序的情況下,REST API會在一定時期內處理新應用程序並支持舊應用程序請求。 但是我不確定何時將版本添加到URI時通常使用什么數據庫,系統實體和URI。

例:

沒有版本,要求提取所有用戶:

http://host:8080/api/users

使用版本控制:

http://host:8080/v1/users

http://host:8080/v2/users

http://host:8080/v1/products

我當時正在考慮制作一個User實體,並且在定義屬性時我注意到它們不是強制性的,並且該實體始終是最新版本。 對於URI的“ v2”版本,我創建了一個UserV2DTO,以便它主要為用戶實體提供服務,並使用所需的批注進行驗證。 對於URI的“ v1”版本,假設用戶不具有“ dateBirth”屬性,以這種方式,它接收不具有dateBirth屬性的UserV1DTO,並且在將DTO轉換為Entity時,該Entity .dateBirth屬性為null,因為是必需的。

我想知道這是否是正確的版本控制形式,因為在數據庫中屬性不是強制性的,而強制性驗證在DTO中進行? 我也想知道是否需要將所有資源的所有URI都更改為最新版本,或者在“產品”的情況下是否可以將其保留在V1中,直到有一天需要僅更改?

如何在REST API URI地址中進行版本控制?

真正的答案? 您想要的任何方式都符合您當地的慣例。

在REST中,URI只是標識符。 實際上,它們是用於在緩存中查找信息的鍵。 服務器自行決定是否將信息嵌入URI,並僅供其專有使用。

Roy Fielding在領導HTTP / 1.1規范工作的同時定義了REST ,他寫道

制作真正的REST API的原因是為了獲得可擴展性……“ v1”是API客戶的中指,表明RPC / HTTP(不是REST)

例如,考慮一下Google-多年來,您認為他們有多少種不同的網絡搜索實現方式? 但是API本身是穩定的:導航到加標簽的主頁,在搜索表單中輸入數據,提交-將數據分派到表單元數據中描述的URI。

當然,即使您不進行REST,您仍然可能想要合理的URI設計。 當涉及到相對URI時 ,使用路徑段對資源層次結構進行分區是有優勢的,因為隨后您可以使用點段在層次結構中生成其他標識符。

/v1/users + ../products -> /v1/products

如果您清楚地知道每個版本中是否確實有一個新資源 ,或者是一個具有不同表示形式的共享資源,那么以后的工作將可能會容易得多 如果有人更改了/v2/users ,那是否也應該更改/v1/users 正確的緩存失效語義是什么?

暫無
暫無

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

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