このクラスの存在を初めて知りました。
そもそも mx.* パッケージを真面目に調べたことがないから;
今までREST APIなどをActionScriptから利用するときは、URLLoaderとかURLRequestとかURLVariablesとかよく考えると不思議な名前のクラスを使っていましたが、HTTPServiceを使うとちょっと楽です。シンプルになります。
URLLoader.load(URLRequest) っていうインタフェースがどうもしっくりこないので;
以下、Flex 4での利用例。
・テスト用 mxml
emacsでmxmlを書くのがツライので極力短くしてます。が、マネしない方がいいかと。
mxmlの書き方はちゃんと公式のサンプルを参考に。
1 2 3 |
[crayon-6751731291259223668405 lang="xml" ] <?xml version="1.0" encoding="utf-8"?> <local:HTTPTest xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:local="*" /> |
[/crayon]
・HTTPTest.as
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
[crayon-675173129125e104748887 lang="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; } } |
[/crayon]
GETの濫用を避けるためにHTTPメソッドはインタフェースで明示した方がいいかと。
RESTを利用する場合はHTTPステータスコードを意識することも重要です。
あとぜんぜん関係ないですけど、昨日の夜友達と六本木アートナイトに行ってきました。
Art Lover だけでなくいろんな人が訪れていて大きなお祭りといった感じ。
まるで別世界。
感性を芯から刺激されました。