【WordPress】WordPressの投稿一覧を他サイトで表示する【WP REST API】前編

WPRESTAPI

はじめに

以前、3つの異なるブログを運営していた私にとって、メインサイトとなるsnow-leaf.comをどうするか悩んでいました。
自己紹介的なポートフォリオサイトも違うし、かといってそのままブログへのリンクだけを貼るのもどうかなぁと思ったので、それぞれのブログの投稿一覧を表示できないかと考えました。

すぐさま検索をかけると、興味深い投稿がありました。

質問者様
質問者様

「2つのサイトのそれぞれ最新記事」を表示させることはできませんでしょうか。

サルワカくん
サルワカくん

サイトAにAPIと呼ばれるものを設定し、サイトBからそのデータを取得し…というようにかなり複雑な作業となります。セキュリティ面からもご自身で知識がないと危険です。

以前はRSSフィードなるものがあり、そこからブログ情報を引っ張ってこれると勝手に思ってましたが、もはやオワコンらしく今はAPI(Application Programming Interface)の時代である事は確かにそうだなぁと思いました。

APIって何?

APIって何?って事ですが、例えばホテルをWebサイトで予約する場合、日付やプランなどを選択します。
予約を完了するためには、Webサイトからデータベース(以下DB)にアクセスし、希望する条件の在庫と料金を確認し、予約の可否が表示されます。

一方、楽天トラベルやじゃらん、Booking.comなど複数のホテルWebサイトのDBから情報を集約している宿泊予約サイトの場合はどうでしょうか。

宿泊予約サイトはAPIを使ってそれぞれのホテルWebサイトのDBとやり取りします。
APIは親切なウェイターのように、宿泊予約サイトを通して空室情報やオプションなどのデータを、ホテルWebサイトのDBに依頼するインターフェースです。
ホテルWebサイトのDBから応答を受け取ったAPIは、その情報を宿泊予約サイトに返信し、ユーザは最新情報を宿泊予約サイトで確認できるようになります。

仲介役的な役割を担い、外部からサイトのDBの情報をとってこれるという事です。


話は戻して、実はWordPressはバージョン4.7.xから標準でWP REST APIというものが組み込まれています。

RESTって何?

APIってなんとなくわかったけど、いやいや今度はRESTって何?って思った方、今度はRESTについて説明をします。

  1. RESTとはRepresentational State Transferの略です。
  2. この原則に則るといいですよ、という共通仕様です。
  3. この原則に則るシステムをRESTfulといいます。

つまり、WP REST APIというのはRESTという原則に則って作ったAPIという事がわかります。
では、この原則とは何なのか以下で説明します。

  1. アドレス指定可能なURIで公開されていること
  2. インターフェース(HTTPメソッドの利用)の統一がされていること
  3. ステートレスであること
  4. 処理結果がHTTPステータスコードで通知されること
  5. HTML、XMLなどのハイパーメディアの使用すること

これだけでは訳がわかりませんよね。以下で説明していきます。

①アドレス指定可能なURIで公開されていること

以下にアクセスすると、投稿一覧がずらっとJSON形式で出てきますが、

https://pg.snow-leaf.com/wp-json/wp/v2/posts

それに投稿IDを付け加えると、以下ではページ単体でのAPIが出力されています。

https://pg.snow-leaf.com/wp-json/wp/v2/posts/257

このようにRESTでは一つのリソースに対してアドレス指定可能なURIが用意されていることが推奨されています。
※利用者に提供する情報やデータを「リソース」といいます。

②インターフェース(HTTPメソッドの利用)の統一がされていること

HTTPリクエストにはHTTPメソッドというものがあり、GET(取得)、POST(追加)、PUT(更新)、DELETE(削除)を基本的に使用します。
これは①のアドレス指定可能なURIと通ずる点があり、URIはあくまでもリソースを示すべきなので名詞のみで構成されることが原則となっており、GET(取得)をしたい場合にはwp-json/wp/v2/getPostsではなく、wp-json/wp/v2/postsとし、あとはHTTPメソッドで処理をする形になります。

後編でメソッドを用いて情報を取得しますので、詳しくは後編をご覧ください。

③ステートレスであること

同じリクエスト情報でAPIを呼び出したときは、誰でも同じ情報をサーバーからもらえないとRESTではありません。
ユーザーごとに情報を保持し、同じAPIを実行しているのに処理の内容が変わってしまうのはRESTの原則から外れてしまいます。

④処理結果がHTTPステータスコードで通知されること

ステータスコードはWebサーバーからのレスポンスを表すコードです。
200、404、500とよく見るあのコードです。HTTPメソッドを利用しているのでHTTPステータスコードをその結果として返却するのはごくごく自然です。
こちらも後編でレスポンスコードによって処理を変える方法を行いますのでそちらをご覧ください。

⑤HTML、XMLなどのハイパーメディアの使用すること

情報にハイパーリンクを保持することができ、別の情報へアクセスできることを指します。
基本的にJSON、XMLを扱う事になりますので、それらはリンク情報を含めることができるので、これらのデータフォーマットを使用しておけば問題ないかと思います。


後編ではWP REST APIを駆使して、実際にリソースを取得してHTMLへ吐き出すところまで行います。