読者です 読者をやめる 読者になる 読者になる

Flex (Flash Player) で RESTful サービスのクライアントを実装するのは厳しい

色々と調べてみたら最終的に八方塞がりに陥りそうです。

  • Flash Player では GET, POST メソッドしかサポートしていない。
  • Flash Player では GET メソッドで カスタム HTTP ヘッダを付加することができない。
  • URLLoader では HTTP ステータスを取れる(但し、一部のブラウザ環境では動かない)とある。しかしこれは IE だけで Firefox, Opera, Safari などは取れず全て 0 になってしまう。(一部というよりほとんどのブラウザかと…)
  • エラー(IOErrorEvent.IO_ERROR)の場合は、data プロパティでレスポンスボディが取ることができない。
  • IE では前述のとおり、HTTP ステータスを取れるが 201 Created などは IOErrorEvent.IO_ERROR となり 200 OK 以外はエラーとして扱ってしまう。(本来は 200 番台は成功として扱わなければならないはずだが…)よってレスポンスボディも取れない。
  • Flash Player からでは HTTP レスポンスヘッダ が取れない。AIR では httpResponseStatus イベントの responseHeaders プロパティで取れる。

ちなみに Socket ベースで HTTP クライアントを実装した as3httpclientlib といったライブラリ等を使用して回避は可能です。ただ逆にセキュリティポリシーな面で気を使う必要が出てきますが…

海外にも同様にハマっている人がいました。
Building a RESTful webservice client in flash, and fighting all the way. « Lookmum