Movable Type は API があるから楽しいんだよね #movabletype
Movable Type Advent Calendar 第12日めということで、趣向を変えて API なお話をします。
ブログの投稿に、MarsEdit や するぷろ に代表される投稿ツールをお使いの方も多いのではないかと思います。私のまわりでも多いですね。これらの投稿ツールの多くは、XML-RPC API に対応しており、Movable Type だけでなく WordPress や Tumblr でも利用できます。
Movable Type では他に Atom Publishing Protocol にも対応していますが、どちらかというと XML-RPC API を採用しているものが多い印象を受けます。これは、XML メッセージを作成して POST するだけというシンプルさがいいのでしょうね。反面、XML mッセージ内にアカウント情報が含まれることもあり、モダンではなくレガシーといえます。とはいえ、イントラネットや特定用途向けでは XML-RPC API を拡張した方が容易ですし、自分もアプリ開発したことがあります。。
このように、API を選択できる点は、Movable Type の魅力のひとつだとおもいます。
この XML-RPC API ですが、実はカスタムフィールド付きのブログ記事の投稿もできるようになっています。ご存知でしたか?
これは実験的な実装であり、ドキュメントも公開されていません。また、カスタムフィールドに関するすべてのニーズには応えられません。しかし、技術的におもしろいので、ご紹介したいと思います。
1. ブログ記事の追記部分をカスタムフィールドに使う
この実装の最大の特長は、ブログ記事の追記部分をカスタムフィールドに使っている点にあります。次の例のように、行単位で <カスタムフィールドのベースネーム> = <値> と記述していきます。事前にカスタムフィールドは準備しておいてくださいね。
例:
customer_id=12345678
start_date=2012-12-12
2. 投稿ツールを使ってブログ記事を投稿する
あとは、普通のブログ記事のように、投稿します。投稿後のブログ記事をみるとわかりますが、追記部分が空になって、指定したカスタムフィールドに値が格納されていることがわかるでしょう。
指定したカスタムフィールドに値を格納したり、追記部分を空にするといった拡張は、api_post_save コールバックで実現しています。このコールバックは、Movable Type の機能拡張のためのインターフェイスのひとつであり、プラグインの多くはこのコールバックを利用して、機能を拡張しています。
api_post_save コールバックでは、オブジェクトが保存された後に、実行される処理を定義します。今回の処理は、addons/Commercial.pack/config.yaml に以下のように記述されている部分になります。api_post_save.entry なので、ブログ記事保存時に、APIPostSave_entry というルーチンを実行してくださいということが定義されています。
api_post_save_xmlrpc: callback: api_post_save.entry handler: $Commercial::CustomFields::XMLRPCServer::APIPostSave_entryカスタムフィールドは、簡単に登録ができることから、多くの方々につかわれています。しかし、仕様上の制限により、パフォーマンス・チューニングや管理画面カスタマイズに時間がかかります。
このブログ記事の投稿と同様に、アイデア次第では、カスタムフィールドを使わずに、様々なデータを格納することができそうでうね。たとえば、ブログ記事の追記部分に JSON や YAML といった形式でデータを格納し、管理画面は jQuery をベースにカスタマイズするといった方法が考えられます。
来年に向けてそんなアプリを開発してみようかと思います。
Movable Type が今後進化していくなかで、機能拡張を支援するような API がより充実してくると、リスティングフレームワークのように、JSON 形式でデータをあつかえば、管理画面のカスタマイズも制約を感じなくてできそうです。来年以降のリリースが楽しみです。