Data APIを使ってみる(その5)

Data APIは、プラグインで拡張することもできるようになっています。
その基本的な方法を紹介します。

1.概要

Data APIを使うと、Movable Typeに外部からアクセスすることができます。
ただ、現状では取得や変更などができない箇所もあります。

また、Data APIはHTTP経由でのアクセスなので、オーバーヘッドもあります。
処理によっては、Movable Type標準のAPIだけだと、APIを何度を呼び出す必要が出てしまい、速度的に厳くなる場合があります。

このようなときには、プラグインで独自のAPIを追加することもできます。
Movable Typeらしく、APIの内部もフレームワーク的に作られています。

2.エンドポイントの追加

プラグインでエンドポイントを追加するには、最低限以下の2つの作業が必要です。

2-1.config.yamlにエンドポイントの情報を記述

まず、プラグインのconfig.yamlファイルで、レジストリのapplications→data_api→endpointsの下に配列を追加し、その個々の要素としてエンドポイントの情報を記述します。
個々のエンドポイントの情報はハッシュで記述します。
ハッシュの内容は以下の通りです。

キー内容
idエンドポイントのID
routesエンドポイントのアドレスのうち、「http://・・・/mt-data-api.cgi」から後の部分
verb受け入れるプロトコル(GETやPOSTなど)
versionAPIのバージョン
handlerエンドポイントの処理をするハンドラ
requires_loginログインが不要であれば0を指定

2-2.ハンドラを作成

次に、エンドポイントに対応するハンドラを作成します。
ハンドラでは、必要な処理を行って、結果を返します。
返したいデータ構造を、配列やハッシュで表し、それらへのリファレンスをreturnします。
返された結果が、APIで得られる値になります。

また、オブジェクトをreturnしたり、配列/ハッシュの要素にオブジェクトを入れてreturnすることもできます。
出力するフィールドや、データの形式などは、後述する「リソース」で定義します。
Movable Type標準のオブジェクト(記事等)では、Data APIであらかじめリソースが定義されています。
独自のオブジェクトを作る場合は、自分でリソースを定義する必要があります。

2-3.プラグインの例

ごく簡単なプラグインの例として、ブログの名前/概要/アドレス/記事数を返すAPIを作ってみました。
「http://・・・/mt-data-api.cgi/v1/sites/ブログのID/blogstat」にアクセスすると、上記の情報が返されます。

BlogStatDataAPI

3.リソースの追加

Data APIで扱うオブジェクトを、「リソース」(resource)と呼びます。
記事やコメントなどがリソースにあたります。

プラグインで独自のリソースを追加することも可能です。
この場合は、プラグインのconfig.yamlで、レジストリのapplications→data_api→resources→updatable_fieldsとapplications→data_api→resources→fieldsの下の階層に、個々のリソースの情報を記述します。
updatable_fieldsは、APIで作成や変更ができるフィールドの情報を表します。
また、fieldsは個々のフィールドの出力方法を表します。

リソースの定義の仕方は、lib/MT/DataAPI/Resourcesディレクトリにある.pmファイルを参照してください。