2012-02-13 13 views
3

使用REST API進行工作,遇到了一個問題,我想傳遞一個代表關係的值,但也是該關係的URL,以便它可以與HATEOAS兼容。這個RESTful JSON響應格式是否符合HATEOAS?

我想我已經想出了一個合適的解決方案,但希望得到更多知識的人的一些確認,然後我。

這個RESTful JSON響應是否仍然符合HATEOAS原則?

{ 
    "employee":{ 
     "empId":12345, 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":54321, 
     "hateoas":{ 
      "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345", 
      "reportsTo":"http://www.bubbagumpshrimp.com/rest/Employees/54321", 
      "directReports":"http://www.bubbagumpshrimp.com/rest/Employees/?reportsTo=12345" 
     } 
    } 
} 

那麼你們都在想什麼?這種格式會起作用嗎?

基於從下面@fumanchu的建議,這是我會嘗試用現在的格式...

{ 
    "employee":{ 
     "empId":12345, 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":54321, 
     "hateoas":{ 
      "collection":"http://www.bubbagumpshrimp.com/rest/Employees/", 
      "self":"12345", 
      "reportsTo":"54321", 
      "directReports":"12345/DirectReports" 
     } 
    } 
} 

感謝您的指導!

+0

看起來不錯,布巴。 – 2012-02-13 18:17:03

回答

3

它「有效」,但它是多餘的。一旦你有了這個URI,爲什麼要保留那些沒有提及它們的語義或者它們如何被使用的裸ID呢?我建議你試試這個:(我們沒有理由揭露「directReports」資源爲「?上級= 12345」這總是最好通過它的含義,以確定它比它的實現。)

{ 
    "employee":{ 
     "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345", 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":"http://www.bubbagumpshrimp.com/rest/Employees/54321", 
     "directReports":"http://www.bubbagumpshrimp.com/rest/Employees/12345/directReports" 
    } 
} 

如果您在控制您的API和/或媒體類型(並且您必須爲了告訴您的客戶在哪裏期待URI,因爲JSON沒有定義任何),您甚至可以通過聲明「reportsTo」和「directReports」值是相對於「自我」的URI:

{ 
    "employee":{ 
     "self":"http://www.bubbagumpshrimp.com/rest/Employees/12345", 
     "fName":"Bubba", 
     "lName":"Gump", 
     "title":"Shrimp", 
     "reportsTo":"54321", 
     "directReports":"12345/directReports" 
    } 
} 
+1

是的,它是多餘的:/。我選擇我做的格式的原因是由於我的服務器技術如何處理將資源轉換爲XML或JSON響應。 (我在JAXB POJO上使用Java的JAX-RS註釋)。現在我擁有它的方式允許Java的默認響應編寫器和閱讀器使用單個POJO來處理所有HTTP動詞,從而減少了整個代碼和複雜性。 編程的難易程度非常重要,因爲我試圖爲不熟悉Java或REST的其他程序員開發一個模板來遵循。 (我不知道,但這是企業環境)。 – hypno7oad 2012-02-14 05:01:52