RESTful веб-сервисы на Google App Engine - PullRequest
4 голосов
/ 19 февраля 2012

Прежде всего, я должен сказать, что я не настолько опытен в Google App Engine.

Я знаю, что возможно, что мы развернем RESTful Web-сервисы (JERSEY) на GAE

А также я знаю, что RESTLET имеет версию специально для GAE.

Я хочу посоветоваться с теми, кто работал с обоими подходами, какой из них лучше.

Например, слишком сложно или сложно настроить приложение GAE для JERSEY ??? Или, например, использование RESTLET имеет какие-либо недостатки? Или он слишком толстый (RESTLET)?

Спасибо

Ответы [ 3 ]

6 голосов
/ 19 февраля 2012

Я попробовал Restlet и не был удовлетворен этим: он пытается сделать многое и не является JAX-RS по своей сути (они имеют его как дополнение). У меня были проблемы с тем, чтобы он работал в различных настройках (запрос не будет перенаправлен на метод, но при изменении порядка метода он начнет работать. WTF ?!). Также их документация скудна и непоследовательна.

Я посмотрел на Джерси: в то время были проблемы с запуском на GAE (решено с помощью справки на форуме поддержки). Также я обнаружил, что их документы не очень хороши.

Наконец, я перешел к Resteasy / Jackson: документы превосходны, работают с Maven из коробки, полный контроль над конфигурацией, безопасностью и обработкой ошибок (исключения, добавленные в код, возвращенный как объект ошибки JSON). В основном никаких проблем. Вы можете посмотреть пример здесь: REST-классы LeanEngine .

Кроме того, если вы используете JSON / Jackson (обязательно используйте Jackson 1.9, так как встроенная версия 1.7 устарела), вы получаете большой контроль над тем, как ваши классы отображаются в JSON: один-к-одному, перенос / встраивание , шаблон адаптера и т.д ..

3 голосов
/ 19 февраля 2012

Я использую Restlet на GAE около 6 месяцев. Я выбрал его частично, потому что у них также есть выпуски для Android и GWT, которые также являются частью моего ассортимента, и я подумал, что было бы проще всего использовать одну и ту же вещь везде.

В отличие от комментария Питера К., я нашел документацию довольно хорошей. В дополнение к онлайновой документации на restlet.org, Manning предлагает книгу на 400 страниц ( Restlet in Action ), которая достаточно углублена. Возможно, электронная книга вышла после оценки Питера.

Как говорится, это довольно большая библиотека с множеством функций, которая является обоюдоострым мечом. С одной стороны, каждый раз, когда я хочу решить новую проблему, кажется, что в Restlet уже есть что-то встроенное, чтобы сделать это проще. С другой стороны, я считаю, что отладка через источник Restlet затруднительна, когда я пытаюсь выяснить проблему - вся эта гибкость и функциональность составляют общую и глубокую иерархию классов, и иногда трудно увидеть как кусочки сочетаются друг с другом. Если вы создаете солидное приложение, я думаю, что стоит посмотреть, потому что я не думаю, что вы столкнетесь с множеством ограничений в Restlet. Тем не менее, я не использовал RestEasy, поэтому я не могу сделать осознанное сравнение с ним.

2 голосов
/ 19 февраля 2012

Год назад я начал разрабатывать приложение с Джерси и Google App Engine.Большой опыт с моей стороны, но я никогда не работал с Restlet ..

Я пытаюсь здесь обобщить основные трудности, которые я обнаружил при интеграции с GAE:

  • Версия на Джерси: 1.6 работает
  • Я предлагаю вам использовать Джексона (версия 1.7.1) для представления json

фрагмент web.xml:

<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>***package-with-your-classes***;org.codehaus.jackson.jaxrs</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

Конфигуратор:

@Provider
public class JAXBContextResolver implements ContextResolver<JAXBContext> {
private AnnoxAnnotationReader annotationReader;
private JAXBContext context;
private Class<?>[] classTypes = new Class[] { .. all your classes .. };

public JAXBContextResolver() {
annotationReader = new AnnoxAnnotationReader();
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(JAXBRIContext.ANNOTATION_READER, annotationReader);      
try {
    this.context = JAXBContext.newInstance(classTypes, properties);
} catch (JAXBException e) {
    ..  
}
public JAXBContext getContext(Class<?> objectType) {
    return context;
}

.. как вы видите, я использую Annox, чтобы избежать аннотаций внутри моих классов моделей!

Надеюсь, это поможет!Мишель Орси

...