2014-11-21 42 views
1

問題:如何檢索REST中的層次結構對象?

我有一個父級子時尚相關的對象的層次結構。數據存儲在關係數據庫中,每條記錄都使用外鍵parent_id指向其父項。在這種情況下,所有記錄都存儲在一個表中。通過遍歷父表的列表可以解決每個層次級別,直到到達根節點。我如何通過使用REST訪問這些元素,特別是當我可能事先不知道層次結構的深度時?如何在JAXRS中實現允許層次結構的父子關係

+----------------------------------+----+-----------+ 
| Hierarchy Level     | id | parent_id | 
+----------------------------------+----+-----------+ 
| thing/sub1      | 1 | NULL  | 
| thing/sub1/subsub-A    | 2 | 1   | 
| thing/sub1/subsub-A/subsubsub-A1 | 3 | 2   | 
| thing/sub1/subsub-A/subsubsub-A2 | 4 | 2   | 
| thing/sub1/subsub-B    | 5 | 1   | 
| thing/sub2      | 6 | NULL  | 
| thing/sub2/subsub-A    | 7 | 6   | 
| thing/sub2/subsub-C    | 8 | 6   | 
+----------------------------------+----+-----------+ 

目標:解決嵌套對象

實現一個REST接口,能夠解決以下網址:

GET http://www.example.org/service/thing/sub1/subsub-A/subsubsub-A2 

和響應是

{id=4} 

是什麼嘗試到目前爲止:

顯然,下面的結構都可以輕鬆解決,因爲我知道路徑參數預計其中:

http://www.example.org/service/thing/sub1/ 

我struggeling如何在URL中解決嵌套的子部件。我確實找到了sub-resource locator concept,但我不知道將其應用於我的場景。我正在使用Jersey框架來實施。我正在尋找一種方法,我怎麼可以從後向前遍歷REST URL,獲取在每個中間子父ID,從而能夠識別完整的對象,例如像這樣:

http://www.example.org/service/1/2/4 

回答

0

建議的解決方案

要訪問您還可以使用該網址提供的路徑段的路徑的等級。這可以通過使用需要注入的UriInfo object中的getPathSegments()方法來實現。

@Path("/segments") 
public class PathSegments { 
    @Context 
    UriInfo uriInfo; 


    public PathSegments() { 

    } 

    @GET 
    @Path("{ uri: (.+)?}") 
    @Produces(MediaType.TEXT_PLAIN) 
    public String resolve() { 
     String hierarchy=""; 
     for (int i = 0; i < uriInfo.getPathSegments().size(); i++) { 
      hierarchy+= "[" + i + "] " + uriInfo.getPathSegments().get(i); 
      if(i<uriInfo.getPathSegments().size()-1){ 
       hierarchy+=" --> "; 
      } 

     } 
    return hierarchy; 
    } 
} 

這提供了以下的輸出:

[0] segments --> [1] a --> [2] b --> [3] c --> [4] 
0

我想解析一個URI結構就像這樣:/service/tree/{id}而不是使用嵌套標識符會快得多。對於父母

創建鏈接,單個節點的兄弟其實很容易IANA link relations

  • collection - 目標IRI點,它代表上下文IRI收集資源的資源。
  • up - 引用文檔層次結構中的父文檔。
  • self - 傳遞鏈接上下文的標識符。

  • first - 一個IRI,指一系列資源中最前面的資源。

  • previous - 引用有序資源中的上一個資源。 「prev」的同義詞。
  • next - 表示鏈接的上下文是一系列的一部分,並且該系列中的下一個是鏈接目標。
  • last - 一個IRI,指的是一系列資源中最後面的資源。

如果你想要一個有序樹,nested set將是一個更好的分層模型。

+0

感謝@ inf3rno,我知道我可以解析URL代替,但在技術上並沒有解答我的問題。 – Stefan 2014-11-25 14:25:50