GWT Rich Internet Application (RIA) и REST HATEOAS - насколько они совместимы?

Я занимаюсь разработкой многофункционального веб-приложения в Интернете, которое взаимодействует с серверной частью (Java) через веб-службы. Я создал прототип пользовательского интерфейса как на Flex / Flash, так и на GWT / Javascript, и заметил, что эти платформы RIA, как правило, предпочитают метод внутренней связи в стиле RPC (AMF для Flex и GWT-RPC для GWT).

В моем случае сервер также должен предоставлять веб-сервисы другим клиентам, которых я не являюсь автором. Из-за этого я склоняюсь к стандартным веб-службам (например, SOAP и REST). Я убежден, что RIA должно использовать тот же веб-сервис, который мы предоставляем другим. Я использую протокол SOAP, потому что он моделирует стиль RPC, с которым я знаком по опыту. Я новичок в REST, но создал прототип серверной части REST с помощью CXF / Jackson. Однако в настоящее время мой REST API все еще ощущается как API-интерфейс в стиле RPC, и я понимаю это потому, что у меня проблемы с осмыслением идеи HATEOAS.

Я прочитал полезную запись в блоге Роя Т. Филдингса Примерно 10 раз и я думаю, что начинаю видеть свет. Например, мне ясно, что, если бы я включил ссылки на различные переходы состояний вместе с моим ресурсом, я действительно мог бы уменьшить степень связи между моим клиентом и сервером. Мой клиент мог просто отображать кнопки, которые предоставляют пользователю доступ к юридическим операциям, которые могут быть выполнены с отображаемым объектом в это время.

Но имеет ли значение слабая связь между RIA и его серверным приложением?

По самой своей природе RIA довольно тесно связаны с серверной моделью данных. Из коробки они предполагают многое. Я предполагаю, что именно поэтому они также предпочитают протокол приложений в стиле RPC ... потому что слабая связь не является целью дизайна. Но я начинаю понимать, что если бы мы серьезно отнеслись к HATEOAS, мы могли бы написать гораздо более общий клиент RIA, который делал бы ОЧЕНЬ мало предположений о модели данных и операциях, которые могут быть выполнены. Это могло бы уменьшить количество усилий по поддержке клиента за счет изменений в серверной части, но имеет ли это смысл? перевешивает ли выгода затраты?

p.s. - Еще две детали. Это приложение имеет чрезвычайно сложную, глубоко вложенную модель данных. Кроме того, мне все равно, если кто-то скажет мне, что мы не на 100% чистое веб-приложение REST.


person HDave    schedule 09.01.2012    source источник


Ответы (2)


Это отличный философский вопрос. Мой общий ответ: следует ожидать некоторой связи.

Позвольте мне объяснить больше. Хотя можно представить себе полностью общий интерфейс приложения, который просто представляет модель доступным для человека способом, на самом деле невероятно сложно написать такую ​​часть программного обеспечения, за исключением действительно небольших доменов (например, заполнения записи, которая будет использоваться для заполнить БД, где все поля выбираются из конечных простых перечислений). Если ваше приложение не соответствует этой модели, вам понадобится что-то особенное для этого приложения. Если вы сделаете это «универсальным» способом, вы загрузите сложное описание того, что должно делать ваше универсальное клиентское приложение, и само это описание начнет все больше и больше походить на язык программирования. Теперь вы вернулись к исходной точке, за исключением (вероятно, плохо спроектированного) нового предметно-ориентированного языка в смеси. С таким же успехом вы могли бы перейти к делу и согласиться с тем, что не стоит использовать универсальный подход.

Но это не значит, что вам не следует тщательно обдумывать, какие ресурсы вы открываете, какие глаголы применяются к этим операциям и как программное обеспечение пользователей будет обнаруживать эти ресурсы. Следование REST и HATEOAS очень поможет (и поможет, если у вас есть четкое представление о базовой абстрактной модели приложения; вы должны стремиться раскрыть это естественным образом).

person Donal Fellows    schedule 09.01.2012
comment
Я видел подобные гипер-универсальные приложения раньше и много раз. Либо они действительно были настоящими языками программирования все время, либо их было ужасно сложно настроить, чтобы вообще что-то делать. Или оба. - person Donal Fellows; 10.01.2012
comment
Как сказал мне сегодня кто-то другой, это как если бы я создавал браузер RIA внутри браузера (красный флаг!). Ваш комментарий о предметно-ориентированном языке задел нерв (2-й красный флаг), потому что я часто думаю про себя, что это то, что мы создаем, но я напомнил себе, что это не наша цель ... это просто средство для достижения цели. Ваш ответ помог мне кристаллизовать мое мышление. Я возвращаюсь к гибкому подходу и построю систему для удовлетворения моих непосредственных потребностей ... при этом максимально используя HATEOAS, чтобы уменьшить взаимосвязь между клиентом и сервером, когда это возможно. - person HDave; 10.01.2012
comment
Мне нравятся DSL, но я уверен, что они очень специфичны для того, что делают. - person Donal Fellows; 06.03.2012

Учитывая, что приложение GWT обслуживается по протоколу HTTP, его тесная связь с сервером не нарушает HATEOAS. Это «код по запросу».

Google, Twitter и Facebook используют определенные API для своего приложения, отличные от API, доступного третьим сторонам (Twitter недавно перешел на использование своего общедоступного API для своего веб-приложения, но изначально это было не так). Google заявила, что не планирует переводить G + на свой общедоступный API, потому что он позволяет им экспериментировать и вносить критические изменения, не нарушая работу третьих лиц.

person Thomas Broyer    schedule 09.01.2012