記住,其餘的都是關於有在需要的資源,的第一件事情,以確定是哪些資源,並在它們之間有任何關係,這樣一個多表示。
對我來說,這似乎是你有一個預算作爲一種資源和budgetPreview作爲資源的概念,並且希望在以後的日子來獲取其中一方以及能力。
我建議以下的URI'seems
[GET] http://example.com/budgetPreviews/generate
這將生成並在服務器上返回budgetPreview而不存儲它。海事組織在API中看起來並不清楚,創建budgetPreview的路線嵌套在預算之下。我還主張稍微擺脫「所有終結點都必須是名詞」,以支持可以預測的資源或資源的商業行爲。如果有人爭辯說,你可以將generate生成爲「generateRequest」,因爲實際上你將一個文檔傳遞給服務器,並填充了代表你生成budgetPreview的請求的值。我在這裏做的一個假設是服務器構建budgetPreview所需的所有信息都是從GET請求中的客戶端傳遞的。
的一件事警惕的是在這裏,您將需要包括所有的URI您的信息查詢參數,因爲返回的值將根據參數是不同的。在GET主體中傳遞值然後給出主體的語義含義(即根據身體中的值創建不同的資源)將會破壞緩存(如果你做任何事情)。
[GET] http://example.com/budgetPreviews
返回所有現有的存儲budgetPreviews
[PUT] http://example.com/budgetPreviews/ {GUID}
使用看跌期權來這裏創建資源,並允許客戶端來確定的id意味着存儲資源的請求可以在超時的情況下重試並允許冪等性。與此同時,您正在存儲預算預覽,您可以在參數中提供預算的標識並將其鏈接起來。
[GET] http://example.com/budgets/ {GUID}/budgetPreview
[GET] http://example.com/budgetPreviews/ {GUID}
這些是不同的URI識別相同的資源,並且允許在客戶端不同的方式來消耗budgetPreview
一個額外的觀點不是混淆你的底層資源或實現細節,比如調用哪個方法和你面向公衆的API。旨在讓您的公衆面對API儘可能適合客戶,並且您返回的表示重點關注對客戶合約進行建模,而不是將底層資源持久化。另外,智者曾告訴我的另一件事是記住你擁有無限的URI,所以不要害怕創造更多的東西,因爲它會讓你的API清晰明瞭,你的客戶正是他們想要的東西。