摘要
學習REST是件好事,而將所有學到的概念應用到實際應用程式設計中則完全是另一項挑戰。在本教程中,我們將學習為基於網路的應用程式設計REST API。請注意,整個練習的內容是學習如何在設計過程中應用REST原則。
設計REST服務的步驟:1) 識別物件模型2) 建立模型URI3) 確定表示形式4) 分配HTTP方法5) 更多操作
識別物件模型設計基於REST API的應用程式的第一步是 - 識別將作為資源呈現的物件。
對於基於網路的應用程式,物件建模非常簡單。可能有許多東西,如裝置,管理實體,路由器,調變解調器等。為簡單起見,我們將只考慮兩個資源,即
裝置配置這裡配置是裝置的子資源。裝置可以有許多配置選項。
請注意,上述模型中的兩個物件/資源都將具有唯一識別符號,即整數id屬性。
建立模型URI現在,當物件模型準備就緒時,是時候決定資源URI了。在此步驟中,在設計資源URI時 - 關注資源與其子資源之間的關係。這些資源URI是RESTful服務的端點。
在我們的應用程式中,裝置是頂級資源。並且配置是裝置下的子資源。讓我們寫下URI。
/devices
/devices/{id}
/configurations
/configurations/{id}
/devices/{id}/configurations
/devices/{id}/configurations/{id}
請注意,這些URI不使用任何動詞或操作。在URI中不包含任何動詞非常重要。URI應該都只是名詞。
確定表示現在,當確定了資源URI時,讓我們處理它們的表示。大多數表示以XML或JSON格式定義。我們將看到XML示例,因為它更能表達資料的組成方式。
裝置資源的集合返回集合資源時,僅包含有關資源的最重要資訊。這將使有效負載的大小保持較小,因此將提高REST API的效能。
單一配置資源現在,單個配置資源表示必須包含有關此資源的所有可能資訊 - 包括相關連結。
擁有兩個連結很重要,因為您可以以更獨特的方式提供對裝置特定配置的訪問,並且您將能夠遮蔽某些欄位(如果設計需要它),這些欄位在次要集合中不可見。
單個裝置下的單一配置資源此表示應具有與主集合中的配置表示完全相似的表示; 或者你可以掩蓋幾個欄位。
此子資源表示還將具有指向其主要簡報的附加連結。
資源URI都是名詞。URI通常有兩種形式 - 資源集合和單一資源。集合可以是兩種形式的主要集合和次要集合。輔助集合僅是主要集合的子集合。每個資源/集合包含至少一個連結,即自身。集合僅包含有關資源的最重要資訊。要獲取有關資源的完整資訊,您只需要透過其特定資源URI進行訪問。表示可以有額外的連結(即單個裝置中的方法)。這裡method代表一個POST方法。您也可以以全新的方式擁有更多屬性或表單連結。我們還沒有談到對這些資源的操作。分配HTTP方法所以我們的資源URI及其表示現在已得到修復。讓我們決定應用程式中可能的操作,並將這些操作對映到資源URI上。網路應用程式的使用者可以執行瀏覽,建立,更新或刪除操作。所以讓我們對映它們。
瀏覽所有裝置或配置[主要收集]HTTP GET /devices
HTTP GET /configurations
如果集合大小很大,您也可以應用分頁和過濾。例如,以下請求將從集合中獲取前20條記錄。
HTTP GET /devices?startIndex=``0``&size=``20
HTTP GET /configurations?startIndex=``0``&size=``20
瀏覽所有裝置或配置[二次收集]HTTP GET /devices/{id}/configurations
它主要是一個小尺寸的集合 - 所以不需要在這裡啟用過濾或測試。
瀏覽單個裝置或配置[主要收集]要獲取裝置或配置的完整詳細資訊,請GET對單一資源URI 使用操作。
HTTP GET /devices/{id}
HTTP GET /configurations/{id}
瀏覽單個裝置或配置[Secondary Collection]HTTP GET /devices/{id}/configurations/{id}
子資源表示將與主要表示相同或為主要表示的子集。
建立裝置或配置Create不是冪等操作,在HTTP協議中 - POST也不是冪等的。所以使用POST。
HTTP POST /devices
HTTP POST /configurations
請注意,請求有效負載不包含任何id屬性,因為伺服器負責決定它。建立請求的響應將如下所示:
HTTP PUT /devices/{id}
HTTP PUT /configurations/{id}
PUT響應可能如下所示。
HTTP DELETE /devices/{id}
HTTP DELETE /configurations/{id}
在非同步操作的情況下,應用程式應返回可以跟蹤成功/失敗狀態的任務ID。
//Apply Configuration on a device
HTTP PUT /devices/{id}/configurations
//Remove Configuration on a device
HTTP DELETE /devices/{id}/configurations/{id}
更多操作到目前為止,我們只設計了物件模型,URI,然後決定了它們的HTTP方法或操作。您還需要處理應用程式的其他方面:
1)記錄2)安全性3)發現等
在下一篇文章中,我們將在java中建立此應用程式以獲得更詳細的理解。