Что выбрать в Restlet: handleGet, handlePost ИЛИ представлять, acceptRepresetation? - PullRequest
0 голосов
/ 01 декабря 2010

ИМХО, есть две технологии для обработки запроса ресурса:

  • Для http GET вы можете переопределить represent(Variant variant) или handleGet().
  • Для http POST то же самое относится к acceptRepresentation(Representation entity) и handlePost().

Документ для handleGet говорит:

Обрабатывает вызов GET, автоматически возвращая лучшее доступное представление.Согласование содержимого автоматически поддерживается на основе предпочтений клиента, доступных в запросе.Эту функцию можно отключить с помощью свойства "gotiateContent ".

и для представляют :

Возвращает полное представление для данного варианта ранеевозвращается через метод getVariants ().Реализация по умолчанию напрямую возвращает вариант, если варианты уже являются полными представлениями.Во всех других случаях вам потребуется переопределить этот метод, чтобы обеспечить собственную реализацию.

Каковы основные различия между этими двумя типами реализаций?В каком случае я должен предпочесть одно другому?Правильно ли, что я могу достичь, например, с помощью handleGet() всего, что будет работать с represent()?

Я впервые начал использовать handleGet, устанавливая сущность для ответа.Когда я реализовал другой проект, я использовал represent.Оглядываясь назад, я не могу сказать, что один способ лучше или яснее другого.Каков ваш срок действия для этого?

1 Ответ

0 голосов
/ 22 декабря 2010

Я рекомендую использовать 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, для каких представлений.

...