문제

Java로 구현된 Restful 아키텍처를 사용하여 프로젝트를 시작하고 있습니다(새로운 JAX-RS 표준 사용).

Flex 애플리케이션을 사용하여 GUI를 개발할 계획입니다.HTTPService 구성 요소를 사용하여 이 구현에서 몇 가지 문제를 이미 발견했습니다(응답 오류 코드, 헤더 액세스...).

여러분 중 누구라도 비슷한 프로젝트에 경험이 있습니다.가능합니까?

도움이 되었습니까?

해결책

여기서 문제는이 문제에 대한 많은 웹 토론이 1 년 이상이라는 것입니다. 나는 지금이 같은 연구를 진행하고 있으며 이것이 제가 오늘 배운 것입니다.

이것 IBM Developer Works Article의 2008 년 8 월 작성자 : Jorge Rasillo와 Mike Burr는 Flex 프론트 엔드 / 편안한 백엔드 앱 (PHP 및 Groovy의 예)를 수행하는 방법을 보여줍니다. 좋은 기사. 어쨌든 여기에 테이크 아웃이 있습니다.

  • 그들의 PHP/Groovy 코드 사용하고 기대합니다 넣고 삭제하십시오.
  • 그러나 Flex 코드는 POST를 사용해야하지만 HTTP 헤더 X-Method-Override를 삭제하도록 설정합니다 (Put I Presum에 대해 동일한 작업을 수행 할 수 있음).
  • 이것은입니다 ~ 아니다 위에서 논의 된 프록시 방법.

// 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 웹 서버는 삭제로 "게시물"을 가로 채고 해석합니다.

그래서 나는 더 파고 이것을 발견했습니다 Don Box와의 게시 및 토론 (원래 비누 녀석 중 하나). 분명히 일부 브라우저 등이 Put and Delete를 지원하지 않으며 한동안 근무한 작업입니다. 스 니펫이 있지만 더 많은 토론이 있습니다.

"GDATA 클라이언트를 구축하고 있다면 X-HTTP-Method-Override가 더 많은 사례/배포에서 작동 할 것이라는 점을 감안할 때 삭제를 사용하고 메소드를 전혀 넣는 이유를 솔직하게 궁금합니다."

이것에서 벗어나는 것은 귀하의 웹 측 에서이 X- 메드-오버 라이더 헤더를 지원하는 경우이 접근법을 사용할 수 있다는 것입니다. Don Box의 의견은 그것이 상당히 잘 뒷받침된다고 생각하게 만들지 만 아직 확인하지는 못했습니다.

또 다른 문제는 HTTP 응답 헤더를 읽을 수 있다는 점에서 또 다른 문제가 발생합니다. 다시 Nathan de Vries의 2007 년 블로그 게시물, 우리는 이것이 논의 된 것을 본다. 그는 그 블로그 게시물과 자신의 의견으로 토론을 따랐습니다.

"웹 프론트의 유일한 변경 사항은 최신 버전의 플래시 플레이어 (Flex 3 베타와 함께 제공되는 것)가 이제 httpstatusevent의 인스턴스에서 응답 헤더 속성을 지원한다는 것입니다."

나는 그것이 그것이 지금 문제가되지 않는다는 것을 의미하기를 바라고 있습니다.

다른 팁

많은 사람들이 지적했듯이 HTTPService 약간 단순하고 원하는 모든 것을하지 않습니다. 하지만, HTTPService 단지 설탕 위에 설탕입니다 flash.net.* 수업과 같은 수업 URLLoader, URLRequest 그리고 URLRequestHeader. 이를 사용하면 대부분의 HTTP 요청을 조립할 수 있습니다.

문제를 얻거나 게시하는 것보다 다른 방법을 지원할 때 일부 브라우저 (예 : Safari)가이를 지원하지 않으며 Flash Player는 모든 네트워킹에 대한 브라우저에 의존한다는 점에서 문제가 있습니다.

Flex의 순수한 편안한 고객으로서 행동 할 수있는 능력의 명확한 단점이 있습니다.

아래의 의견은 이것에서 나온 것입니다 블로그:

문제는 httpservice 클래스에 몇 가지 주요 제한 사항이 있다는 것입니다.

  1. GET 및 POST 메소드 만 상자 밖으로 지원됩니다 (FDS를 사용하고 사용 프록시 속성을 TRUE로 설정하지 않는 한).
  2. 요청 헤더를 설정할 수 없으며 응답 헤더에 액세스 할 수 없습니다. 따라서 오류의 경우 응답 본문에 액세스 할 수 없습니다.
  3. httpservice는 다른 200으로 상태 코드를 가져옵니다. 오류를 고려합니다. (이벤트 201, 아아 !!). Faultevent는 상태 코드에 대한 정보를 제공하지 않습니다. Flex 클라이언트는 무엇이 잘못되었는지 전혀 모릅니다.

Matt Raible 또한 레일, 성배, GWT 및 Flex와 함께 휴식에 대한 멋진 프레젠테이션 그것은 좋은 참고 문헌이 연결되어 있습니다.

그것이 실현 가능하든 실제로는 프록시 등을 통해 얼마나 많은 기꺼이 일할 것인지에 달려 있습니다.

REST를 완전히 지원하는 HTTPSVICE 구성 요소에 대한 오픈 소스 교체 작업을 수행했습니다. 관심이 있으시면 베타 버전 (소스 코드 및/또는 컴파일 된 Flex 공유 런타임 라이브러리)과 지침을 찾을 수 있습니다.

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

짧은 대답은 예입니다. Flex로 편안하게 할 수 있습니다. 플래시 플레이어 (최신 버전으로 더 나은)와 브라우저의 HTTP 스택 제한 제한을 해결하면됩니다.

우리는 기본 HTTP 요청 헤더를 해결 한 후 1 년 이상 Flex에서 RESTFul Client Development를 수행하고 있으며 Rails-esque? _method = Approach를 통해 Put and Delete가 부족합니다. 아마도 끈적 끈적하지만, 그것은 일을 끝냅니다.

오래된 블로그 게시물에서 헤더 통증 중 일부를 언급했습니다. http://verveguy.blogspot.com/2008/07/truth-about-flex-httpservice.html

REST에 대한 Flex 지원은 기껏해야 약합니다.나는 대부분의 문제를 알기 위해 프로토타입을 만드는 데 많은 시간을 보냈습니다.이전에 언급했듯이 기본적으로 GET 및 POST만 지원됩니다.언뜻 보면 LiveCycle Data Services 또는 Blaze의 프록시 구성을 사용하여 PUT 및 DELETE에 대한 지원을 받을 수 있는 것처럼 보입니다.그러나 그것은 가짜입니다.Flex 앱에서 들어오는 요청은 여전히 ​​POST입니다.프록시는 서버 측 코드를 속이기 위해 서버 측에서 이를 PUT 또는 DELETE로 변환합니다.다른 문제도 있습니다.이것이 Adobe가 생각해 낼 수 있는 최고라고 믿는 것으로 들었습니다.내 평가 후에 우리는 다른 방향으로 가기로 결정했습니다.

예,이 구성 요소와 함께 게시물 및 액세스 헤더를 사용할 수있었습니다.

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

예시

나는 Flex와 JavaScript와 Java Servlets 사이의 휴식에 크게 의존하는 응용 프로그램에서 지금 일하고 있습니다. 우리는 응답 오류 코드 문제를 해결합니다.u003Cstatus id="XXX" name="YYYYYY"> 오류에 따라 반환되는 블록, 대략 HTTP 오류 코드에 매핑되는 오류 ID.

우리는 Java Servlet을 HTTP 프록시로 사용하여 크로스 사이트 스크립팅 제한을 해결합니다. 프록시로의 통화 (Flex 컨텐츠를 포함하여 나머지 콘텐츠를 제공하는 동일한 서버에서 실행되는 경우 다른 서버로 요청을 보내고 원래 발신자에게 응답을 다시 보냅니다.

RESTFULX Flex의 대부분의 나머지 문제를 해결했습니다. 레일/gae/merb/couchdb/air/webkit에 대한 지원이 있으며, Java 구현에 연결하는 것이 스냅 한 것일 것이라고 확신합니다.

Dima는 as3httpclient 라이브러리를 통합했습니다.

확인 해봐!

실제로 이미 레스트 스타일의 프레임 워크와 함께 Flex를 사용하고 있습니다. MBREVORT가 이미 언급 한대로 PIT 및 DELETE 방법을 직접 사용할 수 없습니다. 대신 우리는 게시물을 통해 넣고 삭제를 위해 action = delete와 같은 URL 매개 변수가있는 리소스를 사용하고 있습니다.

이것은 100% REST 스타일이 아니므로 JSR 311 구현에서 작동하는지 확실하지 않습니다. PUT 및 삭제 제한을 해결하려면 서버 측에 약간의 유연성이 필요합니다.

오류 처리와 관련하여 오류 서비스를 구현했습니다. 서버 측 오류의 경우 Flex 응용 프로그램 이이 오류 서비스를 쿼리하여 실제 오류 메시지를 가져올 수 있습니다. 이것은 또한 HTTP 리턴 코드를 정적 메시지에 매핑하는 것보다 훨씬 유연합니다.

그러나 Flex의 ECMA 스크립팅 덕분에 XML 기반 REST 서비스를 사용하여 작업하는 것은 매우 쉽습니다.

휴식은 무엇보다 이데올로기에 더 가깝습니다. 당신은 나머지 프레젠테이션으로 가서 쿨리 이드 디스펜서가 있습니다.

Flex Apps의 경우 Blazeds 및 AMF 데이터 마샬링과 함께 스택을 롤링하는 것이 더 편리하고 성능이 뛰어납니다.

내가 과거에 이것을 관리했던 방식은 원격 웹 서비스 호출을 처리하고 RTU JSON을 클라이언트로 반환하는 PHP 프록시를 활용하는 것입니다.

새로운 Flex 4가 답일 수 있습니다 http://labs.adobe.com/technologies/flex4sdk/

그 책 유연한 레일 도움이 될 수 있습니다 - Flex를 편안한 클라이언트로 사용하는 방법에 대한 훌륭한 리소스입니다. Rails 프레임 워크와 함께 Flex를 사용하는 데 중점을두고 있지만 개념은 모든 편안한 프레임 워크에 적용됩니다. 나는이 책을 사용하여 Flex와 함께 휴식을 취하는 데 빠르게 속도를 높였습니다.

나는 Franklin Covey의 큰 Flex 프로젝트에서 일하고 있습니다. 우리는 REST 서비스를 사용합니다. 이것을 지원하기 위해. 우리는 xmlhttprequest 래퍼를 만들었습니다. 일부 이벤트 핸들러와 외부 인터페이스를 사용합니다. 우리는 도서관을 opensourced했습니다. 당신은 그것을 확인할 수 있습니다 https://github.com/franklincovey/as3-xmlhttprequest

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top