2010-12-01 24 views
0

恕我直言,有兩個若干技術問題探討處理查詢的資源:在Restlet中更喜歡什麼:handleGet,handlePost或者表示,acceptRepresetation?

  • 對於HTTP GET,您可以覆蓋represent(Variant variant)handleGet()
  • 對於http POST同樣適用於acceptRepresentation(Representation entity)handlePost()

handleGet的醫生說:

把手自動返回的最佳表現可用GET調用。根據請求中可用的客戶端偏好自動支持內容協商。可以使用「negotiateContent」屬性關閉此功能。

表示

返回一個完整表示爲先前經由getVariants()方法返回給定的變體。默認實現直接返回變體,以防變體已經是完整的表示。在所有其他情況下,您將需要重寫此方法以提供您自己的實現。

這兩種類型的實現之間的主要區別是什麼?在這種情況下,我應該選擇哪一個?我是否可以用例如handleGet()represent()一起工作的一切?

我第一次開始使用handleGet設置響應的實體。當我實施另一個項目時,我使用了represent。回想起來,我不能說一種方式比另一種更好或更清晰。你有什麼期限?

+0

隨着Restlet 2.0的新發布,​​Framework API更具可讀性。現在已棄用[Resource](http://www.restlet.org/documentation/2.0/jee/api/org/restlet/resource/Resource.html)。 [ServerResource](http://www.restlet.org/documentation/2.0/jee/api/org/restlet/resource/ServerResource.html)具有「get」,「put」,「post」,「delete」 `。 – cuh 2011-03-25 09:52:21

回答

0

我推薦使用represent(Variant),因爲那樣您將利用handleGet(Request, Response)默認實現提供的內容協商功能。

順便說一句,最近我已經開始使用基於註解的語法,而不是重寫超類方法,我喜歡它。我發現它更清晰,更簡單,更靈活。

例如:

@Post('html') 
Representation doSearch(Form form) throws ResourceException { 
    // get a field from the form 
    String query = form.getFirstValue("query"); 

    // validate the form - primitive example of course 
    if (query == null || query.trim().length() == 0) 
     throw new ResourceException(Status.CLIENT_ERROR_BAD_REQUEST, "Query is required."); 

    // do something 
    SearchResults searchResults = SearchEngine.doSearch(query); 

    // return a HTML representation 
    return new StringRepresentation(searchResults.asHtmlString(), MediaType.TEXT_HTML); 
} 

使用這種方法的優點包括傳入的表示被自動轉換爲有用的形式,該方法可被命名爲任何有意義的應用程序,只是通過掃描類你可以看到哪些類方法處理哪些HTTP方法,用於什麼樣的表示。

+0

我也使用了表示方法。在我的`represent()`方法中,我只返回其他方法的輸出,我給出了有意義的名字。註釋在我的架構中不起作用,因爲我在OSGI中使用了restlet,但thx爲此。除了其他功能外,RESTful webapps的註釋使代碼更容易閱讀。 – cuh 2011-02-09 14:53:11