【前編】WordPress REST API を試してみる
こんにちは。プログラマー小野です。
昨年末12月6日にWordPressのバージョン4.7“Vaughan”が公開されました。
(年が明けてすぐに4.7.1もリリースされましたね)
WordPressのバージョンには毎回ジャズの偉人の名前が付いているんですが今回はサラ・ヴォーン。
さてさて4.7系最大のトピックといえば、REST APIの標準サポートだと個人的には思っています。
これまで純正プラグインをインストールする形で動作していたREST APIが、4.7以降はプラグイン無しで(WordPressをインストールした瞬間から)使えるようになったんですね。
公式のドキュメントによると、
REST API コンテンツエンドポイント
WordPress コンテンツ用の API エンドポイント。WordPress Version 4.7 は投稿、コメント、ターム、ユーザー、メタ、設定用の REST API エンドポイントをサポートします。外部のプラグラムはクリアで標準的なインターフェースを使用して WordPress サイトにアクセスできます。サイトとのコミュニケーションにまったく新しい革新的な道が開かれます。
参照: Version 4.7 – WordPress Codex 日本語版
とのこと。
これだけではあまりピンと来ないですね。も少し調べてみましょう。
APIとは?RESTって何?
いつもであればWikipediaを参照するところですが、ここでは「API」は「システムが外部とやりとりする窓口と手続き」程度にさらっと認識してもらえていれば大丈夫です。
ここで言う『システム』はWordPressのことで、『やりとり』というのは具体的には「投稿記事を取得する」であったり、「投稿記事を新規追加する」、あるいは「任意の投稿を削除する」のような操作にあたります。
「記事の取得や追加/削除なんて出来て当たり前じゃないか!」と早まることなかれ。それらを『外部』から行いたいケースなんです。
例えばFacebookの「いいね」は最終的にはFacebookというシステムに送られて保存されるデータですが、このブログ(Facebookの『外部』ですよね)の下の方にも「いいね」ボタンが付いていて、ここから「いいね」を新規追加することができるのはFacebookがAPIを公開しているおかげなんですね。
一方の「REST」はアーキテクチャであり、ある種の哲学なので捉え方は様々かもしれませんが、超大雑把に「よく標準化されたデータの取り扱い方(ルール)」だと私は解釈してます。
乱暴にまとめると「CMSとして単独のシステムだったWordPressに、標準化された外部との窓口が用意された」ということになります。
うーん、まだフワッとしてますね。
で、結局何ができるの?
WordPressに新しい記事を投稿したい場合、通常であればダッシュボードにログインして記事を書いて保存します。これは全てWordPressが標準で用意してくれている機能ですよね。
例えばこれをWordPressをインストールしたのとは別のサイトから行いたい場合にはトリガー(外部からの操作を待ち受ける処理)も、それを受けて実際に記事の投稿を行う処理も全て自前で実装(あるいはプラグインを導入)する必要がありました。
それが、REST APIが標準搭載されたWordPressにおいては全て用意されているので、以下のURLにPOSTリクエストを送るだけで記事が新規追加されます。
http://demo.wp-api.org/wp-json/wp/v2/posts/
(もちろん投稿する記事の内容は別途パラメーターで送る必要アリですが)
何はさておき動かしてみる
公式のドキュメントを見ながら、まずは動かしてみましょう。
以下のURLにアクセスしてみてください。
http://demo.wp-api.org/wp-json/wp/v2/posts
謎の文字列がブラウザいっぱいに表示されたら成功です。これは「 http://demo.wp-api.org 」 というサイト(WordPressが用意しているREST APIのデモ用のサイトです)に対して「すべての投稿(post)を取得したい」というAPIを呼んだ状態になります。
謎の文字列は「JSON」というデータ形式にフォーマットされた投稿一覧なんですね。
続いてこちら。
http://demo.wp-api.org/wp-json/wp/v2/posts/448
今度は先ほどより文字の数が少ないですよね。こちらは「IDが448の投稿だけを取得したい」というAPI呼び出しだからです。
(URLの最後が「448」になっていることに注目)
ページが読み込まれた際にajaxでREST APIを呼んで<ul id=”latest-posts”>に取得された記事のタイトルと内容を追加するjQueryだと、こんな感じになります。
$(function(){ var url = 'http://demo.wp-api.org/wp-json/wp/v2/posts'; $.ajax({ url: url, dataType: 'json', type: 'get', cache: false, success: function(data) { var li = $('
- ‘); li.append(‘
‘).text(data.title.rendered); li.append(data.content.rendered); $(‘ul#latest-posts’).append(li); }.bind(this), error: function(xhr, status, err) { console.error(url, status, err.toString()); }.bind(this) }); })
今回はここまで
もちろん取得だけでなく追加や更新、削除に対応したAPIも用意されています。
ただ、URLを踏んだだけで自分のWordPressに勝手に記事が追加されたり、逆に削除されたりしたら困りますよね。
もちろんその辺りも考慮されていて、取得と違って追加や更新、削除のAPI実行には認証が必要になってくるんですが
http://ja.wp-api.org/guide/authentication/
例によって長くなりそうなので(この時点で2000文字オーバー)認証と認証後の追加、更新、削除に関しては引き続き調べて次回まとめます。