在Restlet中更喜欢什么:handleGet,handlePost OR表示,acceptRepresetation?

时间:2010-12-01 14:01:03

标签: rest post coding-style get restlet

恕我直言,有两种处理资源查询的技术:

  • 对于http GET,您可以覆盖represent(Variant variant)handleGet()
  • 对于http POST,同样适用于acceptRepresentation(Representation entity)handlePost()

handleGet 的文档说:

  

通过自动返回可用的最佳表示来处理GET调用。根据请求中可用的客户端首选项自动支持内容协商。可以使用“negotiateContent”属性关闭此功能。

代表

  

返回先前通过getVariants()方法返回的给定变量的完整表示形式。如果变体已经是完整表示,则默认实现直接返回变量。在所有其他情况下,您需要覆盖此方法以提供自己的实现。

这两种类型的实现有哪些主要区别?在哪种情况下,我应该更喜欢一个?是不是我可以用例如handleGet() represent()可以使用的所有内容handleGet

我首先开始使用represent为响应设置实体。当我实现另一个项目时,我使用了{{1}}。回想起来,我不能说一种方式比另一种方式更好或更清晰。你有什么期限?

1 个答案:

答案 0 :(得分:0)

我建议使用represent(Variant)因为您将利用默认实施handleGet(Request, Response)提供的内容协商功能。

BTW,最近我开始使用基于注释的语法而不是重写超类方法,我喜欢它。我发现它更清晰,更简单,更灵活。

例如:

@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方法,什么样的陈述。