Возможно ли создать клиент REST с помощью Flex?

StackOverflow https://stackoverflow.com/questions/153420

  •  03-07-2019
  •  | 
  •  

Вопрос

Я начинаю проект с использованием архитектуры Restful, реализованной на Java (с использованием нового стандарта JAX-RS)

Мы планируем разработать графический интерфейс с гибким приложением.Я уже обнаружил некоторые проблемы с этой реализацией, используя компонент HTTPService (коды ошибок ответа, доступ к заголовкам ...).

У кого-нибудь из вас, ребята, есть некоторый опыт в подобном проекте.Осуществимо ли это?

Это было полезно?

Решение

Проблема здесь в том, что многим веб-дискуссиям по этому вопросу исполнился год или больше.Прямо сейчас я работаю над таким же исследованием, и вот что я узнал сегодня.

Это Статья IBM Developer Works от августа 2008 года Хорхе Расилло и Майк Берр показывают, как создать гибкое интерфейсное / RESTful серверное приложение (примеры на PHP и Groovy).Хорошая статья.В любом случае, вот то, что нужно на вынос:

  • Их PHP / Groovy код использует и ожидает ПОМЕЩАТЬ и УДАЛЯТЬ.
  • Но гибкий код должен использовать POST , но устанавливает для HTTP-заголовка X-Method-Override значение DELETE (я полагаю, вы можете сделать то же самое для PUT).
  • Обратите внимание, что это нет прокси-метод, рассмотренный выше.

// Flex doesn't know how to generate an HTTP DELETE.
// Fortunately, sMash/Zero will interpret an HTTP POST with
// an X-Method-Override: DELETE header as a DELETE.
deleteTodoHS.headers['X-Method-Override'] = 'DELETE';

Что здесь происходит?веб-сервер IBM перехватывает и интерпретирует "СООБЩЕНИЕ с УДАЛЕНИЕМ" как УДАЛЕНИЕ.

Итак, я копнул дальше и нашел это сообщение и обсуждение с Доном Боксом (один из создателей оригинального МЫЛА).По-видимому, это довольно стандартное поведение, поскольку в некоторых браузерах и т.д.не поддерживает PUT и DELETE, и это обходной путь, который существует уже некоторое время.Вот фрагмент, но там гораздо больше обсуждений.

"Если бы я создавал клиент GData, я, честно говоря, удивляюсь, зачем мне вообще использовать методы DELETE и PUT, учитывая, что X-HTTP-Method-Override будет работать в большем количестве случаев / развертываний".

Мой вывод из этого заключается в том, что если ваша веб-сторона поддерживает этот заголовок X-Method-Override, то вы можете использовать этот подход.Комментарии Don Box заставляют меня думать, что он довольно хорошо поддерживается, но я еще не подтвердил это.

Другая проблема возникает из-за возможности чтения заголовков HTTP-ответа.Опять же, из запись в блоге Натана де Фриза в 2007 году, мы видим, как это обсуждается.Он прокомментировал эту запись в блоге и обсуждение своим собственным комментарием:

"Единственное изменение в веб-интерфейсе заключается в том, что более новые версии Flash Player (безусловно, поставляемые с бета-версией Flex 3) теперь поддерживают свойство responseHeaders в экземплярах HTTPStatusEvent ".

Я надеюсь, это означает, что сейчас это не проблема.

Другие советы

Как уже отмечали многие HTTPService это немного упрощенно и делает не все, что вы хотите сделать.Однако, HTTPService это просто сахар поверх flash.net.* такие классы, как URLLoader, URLRequest и URLRequestHeader.Используя их, вы можете собрать большинство HTTP-запросов.

Когда дело доходит до поддержки других методов, кроме GET и POST, проблема в основном заключается в том, что некоторые браузеры (например, Safari) их не поддерживают, и Flash Player полагается на браузер во всех своих сетевых операциях.

Существуют определенные недостатки в способности Flex действовать как чистый клиент RESTful.

Приведенные ниже комментарии взяты из этого Блог:

Проблема в том, что класс HTTPService имеет несколько основных ограничений:

  1. Из коробки поддерживаются только методы GET и POST (если только вы не используете FDS и не установили для атрибута useProxy значение true)
  2. Не удается установить заголовки запроса и нет доступа к заголовкам ответа .Поэтому я не могу получить доступ к телу ответа в случае ошибки.
  3. Службы он получает код состояния 200 ничего другого, это рассмотреть ошибка.(событие 201, ой!!). Событие ошибки не предоставляет информацию о коде состояния какого-либо ответа тело.Гибкий клиент не будет иметь никакого идея, что пошло не так.

Мэтт Рейбл также дал хорошая презентация по REST с Rails, Grails, GWT и Flex на которые есть несколько хороших ссылок, связанных с ним.

Выполнимо это или нет, на самом деле зависит от того, насколько вы готовы работать с прокси и т.д.

Я работал над заменой компонента HTTPService с открытым исходным кодом, который полностью поддерживает REST.Если вам интересно, вы можете найти бета-версию (исходный код и / или скомпилированную библиотеку Flex shared runtime library) и инструкции здесь:

http://code.google.com/p/resthttpservice/

Короткий ответ - да, вы можете выполнить RESTful с помощью Flex.Вам просто нужно обойти ограничения Flash Player (лучше с последними версиями) и ограничения HTTP-стека браузера, содержащего его.

Мы занимаемся разработкой RESTful-клиента в Flex более года после решения проблемы базового заголовка HTTP-запроса и отсутствия PUT и DELETE с помощью подхода rails-esque ?_method=.Возможно, безвкусно, но это делает свою работу.

Я отметил некоторые проблемы с заголовками в старом посте в блоге по адресу http://verveguy .blogspot.com/2008/07/truth-about-flex-httpservice.html

Гибкая поддержка для ОТДЫХА в лучшем случае слабая.Я потратил много времени на создание прототипа, поэтому знаю большинство проблем.Как упоминалось ранее, из коробки есть только поддержка GET и POST.На первый взгляд кажется, что вы можете использовать конфигурацию прокси-сервера в LiveCycle Data Services или Blaze, чтобы получить поддержку PUT и DELETE.Однако это обман.Запрос, поступающий из вашего приложения Flex, по-прежнему будет POST.Прокси-сервер преобразует его в PUT или DELETE на стороне сервера, чтобы обмануть ваш серверный код.Есть и другие проблемы.Говорят, что это лучшее, что смогла придумать компания Adobe.После моей оценки мы решили пойти в другом направлении.

Да, я смог использовать заголовки POST и access с этим компонентом:

http://code.google.com/p/as3httpclient/wiki/Links

Пример

Прямо сейчас я работаю над приложением, которое в значительной степени зависит от вызовов REST между сервлетами Flex и JavaScript и Java.Мы обходим проблему с кодом ошибки ответа, устанавливая соглашение о <status id="XXX" name="YYYYYY"> блок, который возвращается при ошибке, с идентификаторами ошибок, которые примерно соответствуют кодам ошибок HTTP.

Мы обходим ограничения межсайтового скриптинга, используя Java-сервлет в качестве HTTP-прокси.Вызовы прокси-сервера (который выполняется на том же сервере, который обслуживает остальное содержимое, включая содержимое Flex) отправляют запрос на другой сервер, затем отправляют ответ обратно исходному вызывающему.

RestfulX ( Отдыхающий ) решил большинство / все остальные проблемы с Flex.Он поддерживает Rails / GAE / Merb / CouchDB / AIR / WebKit, и я уверен, что подключить его к вашей реализации Java было бы несложно.

Дима также интегрировал в него библиотеку AS3HTTPClient.

Зацените это!

На самом деле мы уже используем Flex с фреймворком в стиле Rest.Как уже упоминал mbrevort, методы PUT и DELETE не могут использоваться напрямую.Вместо этого мы делаем PUT через POST, а для УДАЛЕНИЯ мы используем GET на ресурсе с параметром URL, таким как?действие=удалить.

Это не 100% стиль Rest, поэтому я не уверен, работает ли это с реализацией JSR 311.Вам понадобится некоторая гибкость на стороне сервера, чтобы обойти ограничения PUT и DELETE.

Что касается обработки ошибок, мы внедрили службу обработки ошибок.В случае ошибки на стороне сервера приложение Flex может запросить эту службу ошибок, чтобы получить фактическое сообщение об ошибке.Это также гораздо более гибко, чем просто сопоставление кодов возврата HTTP со статическими сообщениями.

Однако благодаря ECMA-скриптингу Flex работать с REST-сервисами на основе XML очень просто.

ОТДЫХ - это скорее идеология, чем что-либо еще.Вы ходите на презентации REST, и у них есть дозаторы coolaide.

Для приложений Flex объединение стека в сочетании с BlazeDS и сортировкой данных AMF является более удобным и производительным.

Способ , которым я справлялся с этим в прошлом , заключается в использовании PHP - прокси, который обрабатывает вызовы удаленных веб - служб и возвращает клиенту RTU JSON ..

Возможно, новый flex 4 и есть ответ http://labs.adobe.com/technologies/flex4sdk/

Книга Гибкие Направляющие может быть полезно - это отличный ресурс о том, как использовать Flex в качестве RESTful-клиента.Хотя он фокусируется на использовании Flex с фреймворком Rails, я считаю, что эти концепции применимы к любому фреймворку RESTful.Я воспользовался этой книгой, чтобы быстро освоиться с использованием Flex в сочетании с REST.

Я работаю над большим проектом flex для Франклина Кови.Мы пользуемся сервисами REST.Для того, чтобы поддержать это.Мы создали оболочку XMLHttpRequest.Используя внешний интерфейс с некоторыми обработчиками событий.Мы воспользовались открытым исходным кодом библиотеки.Вы можете проверить это по адресу https://github.com/FranklinCovey/AS3-XMLHttpRequest

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top