Возможно ли создать клиент REST с помощью Flex? - PullRequest
32 голосов
/ 30 сентября 2008

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

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

Любой из вас, ребята, имеет опыт участия в подобном проекте. Это возможно?

Ответы [ 15 ]

23 голосов
/ 02 октября 2008

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

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

  • Их код PHP / Groovy использует и ожидает PUT и DELETE.
  • Но код Flex должен использовать POST, но устанавливает для X-Method-Override заголовка HTTP значение DELETE (вы можете сделать то же самое для PUT I).
  • Обратите внимание, что это , а не метод прокси, рассмотренный выше.

// 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 перехватывает и интерпретирует «POST with DELETE» как DELETE.

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

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

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

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

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

Надеюсь, это означает, что это уже не проблема.

6 голосов
/ 01 октября 2008

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

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

5 голосов
/ 30 сентября 2008

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

Комментарии ниже из этого блога :

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

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

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

Реализуемо ли это или нет, зависит от того, насколько вы готовы обойти, используя прокси и т. Д.

3 голосов
/ 09 января 2009

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

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

2 голосов
/ 11 марта 2010

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

2 голосов
/ 14 января 2010

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

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

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

1 голос
/ 05 октября 2009

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

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

Проверьте это!

1 голос
/ 30 сентября 2008

Сейчас я работаю над приложением, которое в значительной степени опирается на вызовы REST между Flex и JavaScript и сервлетами Java. Мы можем обойти проблему с кодом ошибки ответа, установив соглашение для блока , который возвращается при ошибке, с идентификаторами ошибок, которые приблизительно соответствуют кодам ошибок HTTP.

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

1 голос
/ 30 сентября 2008

Да, я смог использовать POST и получить доступ к заголовкам с помощью этого компонента:

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

Пример

0 голосов
/ 25 октября 2012

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

...