そもそもAPIとは?

アプリやシステムを作る上でよく耳にする単語「API(アプリケーションプログラミングインターフェース)」。

何やらいろいろと位置から作らなくても、親切な方々が情報を流用できるようにしてくれているらしい…といった本当にざっくりとしたことしか知らずになんとなくその都度使わせてもらっていました。

 

APIとは、あるコンピュータプログラムソフトウェア)の機能や管理するデータなどを、外部の他のプログラムから呼び出して利用するための手順やデータ形式などを定めた規約のこと。

個々のソフトウェアの開発者が毎回すべての機能をゼロから開発するのは困難で無駄が多いため、多くのソフトウェアが共通して利用する機能は、OSミドルウェアなどの形でまとめて提供されている。そのような汎用的な機能を呼び出して利用するための手続きを定めたものがAPIで、個々の開発者はAPIに従って機能を呼び出す短いプログラムを記述するだけで、自分でプログラミングすることなくその機能を利用したソフトウェアを作成することができる。

近年ではネットワークを通じて外部から呼び出すことができるAPIを定めたソフトウェアも増えており、遠隔地にあるコンピュータの提供する機能やデータを取り込んで利用するソフトウェア開発することができる。

REST – e-words

とにかくこのAPIを利用すれば、いろいろと壮大なことができそうだということですね。
近年では、APIを提供しているサービスがたくさんあります。

地図を利用したいなら

 

天気情報を利用したいなら

 

グルメ情報を利用したいなら

 

旅行情報を利用したいなら

など、これはほんの一例ですが、数多くのWEBサービスがAPIを提供しています。

 

REST APIとは?

で、今回紹介する「WP REST API」ですが、RESTってなんですか?ってことになりますよね。
もう本当によくわからない専門用語が次々と出てきてパニックに陥りそうです。。

「セッションなどの状態管理を行わない(やり取りされる情報はそれ自体で完結して解釈することができる)」(Webシステムでは、HTTP自体にはセッ ション管理の機構はない)、「情報を操作する命令の体系が予め定義・共有されている」(WebシステムではHTTPのGETやPOSTなどに相当)、「す べての情報は汎用的な構文で一意に識別される」(URLやURIに相当)、「情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることがで きる(ハイパーメディア的な書式で情報を表現する)」(HTMLやXMLに相当)

REST – e-words

ん?どういうこと?
もう少しざっくりというと

  • HTTPの技術を最大限活用する、シンプルな設計方法
  • 「何のリソースを」「どのように」操作するかをURIやHTTPメソッドで表現する
  • リソース指向の設計

うん…ざっくり言ってもわかりづらいですね…まぁなんとなくシンプルな設計方法のAPIなんだなと覚えておいて下さい。のちのち覚えていきましょう。

 

WP REST APIを使ってみよう

では、早速本題の「WP REST API」を使ってみましょう。
このプラグインは簡単なHTTPベースのREST APIを提供できるようにするものです。
サイトの投稿、タクソノミー、ユーザー、その他のデータにシンプルなHTTPリクエストを送信することで、取得したり更新することが可能になります。

ほんとうに使いこなしている方は、「大規模なサービスを構築」とか「アプリ作成」、「管理画面作成」とか。。。なんだかとにかく色々やれる、というかそんなのこのB級WEBデザイナーな自分が使いこなせるはずもない。。。と思うのですが、ここは可能性と視野を拡げるためにまずはインストールしてみましょう!

STEP1. プラグインのインストール

WP REST API v2をダウンロードしてインストールします。wordpressの管理画面の新規プラグイン検索から「WordPress REST API (Version 2)」を検索しましょう。ちなみに「WP REST API」だとVersion 1.25が出てきちゃいます(2016.06.08現在)

インストール後、プラグインを有効にしましょう。

 

STEP2. 動作の確認

URLを扱う系のプラグインはだいたいパーマリンク設定の更新が必要になってきます。よくプラグインを追加したのに使えないなんてことフォーラムなんかでも見ますね。覚えておきましょう。

次にインストールしたWordPressサイトのトップページURLに「/wp-json/」を追加してアクセスしてみてください。JSONデータが表示されれば正常に動作しています。

吐き出されたJsonコード

吐き出されたJsonコード

 

STEP3. 投稿データを取得

まずは基本的な使い方として、最新の投稿データ(post_type ‘post’)を取得したい場合を見てきましょう。(以後、例としてドメイン名は example.comを使用)
こちらのURLにアクセスすると、json形式で結果が返ってきます。

http://example.com/wp-json/wp/v2/posts

GETのパラメータとして _embed を付加すると、アイキャッチ画像やコメント、記事の作成者情報などの情報もいっぺんに取得できるようになります。便利です。

http://example.com/wp-json/wp/v2/posts?_embed

また、RESTful な API なので、たとえば投稿IDが 1234 のデータを取得したければ、URLを

http://example.com/wp-json/wp/v2/posts/1234

にするだけで投稿ID 1234 のデータを取得できます。

 

STEP4. 投稿を検索

API で投稿を検索して結果を取得したい場合、

http://example.com/wp-json/wp/v2/posts?filter[s]=あいうえお

こんな感じで filter[s] に文字列を渡します。
filter の仕様は WP QUERY に準じているみたいですね。なので、検索しつつ最新の記事5件を取得したければ posts_per_page を併用して、

http://example.com/wp-json/wp/v2/posts?filter[s]=あいうえお&filter[posts_per_page]=5

とまぁ、こんな具合に。
また、指定されたタグだけの情報を取得したければ

http://example.com/wp-json/wp/v2/posts?filter[tag]=mytag

こんな感じとなります。

 

STEP5. カテゴリやタグの情報を取得

カテゴリやタグもとてもシンプルな形で、以下のURLから情報を取得できます。

http://example.com/wp-json/wp/v2/categories
http://example.com/wp-json/wp/v2/tags

 

STEP6. カスタム投稿タイプの情報を取得

カスタム投稿タイプやカスタムタクソノミーのデータも取得しようしとしたところ、デフォルトでは REST API から取得できませんでした。取得させたい場合、テーマ側の functions.php などでカスタム投稿タイプを登録する際に、register_post_type() のオプションとして以下を追加する必要があるようです。

オプション
show_in_rest true (デフォルトはfalse, その場合 WP REST APIから取得できない)
rest_base URLのベースとなる名前 (省略時はカスタム投稿タイプ名)
rest_controller_class 処理するコントローラ名。基本省略でOKで、デフォルトは WP_REST_Posts_Controller(カスタム投稿タイプ時) WP_REST_Terms_Controller(カスタムタクソノミー時) となる。

たとえば photo というカスタム投稿タイプを作り、APIのURLは /wp-json/wp/v2/photos としたい場合、カスタム投稿タイプの登録時に以下のようなオプションを追加します。

register_post_type('photo', [
    // (オプション中略)
    'show_in_rest' => true,
    'rest_base' => 'photos',
]);

このようにしてから、以下のURLにアクセスすると

http://example.com/wp-json/wp/v2/photos

カスタム投稿タイプ photo の投稿一覧が取得できるようになりました。
もちろん、前述の filter などで結果を絞り込むことも可能です。

 

STEP7. カスタムタクソノミーの情報を取得

基本的にはカスタム投稿タイプと同じになります。
photo-category というカスタム投稿タイプを取得したければ、テーマ側の functions.php などでカスタム投稿タイプ登録時の register_taxonomy() のオプションに以下を追加します。

register_taxonomy('photo-category', [
    // (オプション中略)
    'show_in_rest' => true,
]);

このようにしてから、以下のURLにアクセスすると

http://example.com/wp-json/wp/v2/photo-category

これでカスタムタクソノミー photo-category の情報が取得できるようになります。

 


次回は実際にオリジナルのテーマに組み込む際にどのように使用するか紹介していきます。

 

参考サイト

WP REST API 公式ドキュメント

http://v2.wp-api.org/extending/custom-content-types/