Data API PHP Cache - Data API のレスポンス結果をPHPキャッシュするプラグイン

この記事は Movable Type Advent Calendar 2013 の6日目の記事です。 毎年恒例、自分の誕生日に記事を書くノルマを課して、1歳分大きくなろう企画です(謎 Data API Movable Type 6 の目玉機能である「Data API」は、Movable Type の楽しさをより深くしてくれる存在になるかもしれません。 先日、この Data API での記事の検索を...

この記事は Movable Type Advent Calendar 2013 の6日目の記事です。

毎年恒例、自分の誕生日に記事を書くノルマを課して、1歳分大きくなろう企画です(謎

Data API

Movable Type 6 の目玉機能である「Data API」は、Movable Type の楽しさをより深くしてくれる存在になるかもしれません。

先日、この Data API での記事の検索を少し拡張するプラグイン(Data API Extend Search)を公開しました。

Data API に関するプラグインは、だいぶ早い段階からいくつか公開されています。KING Junnama さんが MT タグで Data API から情報を取得するプラグインを公開していたり、プロフェッサー藤本さんがエンドポイントを拡張するプラグインを公開していたりします。

今後も、Data API に関するプラグインはたくさん出てくるでしょう。

Data API の結果をキャッシュする

さて、Data API は夢が広がる反面、気を付けなければいけないこともあります。

アクセスの多いサイトで頻繁に Data API を叩く必要のある使い方をすると、スペックの低いレンタルサーバーでは 500 エラーになる可能性があるでしょう。また、CGI のオーバーヘッドによりレスポンスが遅いということも考えられます。Data API を快適に使うには、やはり VPS で PSGI での環境が必要かもしれません。

そうなってくると、重要なのがレスポンス結果のキャッシュですね。

そんな中で、このアドベントカレンダーの3日目の記事で、MT界きっての発明家、Toi企画の天野さんが「.htaccess を利用して Data API のキャッシュの仕組みをつくる - blog.taaas.jp」という記事を書いてくださいました。なかなか難しい内容ですがとても興味深いですね。

この天野さんのキャッシュは Apache レベルでキャッシュの処理をするものですが、PHPで処理するものに関しては野田さんが8月の時点で既に公開しています。先に紹介したプラグインがそれですね。PHP の軽量版もあります。

さすが KING。

自分でも作ってみたくなった

さて、そんなわけで、PHP 版のキャッシュ機能のプラグインはすでにあるのは知っていましたが、先程の天野さんの記事の中で「パラメータを MD5 でハッシュ化して readfile するような簡単な PHP を追加して、」というさらっとした文章を読んで、猛烈に自分で作ってみたくなったのでした。勉強のために。

それがこれです。

このプラグインのコンセプトは以下のようになっております。

  • Data API の書き方と同じように書きたい。
  • キャッシュの削除のタイミングとかプラグイン側で適切にやって欲しい。
  • 主要なエンドポイントだけキャッシュする(MT側で削除側を細かく制御したいと思ったりしたので...)。
  • 認証が必要なやつはキャッシュしないで無視してほしい。

使い方

まずは、「data-api-cache.php」というインデックステンプレートを作ります。ウェブサイト、ブログ、どこでもいいです。

上記のコンセプトから、キャッシュの対象は以下のエンドポイントに限定されています。

https://your-host/mt-data-api.cgi/v1/sites/{blog_id}
https://your-host/mt-data-api.cgi/v1/sites/{blog_id}/categories
https://your-host/mt-data-api.cgi/v1/sites/{blog_id}/entries/{entry_id}/comments
https://your-host/mt-data-api.cgi/v1/sites/{blog_id}/comments
https://your-host/mt-data-api.cgi/v1/sites/{blog_id}/comments/{comment_id}
https://your-host/mt-data-api.cgi/v1/sites/{blog_id}/entries
https://your-host/mt-data-api.cgi/v1/sites/{blog_id}/entries/{entry_id}

これらにアクセするときに上記 URL の「mt-data-api.cgi」の部分を「data-api-cache.php」にすればOKです。あとは勝手にキャッシュしてくれます。

キャッシュのファイル名は、パラメータを MD5 でハッシュ可し、mt-static/support/data-api-php-cache というディレクトリの中に、上記URL通りのディレクトリ構造で保存されます。

そして、「ウェブサイト、ブログ、記事、コメント、カテゴリ」の保存と削除のタイミングで、該当するファイルやディレクトリだけが勝手に削除されます。

もし、認証の必要な URL を叩いた場合は、そのままエラー結果が返ってきます。

簡単なテストをした結果、やっぱり CGI を叩くよりも5倍くらい速いです。

その他

ツッコミどころは満載かもしれませんが、やっぱり何でも自分で作ってみると勉強になりますね。

そんな感じのプラグインですが、興味があれば「テスト環境」で使ってみてください。

明日は Masa Osugi さんで、テーマは「Movable Type × Amazon Web Service」が予定されています。楽しみですね!

Published 2013-12-06
Updated 2019-06-25