去年我一直在做一個愛好項目。我使用Spring MVC(目前是4),並且我創建了一個試圖遵守REST原則的Web服務。組織和使用應用HATEOAS的API
我有一個名爲Athlete
的資源,它與其他資源有關係,如SportEvent
,'培訓師'等。
這些關係沒有嵌入到運動員資源中。相反,他們是鏈接。這是一個例子:
{
"firstName": "James",
"lastName":"Smith",
"links": [{
"rel": "trainer",
"href" : "http://somehost.com/sport/trainers/4"
},
{
"rel": "sport-events",
"href" : "http://somehost.com/sport/athletes/4/sport-events"
}]
}
我目前在AngularJS中編寫客戶端,我打算使用這個API。在這期間,我發現了一些我沒有想到的東西。 客戶端如何實際使用這個?
讓我說我正在建立一個運動員的常規細節頁面。我也想展示運動員訓練師。我必須以某種方式擁有一個HTTP客戶端庫,它能夠解析我想要的關係,並以遞歸的方式將響應附加到「父」資源(具有關係的資源)。
它實際上是如何打算這樣的API導航?沒有明確說明你想要遵循的是什麼,你不能跟隨鏈接?因爲如果你不這樣做,你最終會創造潛在的巨大對象。你想要某種標準?
我對如何真正消費我的API非常感興趣(聽起來很奇怪,但我沒有想過通過動態解析鏈接的實際過程)。如果我能得到關於如何在JavaScript中使用它的解釋(使用庫很好),這將是一個巨大的好處。我正在使用AngularJS,所以如何在這裏應用它會更好。
你應該開發你的鏈接,你應該添加輸入字段給他們,並定義他們正在使用的http方法,而不僅僅是關係......所以你的客戶端將能夠調用你的鏈接,即使它不知道任何東西關於鏈接關係。我認爲使用標準/推薦媒體類型JSON-LD,HAL + JSON等會更好...... – inf3rno
@ inf3rno您可以擴展您的答案嗎?通過向它們添加輸入字段,你的意思是什麼? – Andreas
以下是一個示例:https://gist.github.com/mikekelly/5619934 在我的詞彙表中,鏈接是一個抽象控制器槽,可以與您溝通REST服務。它的表示形式可以是HTML A元素,FORM元素或甚至是XHR實例... – inf3rno