2011-06-19 51 views
1

在數據庫中,可以說我擁有許多人的姓名和出生日期,我想獲取超過20年的人員的姓名。我可能會使用這樣的:Restlet:使用查詢訪問多個資源的GET請求

http://www.example.com/people?age=over20

在這種情況下,路由器將這個URI附加到人資源類。 是否有任何函數可以解析uri並獲取所需的請求(在本例中,age> 20)?或者我應該寫我自己的功能?

另一個問題,在這個例子中,查詢(年齡> 20)很簡單,所以它可以包含在uri中,如果我有複雜的查詢(兩個表之間的聯合..etc)怎麼辦?我應該把查詢放入xml文件併發送給服務器嗎?

+0

如果將查詢放入GET實體正文中,現在相同的URI模式映射到大量不同的資源。這意味着緩存對查詢的響應變得不可能,您不能通過電子郵件將鏈接發送到查詢,書籤查詢不起作用,等等。通過自己的資源名稱(HTTP中的URI)公開每個獨特的應用程序資源的REST原則可以避免所有這些問題。 –

回答

4

是否有任何函數可以解析uri並獲取所需的請求(在本例中,age> 20)?

是的,有函數來解析查詢字符串。在這種特殊情況下,使用Restlet,您可以通過以下方式獲取資源中的值:getRequest()getResourceRef()getQueryAsForm()getFirst("age")getValue() ==「over20」

也可能有其他方式(也許它在Restlet 2.0中有所改進),但是我的經驗是Restlet至少是非常結構化和冗長的。自從我使用JAX-RSJersey來創建我的資源以來,我只用了幾個註釋就完成了很多工作。 (在這種情況下爲@QueryParam("age"))。您可以考慮製作鍵的上/下部分而不是值,以便您可以更輕鬆地解析字符串並構建查詢。這個想法是它會是試圖處理之間的區別: http://www.example.com/people?age=over20&age=under30

與處理:http://www.example.com/people?ageAtLeast=20&ageAtMost=30

另一個問題,在這個例子中,查詢(年齡> 20)很簡單,所以它可能被包含在uri中,如果我有複雜的查詢(兩個表之間的聯合..等)?

在這裏,我建議尋找關於Restful URI設計的討論。理想情況下,不同的實體將會是不同的URI路徑,並且它們的關係將通過您的URL顯而易見。例如,有一個高度投票的問題:RESTful URL design for search

我應該把查詢的XML文件,並將其發送到服務器?

從技術上講,這是一個潛在的選擇,但我會盡可能地避免它。這是非常愚蠢的,特別是對於簡單的GET。 (另請注意,儘管technically not forbidden,GET上的實體主體不是標準的,並且有許多產品無法正確處理它,所以您會濫用POST或其他方法來完成此操作)。

相關問題