mx.rpc.http.HTTPServiceってなに?

このクラスの存在を初めて知りました。
そもそも mx.* パッケージを真面目に調べたことがないから;

今までREST APIなどをActionScriptから利用するときは、URLLoaderとかURLRequestとかURLVariablesとかよく考えると不思議な名前のクラスを使っていましたが、HTTPServiceを使うとちょっと楽です。シンプルになります。
URLLoader.load(URLRequest) っていうインタフェースがどうもしっくりこないので;

以下、Flex 4での利用例。
・テスト用 mxml
emacsでmxmlを書くのがツライので極力短くしてます。が、マネしない方がいいかと。
mxmlの書き方はちゃんと公式のサンプルを参考に。

[xml]


[/xml]

・HTTPTest.as

[as]
package {
  import spark.components.Application;
  // テスト用クラス
  // Yahoo!ブログ検索APIを利用する
  public class HTTPTest extends Application {
    namespace ns = "urn:yahoo:jp:blogsearch:article";
    use namespace ns;
    public function HTTPTest() {
      var http:HTTP = new HTTP("http://search.yahooapis.jp/BlogSearchService/V1/blogSearch", {appid:"your AppID here..", query:"apple"}, "GET");
      http.addEventListener(HTTP.SUCCESS, function():void {trace(http.response);}, false, 0, true); 
      http.addEventListener(HTTP.CLIENT_ERROR, function():void {trace("CLIENT_ERROR: status " + http.statusCode);}, false, 0, true); 
      http.addEventListener(HTTP.SERVER_ERROR, function():void {trace("SERVER_ERROR: status " + http.statusCode);}, false, 0, true);
    }
  }
}

// HTTPServiceのwrapper
import mx.rpc.events.*;
import mx.rpc.http.HTTPService;
import flash.events.*;

class HTTP extends EventDispatcher {
  public static const SUCCESS:String = "success";
  public static const CLIENT_ERROR:String = "client_error";
  public static const SERVER_ERROR:String = "server_error";
  private var service:HTTPService;
  private var _messageBody:XML;
  private var _statusCode:int;
  
  public function HTTP(url:String, requestParam:Object, method:String) {
    service = new HTTPService();
    service.url = url;
    service.method = method;
    service.resultFormat = "xml";
    service.send(requestParam);
    service.addEventListener(ResultEvent.RESULT, function(e:ResultEvent):void {
      _statusCode = e.statusCode;
      _messageBody = new XML(e.result);
      dispatchEvent(new Event(SUCCESS));
    }, false, 0, true);
    service.addEventListener(FaultEvent.FAULT, function(e:FaultEvent):void {
      _statusCode = e.statusCode;
      if(_statusCode.toString().charAt(0) == "4") {
        dispatchEvent(new ErrorEvent(CLIENT_ERROR));
      }else if(_statusCode.toString().charAt(0) == "5") {
        dispatchEvent(new ErrorEvent(SERVER_ERROR));
      }
    }, false, 0, true);
  }
  public function get response():XML {
    return _messageBody;
  }
  public function get statusCode():int {
    return _statusCode;
  }
}
[/as]

GETの濫用を避けるためにHTTPメソッドはインタフェースで明示した方がいいかと。
RESTを利用する場合はHTTPステータスコードを意識することも重要です。

あとぜんぜん関係ないですけど、昨日の夜友達と六本木アートナイトに行ってきました。
Art Lover だけでなくいろんな人が訪れていて大きなお祭りといった感じ。
まるで別世界。
感性を芯から刺激されました。

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です