Railsアプリに限らずブログコンテンツ的なものを管理画面とあわせて実装するのはとにかく大変。ということでRailsにWP-REST-APIをつなげたらなんとかなったし便利だったので簡単に備忘録。粒度は大きい。
WP-REST-APIって?
WordPress4.5にマージされる予定のAPI。WordPressが持ってるコンテンツをJSONで返す。
そもそもは2009年、MOMAのWEBサイト(Rails)にブログを実装しようとなったときに「めんどくせーしWPをつなげればいいんじゃね?」と誰かが思いついたのか知らないが結果として実装されたAPIをまとめたプラグインが元祖らしい。
何がうれしいの?
色々あるが「WPの管理画面とエコシステムが使える」点は工数が省エネ。私はRailsアプリに繋いだがSPAなフロントに対するコンテンツサーバーとして使う方向性もある。
↓がREST APIの全体像を把握するのに良い記事だが、MOMAの事例紹介で「Railsフロントに対してWPバックエンド」と説明されていたのが"なるほどな"という感じ。
Introducing the WP REST API(1 Jan 2016,Tuts+)
どうすれば使えるの?
ベータ版を使うならWP-REST-APIプラグインを入れる。
4月にリリース予定のWordPress4.5でコアにマージ予定で、これが実際の安定版リリースになるらしい。この記事を書いている現在はWP4.4.2が最新である。
JSON?
RESTfulな仕様と内部関数WPQueryのフォーマットに近い検索クエリを投げてJSONを取得する。デフォルトの投稿内容は普通に取得できるが、カスタムフィールドの値は標準では取得できない(beta10くらい)。
その辺りはカスタムフィールドで有名なACFとACFで作ったフィールドをREST-APIに表示させるプラグインが存在するのと(プラグイン達は若干メンテが追いついてないので今はあまり信じない方がよい)ドキュメントなど読んでfunctions.phpとかに色々書けばよい。
Railsからどう繋ぐ?
ORMのHerを使えばActiveModelライクに使える。
認証?
ORMのHerで組める。
その他
- 条件クエリが複雑になると動作が重いが、WP側のチューニングとORMのHer周りでキャッシュすればなんとかできる。
- 条件クエリの仕様が安定していない上にあまりドキュメントも詳しくないので実装読む・英語でググり倒す必要がある。ちなみに英語圏でもまだまだ情報は少ない(2016頭)。
- 今年から始まったTuts+の新しいシリーズに情報が良くまとまっている。
まだベータ版ですが楽できる未来がありそうです。以上。