2012-11-13 52 views
2

我正在創建一個遵循REST風格的Web服務,所以我使用JAX-RS。然而,問題在於更一般的形式,所以技術應該不重要。REST風格的Web服務,如何放下路徑

假設您的系統中有三個資源。 測驗,問題和問題反饋。現在讓我們假設你爲Quiz資源創建了一個路徑:/quiz

一個測驗對象有一個問題列表,每個問題都有一個反饋列表。

我也有一個問題的路徑:/questions,你可以POST反饋關於子資源(這是正確的術語?)的問題,所以說:/question/1/feedback

但是,這條路徑是否可以通過測驗?這方面是否有任何規定,還是由開發者決定(當然這是......但通常情況下)?

例如:/quiz/questions/1/feedback。我想問的是邊界的去向。你應該如何在嵌套路徑中使用相同的操作,就像它們是「頂級」路徑時一樣?

+0

我發現這是我的工作的一個很好的主要例子:http://docs.atlassian.com/fisheye-crucible/latest/wadl/crucible.html –

+0

也許,這應該取決於問題是否可以從是否存在問題,是否每個測驗都有獨特的問題列表,或者有些問題可以動態填充到不同的測驗中? – Stan

回答

4

我們一直在使用我們的Web服務實現中的組合vs聚合規則。基本前提是合成資源的生命週期完全由其父資源管理。而那些聚集在僅僅從關聯點管理

所以給家長的資源,我們(典型值)的子資源映射HTTP動詞來管理操作,像這樣:

 
      Composition  Aggregation 
POST   create   associate 
GET   read    read 
PUT   update   reassociate 
DELETE  delete   disassociate 

對於複合GET的我們定義了足夠的端點來完全查詢子資源。對於聚合的GET,我們只返回足夠的信息來定義實際的端點以進行完整的查詢。

索姆如果我們編碼了一個測驗API,我們將有

  • /測驗/問題/ 1
  • /問題/ 1
  • /問題/ 1 /反饋

但不是:

  • /quiz/questions/1/feedback