XML-RPC Server としての AMFPHP


おひさ。最近は iPhone アプリつくってみたりとかしてます。
いやー、Objective-C は以前ちょっとやってたから抵抗ないんだけど UIKit とかのクセをつかむまでは大変でござるな。SDK の自由度もなかなか低くて。動画キャプチャぐらいさせてくれよっていう。

んでまあ、Objective-C でサーバーサイドとやりとりするんはどーやったらええねん?っといろいろ調べたところ XML-RPC がらくちんぽい。(オープンソースでやっちゃってる WordPress for iPhone も XML-RPC で通信。ってまーブログエディタだからあたりまえだけど。)でー、サーバーサイドを PHP で書こうと思ったんだけど PEAR のんとか書くのすんげえめんどい。。。むにゃむにゃ。ピコーン!てなかんじで AMFPHP が XML-RPC 対応してることを思い出したわけですな。(1.9 beta2 のほうね)

AMFPHP って XML-PRC でのメソッド呼び出しにも対応してるのよ。ひとつサービスつくると AMF と XML-RPC の両方でアクセスできるっていう。しかもサービス書くのは普通に PHP のクラス書くだけでいい。ちょーラクチン。(実は JSON での応答も対応してるんだけどこれはちょっと特殊。JSONP でも JSON-RPC でもないので呼び出し側は自力で実装しなきゃいけない。)

んでこれを書いておこうと思ったのでした。1.9 beta2 のそのままだと日本語が変にエンコードされちゃって使えないのでちょっといじります。amfphp/core/xmlrpc/app/Actions.php の 51 行目ぐらい。エスケープすべき文字種と XML のエンコードを指定。

$output_options = array('escaping' => 'markup', 'encoding' => 'UTF-8');
$args = array($xmlrpc_server, $request_xml, array(&$classConstruct, $methodName), $output_options);

はい。めでたしめでたし。
あー、でも、どうせなら AMF でやりとりするほうが効率いいよなー。だれか Cocoa 用の AMF デコーダーみたいなん書いてー。