Подтвердить что ты не робот

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

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

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

У любого из вас, ребята, есть опыт работы в аналогичном проекте. Возможно ли это?

4b9b3361

Ответ 1

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

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

  • Их код PHP/ Groovy использует и ожидает PUT и DELETE.
  • Но код Flex должен использовать 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 перехватывает и интерпретирует "POST с DELETE" как DELETE.

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

Ниже приведены комментарии :

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

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

Matt Raible также дал приятную презентацию на REST с Rails, Grails, GWT и Flex, в которых есть ссылки на полезные ссылки.

Насколько это возможно или действительно зависит от того, насколько вы готовы работать с помощью проксирования и т.д.

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 8

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

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

Ответ 9

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

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

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

Ответ 10

Фактически были уже использованы Flex с Framework стиля Rest-Style. Как уже упоминалось ранее, методы PUT и DELETE нельзя использовать напрямую. Вместо этого мы делаем PUT через POST и для DELETE мы используем GET на ресурсе с параметром URL, например: action = delete.

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

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

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

Ответ 11

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

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

Ответ 12

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

Ответ 14

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

Ответ 15

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