2013-10-25 146 views
1

在Web應用程序中擁有3個下拉選擇器。 Web應用程序使用Restful服務來填充選取器數據。RESTful主/細節

兩個第一個採集器從/years/colors之類的東西中獲得它們的值。第三個應該根據兩者的設置得到它的值。

所以它可能是類似/models?year=1&color=red

問題是,如何使這個HATEOAS兼容(以便開發人員不必知道他應該創建一個url來獲取模型的方式)。

{ 
"_links": { 
     "colors": "/colors", 
     "years": "/years", 
     "models": "???" } 
} 

應該不是什麼???

/讓我的一些環節,如根?如果有某種模板/models?color={color}&year={year},開發者將不得不創建url。這個可以嗎?

或者有可能是每個顏色列表的鏈接的年內/colors了,然後到每年的車型列表的鏈接從/years?color=red了,但我必須首先選擇顏色,然後填充年,然後填充模型。任何想法,如果我想讓模型依賴於顏色和年份,而不僅僅是從顏色填充的年份?

在這種情況下甚至有可能使其符合仇恨條件嗎?

回答

0

我以前沒有聽說過HATEOAS,但是根據我剛剛閱讀的內容,似乎它應該返回鏈接,指向服務的使用者可以在「狀態機」中前進的地方。

在你的情況下,這將轉化爲「函數調用」的鏈接。前兩個(/colors/years)是不帶參數的函數(此時返回「something」),而第三個函數調用需要兩個參數:一個是顏色表示,一個是一個顏色的表示,另一個是一年。前兩個有一個簡單的URL就足夠了,但對於第三個,你還需要包含參數名稱/類型信息。例如:

{ 
    "_links": { 
    "colors": "/colors", 
    "years": "/years", 
    "models": { 
     "url": "/models", 
     "param1": {"color"} 
     "param2": {"year"} 
    } 
    } 
} 

注意:您可以對「顏色」和「年份」使用與「模型」相同的佈局。

此時客戶端知道訪問函數的URL是什麼以及參數(如果有)名稱要傳遞給函數。

還有一件事是缺少的:類型。雖然你可以使用「字符串」,但「顏色」參數實際上是「/ colors」返回值的值並不明顯。您可以推出一個「型」顏色描述顏色(和上一個顏色操作任何功能:提供一個顯示名稱,HTML顏色代碼等)

的「加強了」簽名變成了:

{ 
    "_links": { 
    "colors": { 
     "url": "/colors", 
     "return": "/type/List?type=/type/Color" 
    }, 
    "years": { 
     "url": "/years", 
     "return": "/type/List?type=/type/Integer" 
    }, 
    "models": { 
     "url": "/models", 
     "param1": { 
     "name": "color", 
     "type": "/type/Color" 
     }, 
     "param2": { 
     "name": "year", 
     "type": "/type/Integer" 
     } 
     "return": "/type/List?type=/type/Model" 
    } 
    } 
} 

注意:路徑「/ type」僅用於從函數中分離類型,但不是必需的。

這可以互換和可以形容地描述函數,它們所採用的參數以及它們返回的值,因此您可以在正確的位置使用正確的值。當然,在服務端實現這一點並不容易(特別是對於參數化類型,比如「/ type/List」 - 想一下Java中的泛型或者C++中的模板),但這是最「安全」的「便攜」的方式可以描述你的客戶界面。