2010-12-01 1 views
0

ИМХО, есть два Методика для обработки запроса для ресурса:Что нужно делать в Restlet: handleGet, handlePost OR представляют, 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 более читабельна. [Ресурс] (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).

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, для каких представлений.

+0

Я также использую метод представления. В моем методе `symbol()` я просто возвращаю вывод других методов, которые я даю значащими именами. Аннотации не работают в моей архитектуре, потому что я использую restlet в OSGI, но thx для этого.Помимо других функций, аннотации для веб-приложений RESTful делают код более удобным для чтения. – cuh 2011-02-09 14:53:11

 Смежные вопросы

  • Нет связанных вопросов^_^