WordPress REST APIが、WordPressを変えています。その多くが内部に隠されているため、気付くことはあまりないかもしれません。それでもREST APIの影響は、WordPressのコードとその用途の両面で大きな違いをもたらします。

WordPress REST APIを使用したことがない人にとっては、これが何であるか、ともすると見当もつかないでしょうか。それでも問題ありません。それでは早速、REST APIとは何かを一緒に見てみましょう。

WordPress REST APIとは

WordPress REST APIは、 開発者が使用するインターフェースで、これにより、WordPressインストールの外部からWordPressにアクセスすることができます。アクセスに使用するのはJavaScriptです。これは、インタラクティブなウェブサイトやアプリの作成に使用できます。

RESTは「Representational State Transfer」の略で、APIは「Application Programming Interface」の略です。それぞれの意味を見てみましょう。

Application Programming Interface(API)の定義

「Application Programming Interface(API)」は次のように定義されています。

クライアント側のソフトウェア構築簡素化を目的とした、クライアント=サーバー間のインターフェースまたは通信プロトコル

APIにすでに精通していない限り、この説明はあまり意味を成しません。もっと簡単に言うと、APIは、あるシステムが別のシステムと連携(インタラクション)できるようにするコードのかたまりです。GoogleマップをWordPressサイトに追加したことはあるでしょうか。そんなケースでは、GoogleのMaps APIを使用し、WordPressサイトをGoogleマップと連動させていることになります。

このシステムは完全に独立しているとは限りません。WordPressにはすでに、プラグイン、設定、 ショートコードなどのための、複数のAPIがあります。プラグイン、テーマの開発者はこれを使用して、WordPressコアとやり取りし、様々な機能を実装します(ショートコードの作成やWordPress管理画面への設定操作画面の追加など)。

そして、これとREST APIの違いとして…REST APIを使うと、WordPressインストール外のシステムが、WordPressと連動できるようになります。

Representational State Transfer(REST)の定義

「Representational State Transfer(REST)」は、ウェブシステムが連動するための標準です。RESTがないと、2つのシステムはお互いを理解できず、データをやり取りできません。

アプリケーションがRESTに準拠するためには、5つの原則を満たす必要があります。

  1. 統一されたインターフェース:システム内のリソースにアクセスするためのURLは、均一で一貫性があり、GETなどの一般的なアプローチを介してアクセス可能にする必要があります(詳細は後ほど説明)。
  2. クライアントサーバー:クライアントアプリケーションとサーバーアプリケーションは、独立して開発できるように、別々にする必要があります。サーバー側の技術(例:WordPress)が変更されても、サーバー側のアプリケーション(例:アプリなど)は、同じシンプルな方法で引き続きアクセスできる必要があります。
  3. ステートレス:ステートレス(APIを使用して新しいリクエストが行われても、サーバーの状態は変わらない)である必要があります。これは、リクエストが保持されないことを意味します。
  4. キャッシュ可能:速度の改善とウェブ標準への準拠のために、すべてのリソースはキャッシュ可能でなければなりません。キャッシュは、サーバー側またはクライアント側で実装できます。
  5. 階層化システム:RESTful(RESTの原則に則り実装される)システムでは、複数のレイヤーを使用してアクセスし、必要であれば、中間サーバーにデータを保存することができます。サーバーは、最終的なクライアントがサーバーに直接接続されているかどうかを判断することはできません。

上の制約はすべて、ウェブページとアプリケーションに関連し、アプリケーションとAPIとの連携の仕方を管理します。

WordPressとの関係性

WordPressの文脈で「REST」と「API」を組み合わせると、このような意味になります。WordPress REST APIは、他のシステムがWordPressと連携できるように設計されたコードで、関連するシステムが相互に理解するのを助けます。

たとえば、サードパーティのウェブサイトやモバイルアプリが、あなたのWordPressデータベースにアクセスし、そこからデータを取得したり、そこにデータを追加したりできるようになります。

ただし、これには多くの意味と用途があります。

WordPress REST APIを理解する

WordPress REST APIは、ウェブサイトとアプリの開発方法の変化、そして、WordPressをより広く開くことの必要性に呼応するかたちで開発されました。

WordPress REST APIの背景

WordPress REST APIは、2016年12月にバージョン4.7のコアの一部としてリリースされましたが、それ以前はプラグインとして使用されていました。

WordPressで構築されたさまざまなアプリケーションをサポートし、WordPressをコンテンツ管理システムからアプリケーションプラットフォームに変換するように設計されています。

WordPress.comで広く使用されており、このJavaScriptベースのインターフェースがREST APIを使用してWordPressデータベースと連動しています。また、2019年にコアの一部となったグーテンベルク編集インターフェースでも使用されます。

REST APIは、WordPressの用途を広げます。コンテンツマネージメントシステムは複雑なウェブサイトの実行に強みを発揮しますが、アプリケーションプラットフォームを使用して、ウェブベースのシングルページアプリケーションやSPAを強化することもできます(Googleドキュメントを使用したことがあれば、すでにその効果を、多かれ少なかれ体感しているはずです)。

そこでは、ユーザーがアクションを実行すると、新しいページを読み込む代わりにコンテンツが更新されます。PHP(サーバー側の言語)の代わりにJavaScript(クライアント側の言語)を使用するため、サーバーに絶えずリクエストを送信することなく、ユーザーのブラウザであらゆる機能が実行されます。

WordPressユーザーおよび開発者への影響

あなたがWordPressのユーザー、開発者、あるいはその両方である場合、REST APIから多くの影響を受けていることになります。

ユーザーにとっての影響は以下のようなものになります。

  • グーテンベルクエディターを含む、インターフェースの変化
  • WordPressモバイルアプリの変化と改善
  • セルフホスティングWordPressの画面が、徐々にcomの画面よりに変化している

開発者にとっては、より広範な違いを意味します。

  • REST APIを使用してSPAを作成する機能:WordPressからデータを取り込むものの、WordPressの見た目とは大きく異なる
  • WordPressを他のフロントエンドテクノロジーやシステムと統合する機能
  • PHPを専門としないフロントエンド開発者でもWordPressで開発が可能に
  • PHP開発者にとっては、JavaScriptにも精通しておくべき必要性が増加
  • その他、特定の部位での変化:ページ、投稿編集画面でメタボックスの代わりにグーテンベルクブロックを構築する必要性

時の経過と共に、WordPress REST APIにより、WordPressコアの多くがPHPではなくJavaScriptで記述される流れに移行しています。WordPress開発者がJavaScriptを学ぶ必要性が高まっていると言えるでしょう。

WordPress REST APIにアクセスする方法

それでは、どのようにして、WordPress REST APIにアクセスできるのでしょうか?

WP-REST APIへのアクセスは、コマンドラインから行います。WordPressでは、これはWP-CLIと呼ばれています。実際、管理画面を介して、またはサイトのコードに直接アクセスして、これを実行することはありません。

それでは、その方法へと進みましょう。

WP-CLIを使ってWP-RESTにアクセスする

WP-CLIは、WordPress用のコマンドラインインターフェース(CLI)です。コンピューターのCLIを介して、WordPressにアクセスし作業ができるようになります。ちなみにWP-CLIは、すべてのKinstaホスティングプランにプリインストールされています。

CLIにアクセスするには、MacまたはLinuxでターミナルを開くか、Windowsでコマンドプロンプトを開きます。

Macのターミナル
Macのターミナル

リモートサイトにアクセスするには、SSHでサーバーに接続して、WP-CLI経由でこれを実行する必要があります。

ローカルサイトにアクセスするには、コマンドラインから正しいディレクトリストラクチャを使用するだけでOKです。本番サイトで試す前に、ローカルテストサイトでREST APIを試すことをお勧めします。

次のように、あなたのサイトを指定して、REST APIにアクセスする必要があります。

yoursite.com/wp/v2

その後、特定の種類のデータにアクセスするための要素を追加します。これについては、後ほど詳しく説明します。ちなみにこのような要素は、エンドポイントと呼ばれます。

認証

サイトにアクセスしたら、認証が必要になる場合があります。一部のエンドポイントはパブリックであり、認証を必要としませんが、これが必要になるエンドポイントもあります。

ここでは、サイト管理画面にログインしているわけではありません。RESTAPIの動作は少し異なります。

WP-CLIを使用してサイト認証を行うには、認証プラグインをインストールする必要があります。開発環境向けにインストールするなら、Basic Authプラグインの利用が簡単で、これで十分です。

ただし、本番サイトの場合は、JWT Authenticationプラグイン(JSON Web Tokenを使用し、より安全)などの、より堅牢な認証手段を使用する必要があります。

その後、コマンドラインを使用してデータにアクセスし、認証を含めることができます。

以下の例では、「curl」を使用してWordPressへの接続をテストします。下書き状態にある投稿のリストが出力されます。

curl -X GET --user username:password -i http://yoursite.com/wp/v2/posts?status=draft

下書きの投稿は公開情報ではないため、アクセスするには認証が必要です。一方で、すでに公開されているデータを探す場合には、認証は必要ありません。公開状態の投稿を取得するには、以下が使用できます。

curl -X GET http://yoursite.com/wp/v2/posts

これで、すでに公開されている投稿が取得されます。

WordPress REST APIコマンドの概要

サイトへのアクセスが完了し、認証の使い方(そして、これを使う必要があるのか)がわかったら、コマンドを使用するステージへと進みましょう。

以下に、具体的なコマンドをご紹介します。

  • GET:投稿などのデータを取得します。
  • POST:投稿、添付ファイルなどのリソースをサーバーに追加します。
  • PUT:すでにサーバーにあるリソースの編集やアップデートに使用できます。
  • DELETE:サーバーにあるリソースを削除します。これの使用には注意が必要です。

それぞれについて、見てみましょう。

GET

「GET」コマンド
「GET」コマンド

GET コマンドは、ともすると、最も利用することになるでしょう。これは、データの取得を行います。以下の例を実行すると、あなたのサイトで公開された全ての投稿を取得することができます。

GET /wp/v2/posts/?status=published

すでにWP-CLIを使ってアクセスが完了しているので、上の例には、完全なパスを記述していません。

データの取得をした後は、次の操作に使うことができます。ある投稿を削除したり、編集したり、更新したり。または、投稿をウェブアプリに出力することもできます。

最新の投稿を取得したいとします。そんな時には、以下のコマンドを使います。

GET /wp/v2/posts/?per_page=1

投稿の操作に使用できる引数はたくさんあります。詳細については、 WordPress REST APIハンドブックをご参照ください。

POST

「Post」コマンド
「Post」コマンド

POST を使って新しいデータやリソースをサイトに追加することができます。

例えば、投稿を作成したいとすると、 POST コマンドを使うことから始めます。

POST /wp/v2/posts/

これで、空白の新しい投稿が作成されます。

そして、 PUT コマンドを使えば、この投稿が更新できます。

また、POST コマンドで、添付ファイルやその他の投稿タイプなど、投稿以外のリソースを追加することもできます。

固定ページをサイトに追加するには、以下のようなコマンドを使用します。

POST /wp/v2/posts/pages

これで、投稿の場合と同じように、空白の固定ページが作成されます。

PUT

「POST」コマンド
「POST」コマンド

PUT コマンドでは、投稿などの既存のリソースを編集することができます。

あなたのサイトに多数の下書き状態の投稿があり、これをチェック、更新し、公開する必要があるとします。

すべての下書き状態の投稿を取得することから始めましょう。

POST /wp/v2/posts/?status="draft"

システムから、現在下書き状態にある全ての投稿が表示されます。そして、IDを使用して、そのいずれかのステータスを変更できます。

PUT /wp/v2/posts/567

これで、特定の指定した投稿にアクセスして、編集することができます。ステータスの変更には、以下の引数を使用します。

{
"status" = "publish"
}

または、投稿にコンテンツを追加して、公開することもできます。

{
"status" = "publish"
"content" = "content here"
}

サーバーからは、PUTリクエストによって投稿が正常に編集されたことを意味する 200 - OK ステータスが返されます。

DELETE

「DELETE」コマンド
「DELETE」コマンド

DELETE コマンドは文字通りの役目を担い、リソースを削除します。デフォルトでは、これで投稿を「削除」すると、完全に削除することなく、ゴミ箱に移動します。

作成した投稿をゴミ箱に移動するには、以下のようなコマンドを使います。

DELETE /wp/v2/posts/567

一方で、ゴミ箱を経由せずに、完全に削除したい場合には、以下のように引数を使います。

DELETE /wp/v2/posts/567?force=true

これで、投稿は完全に削除され、復帰することはできないので、このアクションには注意が必要です。

WordPress REST APIを使うべきではないケース

WordPress REST APIは、ウェブサイトやアプリの開発に必ずしも適切なアプローチとは限りません。開発に使用する前に注意すべきいくつかの事項を以下にご紹介します。

互換性

JavaScriptを実行しないデバイス上で、または、ユーザーがJavaScriptをオフにしているケースでは、REST APIを使用したアプリは機能しません。

一方で、PHPでコーディングしたWordPressサイトはHTMLを出力するため、この問題は発生しません。JavaScriptを使用しないデバイスは希少になりつつありますが、そのようなデバイス専用に開発するとなると、REST APIを使っていては機能しないことになります。

同様に、ユーザーがJavaScriptをオフにする可能性が高い場合、REST APIを使用すると問題が発生します。一部のユーザーは、アクセシビリティまたはセキュリティ上の理由から、ブラウザーでJavaScriptをオフにしています。

アクセシビリティ

JavaScriptを使用して開発したサイトやアプリは、HTMLで出力されるものほどアクセスしやすいとは限りません。

これは主に、JavaScriptを使用して動的コンテンツを配信する方法が原因になります。動的コンテンツは、スクリーンリーダーでうまく再生できず、視覚障がいや光過敏性発作を持つ人に、問題を引き起こす可能性があります。

REST APIを使用してWordPressサイトにアクセスし、アクセシビリティを考慮した形式でデータを出力すると、このような問題を克服できますが、開発をしながら、サイトのアクセシビリティを確認することが重要です。

SEO

頻繁に更新されるシングルページアプリケーション(SPA)は、SEOの問題を引き起こす場合があります。というのも、ページが最初に出力されたときに配信されなかったコンテンツが検索エンジンによりインデックスに登録されない可能性があるためです。

現在多くのウェブサイトがSPAを利用しており、Googleやその他の検索エンジンは、この事実を反映するように、適切にインデックスを行いつつあります。ただし、REST APIを使用してサイトを開発する際には、徹底的にSEOの観点からモニタリングを行うことが重要でしょう。

WordPress REST APIを無効にする方法

アプリケーションがREST APIを使用しサイトのデータにアクセスするのを避けるために、これを無効化することもできます。ただし、公開データには、あなただけでなく、誰でもアクセスできるので、その違いには注意してください。

方法としては、Disable WP REST APIというプラグインをインストールします。これにより、サイトにログインしていないすべてのユーザーのREST APIが無効になります。

プラグイン「Disable WP REST API」
プラグイン「Disable WP REST API」

または、テーマの関数ファイルにコードを追加するか、独自のプラグインを作成することもできます。これはテーマ固有の機能ではないため、プラグインとして作成することをお勧めします。

プラグインには、以下の二行を追加します。

add_filter( 'json_enabled', '__return_false' );
add_filter( 'json_jsonp_enabled', '__return_false' );

これで、サイトのREST APIが完全に無効になります。管理画面で連鎖反応が引き起こされることがあるため、追加したら、すべてが正常に機能しているかどうか、確認してください。

WordPress REST APIを使った便利な実例

REST APIは、WordPressの未来に新たな可能性をもたらす可能性を秘めています。WordPress REST APIを使用してSPAを作成したり、WordPressを他のサイトやテクノロジーにリンクしたり…そんな機能の実装されたアプリケーションやサイトの例をご紹介します。

WordPress.com

WordPress.comのインターフェース
WordPress.comのインターフェース

WordPress.comの管理画面は完全にREST APIを使用して構築されており、ここにあるSPAを使ってユーザーがサイトの管理を行います。

これにより、インターフェースとサーバー間の動的な通信が可能になり、ユーザーフレンドリーなインターフェース(WordPress.orgがやがて模倣する可能性が高い)が実現しています。

ブロックエディター(グーテンベルク)

グーテンベルクエディター
グーテンベルクエディター

もう一つの、WordPress管理画面の例がこちら(ただしこちらは、セルフホスト型のWordPressの話です)。グーテンベルクブロックエディターは、REST APIを使用してデータベースと通信し、ブロックを作成します。

投稿タイプがグーテンベルクエディターで機能するためには、REST APIが有効である必要があります。つまり、カスタム投稿タイプを登録し、これをグーテンベルクで使用するには、次の行を追加してその投稿タイプのブロックエディターを有効にすることになります。

"show_in_rest" = true;

Event Espresso

Event Espresso
Event Espresso

Event Espressoは、イベントの整理と公開を可能にするWordPressプラグインです。ユーザーがWordPressの外部からデータにアクセスできるように、REST APIを利用しています。これは、イベント管理のモバイルアプリやSPAが構築できることを意味します。

UsTwo

UsTwo
UsTwo

UsTwoは、REST APIをシングルページアプリケーションとして使用し、サイトを構築したデジタルエージェンシーです。Reactを使用して構築したフロントエンドとWordPress搭載のバックエンドを組み合わせています。(関連記事: WordPressエージェンシーの開始と運営を成功させる方法徹底ガイド

シングルページのコンテンツはモジュール式で、通常のWordPressページとは異なる構造になっています。モジュール式コンテンツを追加できるように、カスタムページビルダープラグインが使用されています。

USA Today

USA Today
USA Today

USA Todayのウェブサイトは、サイト内にもとからあるシステム、モジュールと、WordPress REST APIを統合を使用して、再構築されています。

REST APIの力により、JSONを使用し、サイトのコンテンツをFacebook Instant ArticlesやApple Newsなどの他のアウトレットに送信できる仕組みです。また、スポーツセクションには、JavaScriptで構築されたオンラインソーシャルゲームもあります。

まとめ

WordPress REST APIは、WordPressユーザーと開発者の両方にとって、想像力を掻き立てる課題、そして、興味深い新たな機会をもたらしています。これは、言うなれば、WordPressの未来であり、WordPressの開発の仕方と使い方を根本的に変える可能性すらあります。

あなたは、REST APIをどう思いますか?すでに、プロジェクトで使用したことはありますか?以下のコメント欄で教えてください!

Rachel McCollin

2010年からWordPressサイトの構築をサポート。自己ホスティング型のWordPressをこよなく愛し、できるだけ多くの人がWordPressを利用して優れたウェブサイトを作成する手助けをしたいと日夜奮闘。