JAX RS入門 十 相容與演進

2021-09-01 06:59:36 字數 1314 閱讀 2403

網路服務會隨著時間的發展再不斷進化,例如:新增新的特性;擴充套件資料集;資料格式的改變和演化。你怎麼來管理這些變化呢?怎麼讓以前的使用者能夠在舊版本上執行呢?

將應用模組會可以解決這些問題中的大多數。下面就討論一些在開發應用時需要有的設計和決策,以適應這些可能的變化。

一、建立新的media type

rest的乙個重要準則是將你的資源的複雜性隱藏在你的變換資料後面。然後uri可以是不變的,但是資料格式會不變演進。需要記住的、非常重要的一點就是當你做計畫時,考慮好你的應用怎麼去應對版本管理。

因為複雜性限制在資料格式中,客戶端可以使用media type去請求不同的格式版本。乙個常用的,致力於解決這個問題的方法就是使用你的應用去定義乙個新的media type。 乙個指導準則就是使用vnd字首,乙個新格式的名字,和乙個具體的,以+號分隔的media type字尾。假設我們說red hat公司有乙個管理使用者的特定的xml格式,則media type名可能如下:

vnd表示**商,rht表示red hat,customers代表我們的使用者資料格式。以+xml結尾,讓使用者知道這個資料格式是基於xml的。同樣的對json:

有了乙個新的media type,下面就是追加版本資訊,這樣老的使用者還可以使用老版本的資料:

保持子型別名不變,通過指定乙個屬性來指定版本號。這樣隨著時候的推移,只需要提公升版本號以表示資料的格式變化。

二、靈活的schema

通過在media type中使用版本屬性,我們就可以很好的管理和緩解服務或應用的變化。 不過,雖然在media type版本資訊是相當有用的,但是它不應該是你管理變化的第一選擇。 當定義和初始化乙個新的資料格式時,尤其要注釋向前相容性。

例如對於xml schema,最初的schema應允許每個schema型別能夠擴充套件或自定義新的元素或屬性。例如:

上例中,schema允許新增任意的屬性和任意的元素。如果新版本的資料型別保留了最初的資料結構,則老版本的客戶端仍然可以驗證和處理他們接收到的新的資料格式。

例如以下為新的schema,定義了新的屬性和元素,但是必須注意:這些新元素或屬性需要設定為optional的

這裡我們新增加了一些元素,並使得他們是可選的。因此舊版本依然可以put和post舊的、仍然有效的資料格式。

如果你結合了可擴充套件的、向前相容的schema以及media type版本,那你就真正擁有了乙個資料格式可公升級的系統。版本依賴的客戶可以使用media type版本去請求指定的版本資料;未依賴於版本的客戶可以請求和傳送他們理解的版本。 

QT入門(十) 滑動條與進度條

效果,拖動橫著的滑動條,帶動豎著的滑動條和進度條一起動 ui介面中的重要屬性 在.cpp檔案中也可以手動 設定 mainwindow mainwindow qwidget parent qmainwindow parent ui new ui mainwindow 在滑動條中,滑鼠把小方塊拖動到哪乙...

React全家桶入門之十 登入與身份認證

細緻想想。我們的後台系統還沒有乙個登入功能,太不靠譜,趕緊把防盜門安上!spa的鑑權方式和傳統的web應用不同 因為頁面的渲染不再依賴服務端,與服務端的互動都通過介面來完畢,而reastful風格的介面提倡無狀態 state less 通常不使用cookie和session來進行身份認證。比較流行的...

LabVIEW入門第十天(常用迴圈與結構體)

迴圈的含義,及重複性的去做某一件事,當達到某一條件時停止。基本常用迴圈與結構體 for迴圈 while迴圈 條件結構 事件結構 順序結構 程式框禁用結構,如下圖所示 1.for迴圈 for迴圈,與c 類似,是可以設定迴圈次數的迴圈體,如下圖所示 它由迴圈次數和執行次數組成的迴圈,使用時會根據你所設定...