2020年5月13日更新

WordPress REST APIについてまとめてみた

Thumbnail

今回の記事では、WordPress REST APIとは何かといったものから、基本的な情報や使い方を紹介します。

WordPress REST APIとは

WordPress REST APIは、WordPressの管理画面にログインしたりブラウザで操作することなく、データやリソースにアクセスできるようになるWordPressに組み込まれた機能です。

REST APIを使えば、PHP以外の言語でも扱いやすくなるほか、投稿以外にもメタデータやユーザー情報などのデータを操作できます。

また、WordPress REST APIはHTTPプロトコルとJSON(JavaScript Object Notation)を使用してデータのやりとりを行います。

REST APIでデータベースの操作もできる

REST APIを使うことで、外部から投稿などのデータを作成や更新、取得、削除といったデータベースの操作ができます。

カスタム投稿タイプなどのカスタム関係は、デフォルトのREST APIではデータを提供されませんが、開発者がREST APIメソッドを定義できるので、もともとWordPressに組み込まれているメソッド以外にも、必要なデータをカスタムエンドポイントとして利用することもできます。

WordPress REST APIのHTTPメソッド

WordPress REST APIでは、次のHTTPメソッドを使ってデータやリソースのやりとりをします。

  1. GET(投稿などのデータを返してくれる)
  2. POST(新しいデータをサイトに追加できる)
  3. PUT(データを更新し、更新されたデータを返してくれる)
  4. DELETE(データを削除し、削除したデータを返してくれる)

XML-RPCとREST API

XML-RPCでもRESTと似たようなことができますが、RESTの方が新しくセキュリティの面ではXML-RPCよりも良いと言われています。

基本的なデータの取得

WordPressでは何も設定をしなくても、REST APIを使うことができます。

http://example.com/wp-json/wp/v2/というURにアクセスしてみると、デフォルトで大量のデータがJSON形式で提供されているのが分かると思います。

※ デフォルトで利用可能なのは基本的な情報のみなので、カスタム投稿タイプなどは別途設定が必要です。

投稿データを取得

投稿一覧のデータを取得する場合には、GETリクエストを送信します(次のURLにアクセス)。

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

取得する投稿の数を指定

WordPress REST APIではパラメーターを使うこともできて、per_page=2のようなパラメーターで投稿数を指定できます。

ちなみにこれはWordPressのWP_Queryに対応しています。

https://example.com/wp-json/wp/v2/posts/?per_page=2

上のURLでは2つの記事データを取得できます。

投稿IDを指定するとき

IDを指定してデータを取得するには、/wp/v2/posts/4/というルートでIDが4の投稿データを取得することができます。

WordPressのget_post()関数に対応しています。

https://example.com/wp-json/wp/v2/posts/4/

投稿を検索するとき

投稿を検索する場合には、search=○○というパラメーターを使います。

たとえばwordpressという単語を投稿の中からREST APIで検索するときは次のようになります。

https://example.com/wp-json/wp/v2/posts/?search=wordpress

固定ページのデータを取得

複数の固定ページのデータを取得するには、投稿の場合とほとんど同じで、postspagesにすれば大丈夫です。

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

その他のデータの取得

WordPress REST APIでは次のようにいろいろなエンドポイントが用意されています。

リソース ベースとなるルート
カテゴリー /wp/v2/categories
タグ /wp/v2/tags
コメント /wp/v2/comments
メディア /wp/v2/media
ユーザー情報 /wp/v2/users
Media /wp/v2/media
設定 /wp/v2/settings
テーマ /wp/v2/themes
ブロック /wp/v2/blocks

たとえばカテゴリーの情報は/wp/v2/categoriesというルートで取得できるので、URLは次のようになります。

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

上で紹介したような情報は、英語になりますが、WordPress公式サイトのREST API Handbook Endpoint Referenceに載っています。

REST APIを使ったその他の操作

投稿の新規作成

投稿を新しく作成する場合は、/wp/v2/postsのエンドポイントに対してPOSTリクエストを送信します。

※ WordPressのwp_insert_post()に対応。

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

投稿の削除

投稿を削除するには、/wp/v2/posts/123のように投稿IDを指定してDELETEリクエストを送信します。

※ WordPressのwp_delete_post()に対応。

https://example.com/wp-json/wp/v2/posts/123

カスタムルートの作成

デフォルトではREST APIを使って取得したり操作できる情報には限りがありますが、テーマやプラグインのPHPファイルからルートを登録することもできます。

WordPress REST APIでルートを新規作成するには、rest_api_initというアクションフックの中でregister_rest_route()を使用します。

PHP
コピーする
add_action( 'rest_api_init', 'wcl_rest_api_init' );
function wcl_rest_api_init() {
// ...
}

register_rest_route()の引数

register_rest_route()の引数は、次のようになります。

register_rest_route($namespace, $route, $args, $override)

引数 説明
$namespace (必須)名前空間。
たとえばwclのように、プラグインやアプリに固有のURLセグメントを指定します。デフォルトのルートの名前空間はwp
$route (必須)追加するルートのベースURL。
$args (オプション)エンドポイントのオプション用の配列。この中にコールバック関数などを書きます。
$override (オプション)ルートがすでに存在する場合に、上書きするかどうかをtrue or falseで指定。

register_rest_route()のHTTPメソッド

register_rest_route()関数では、上で紹介した$argsという引数のmethodsに、次のような書き方でHTTPメソッドを渡します。

HTTPメソッド 書き方
GET WP_REST_Server::READABLE
POST、PUT、PATCH WP_REST_Server::EDITABLE
DELETE WP_REST_Server::DELETABLE
GET、POST、PUT、PATCH、DELETE WP_REST_Server::ALLMETHODS

register_rest_route()の使い方

使い方というほどちゃんとしたものではありませんが、register_rest_route()関数は次のように使います。

PHP
コピーする
register_rest_route(
'wcl',
'/themes',
array(
'methods' => WP_REST_Server::READABLE,
'callback' => 'wcl_get_themes_endpoint',
'permission_callback' => function() { return true; }
)
);

callbackはルートが指定したエンドポイントに一致したときに実行されます。

permission_callbackでは、true or falseで関数の実行許可を与えることができます。

デフォルトのエンドポイントを編集する

WordPressでは、rest_endpointsというフィルターフックを使って、既存のエンドポイントを編集することができます。

エンドポイントを無効にする

たとえば投稿のデータを操作する/wp/v2/postsというデフォルトのエンドポイントを無効にしたい場合には、次のようなコードで実現できます。

※ 次のコードで投稿データの取得や作成、更新、削除する機能が削除されます。

PHP
コピーする
add_filter( 'rest_endpoints', 'wcl_filter_rest_endpoints');
function wcl_filter_rest_endpoints( $endpoints ){
if ( isset( $endpoints['/wp/v2/posts'] ) ) {
unset( $endpoints['/wp/v2/posts'] );
}
return $endpoints;
}

プラグインで簡単にREST APIを無効にする

WordPressではデフォルトの状態でREST APIのデータが有効化されているので、表示したくないデータまで一般ユーザに表示してしまう可能性があります。

一般ユーザにはREST APIのデータを公開したくない場合は、Disable WP REST APIというプラグインが便利です。

使い方は簡単で、プラグインをインストール後に有効化するだけで、ログインしていないユーザーへのREST APIのデータの公開を制限できます。

Copyrights © WebCraftLogAll Rights Reserved.