2008-09-30 16 views
32

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

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

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

ответ

23

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

Этот IBM Developer Works article from August 2008 от Jorge Rasillo и Mike Burr показывает, как делать внешнее приложение Flex/RESTful (примеры в PHP и Groovy). Хорошая статья. Во всяком случае, вот отнимать:

  • Их PHP/Groovy код использует и ожидает PUT и DELETE.
  • Но код Flex должен использовать POST, но устанавливает HTTP-заголовок X-Method-Override в 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 с DELETE» как DELETE.

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

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

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

еще одна проблема возникает вокруг умея читать заголовки ответа HTTP Опять же, из a blog post in 2007 by Nathan de Vries, мы видим это обсуждали Он последовал этот пост в блоге и обсуждение с его собственным комментарием:...

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

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

+0

Я думаю, что также важно спросить себя, теряют ли клиенты, которые используют «X-HTTP-Method-Override» некоторые преимущества REST. Этот подход действительно отличается от туннелирования по HTTP? Разве вы не теряете способность использовать кеширующие прокси и другие подобные преимущества? – Gili 2008-10-22 04:58:22

+0

Если вы посмотрите здесь http://www.w3.org/Protocols/rfc2616/rfc2616-sec13.html в разделе 13.10, вы увидите, что PUT, DELETE и POST все приводят к недействительности записи в кеше. Поэтому независимо от того, используете ли вы правильный глагол или POST плюс X-HTTP-метод-переопределение, вы окажете тот же эффект на кеш. – 2009-08-13 12:18:18

5

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

Комментарии ниже взяты из этой blog:

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

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

Matt Raible также дал nice presentation on REST with Rails, Grails, GWT and Flex, что есть некоторые хорошие ссылки, связанные с ней.

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

+0

Если эти ограничения верны, Flex не является стартером для REST по http. Возможность доступа ко всем HTTP-заголовкам имеет решающее значение. – 2009-08-13 12:23:02

0

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

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

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

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

+1

, который является RPC через HTTP и даже не близок к REST – 2010-02-10 17:22:21

+0

Ну, несколько в действительности. REST имеет 4 метода, и два из них должны быть реализованы разными, поскольку требуемые HTTP-глаголы недоступны. – Yaba 2010-02-11 14:45:40

1

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

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

6

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

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

0

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

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

0

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

3

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

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

1

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

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

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

2

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

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

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

0

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

2

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

0

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