2014-01-16 23 views
0

我正在構建一個非常以用戶爲中心的restful api。這意味着每個請求都以用戶開始:api.test.com/rest/user/{user_id}。從這個/用戶路徑開始,可以獲得關於用戶的大量資源。作爲一個例子如何構造球衣路徑以避免大類

api.test.com/rest/user/{user_id}/case 
api.test.com/rest/user/{user_id}/picture 
api.test.com/rest/user/{user_id}/anSoOn 

與球衣我創建了一個類,我用@Path(「用戶」)註釋。現在,我必須添加所有的休息路徑,該類以/user開頭(在本例中爲picture,anSoOn)。這將極大地炸燬我的用戶級別,因爲在所有資源上我還會提供所有原油操作。球衣上有沒有方法將子路徑/user/{user_id}/case等分開?

編輯:感謝Lutz Horn的回答。我想添加一些信息:

關於/case/user的操作也應該是可能的。這將導致創建類爲@Path("/user"),@Path("/case")@Path("/user/{userid}/case")。如果在這種情況下只能創建兩個類,那將會很好:@Path("/user"), @Path("/case")。但我想這是不可能的...

回答

1

使用@Path("/user/{user_id}/case")上課。

1

這是一個非常合法的問題......我也在爲每個類定義了非常大的根資源(有許多「子資源」)之後開發了非常長的類......通過根資源,我的意思是@Path資源聲明類定義。

這是我剛纔測試了,可能是一個很好的「模式」,以更好地設計和組織(子 - )「資源」類。基本上,這個想法是在一個更細粒度的級別創建(每班)根資源(姑且稱之爲「子資源」),你的情況:

  • api.test.com.rest.user。 Case.java類爲/rest/user/{user_id}/case,包含對此「子資源」執行所有CRUD操作的方法;
  • api.test.com.rest.user.Picture.java類/rest/user/{user_id}/picture,包含的方法來對這個「子資源」執行所有CRUD操作...

所以基本上你可以組織你的類(例如:api.test.com.rest.user.*包將包含資源「user」的每個「子資源」)的類。

在「子資源」類,你會得到以下結構類型:

@Path("/user/{user_id}/case") 
public class Case { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    public UserCase getUserCase(@PathParam("user_id") String userID) { 
    ... 
    } 

    // all other CRUD operations on "user/user_id/case" 

正如你可以看到「法」處理GET不具有@Path ......你只會在「級別」級別聲明的@Path上執行CRUD操作...這些操作也從那裏獲取user_id

可能有些情況下,您需要將這些類放在一起超過「子資源」CRUD操作......但這種設計應該允許更好地分割代碼(與「大類「)。

HTH!

+0

你試過這個嗎?我想這可以解決你的擔憂:「如果在這種情況下只能創建兩個類,那將是很好的:@Path(」/ user「),@Path(」/ case「)。」...即,應該可以創建'Case'和'User'兩個類,儘管'Case'類可能需要是'@Path(「/ user/{user_id}/case」)'。 – emgsilva