jqで自分のサイトのWP APIエンドポイントを確認する

なんとなくWP API止めてるって人いませんか?

JetPackやContact Form 7など、最近のプラグインはWP APIを利用して一部機能を提供するようになっています。
「プラグインをアップデートしたら突然動かなくなった!」って時は、案外このWP APIを止めてることが原因だったりするかもしれません。

とは言っても「じゃあどのプラグインがWP API使ってるかわかんねーよ」ってなりますよね。
ってことで、jqというコマンドラインツールを使って簡単に確認する方法を紹介します。

jqとは

jqとは、JSONを読みやすくできるコマンドラインツールです。

jq (Official)
jq コマンドを使う日常のご紹介

WP APIの戻り値はJSONですので、jqを使うことでみたい情報だけピックアップすることができます。

jqのインストール

Homebrewが入っているなら以下で一発です。

$ brew install jq
$ jq --help
jq - commandline JSON processor [version 1.5]
Usage: jq [options] <jq filter> [file...]

    jq is a tool for processing JSON inputs, applying the
    given filter to its JSON text inputs and producing the
    filter's results as JSON on standard output.
    The simplest filter is ., which is the identity filter,
    copying jq's input to its output unmodified (except for
    formatting).
    For more advanced filters see the jq(1) manpage ("man jq")
    and/or https://stedolan.github.io/jq

    Some of the options include:
     -c     compact instead of pretty-printed output;
     -n     use `null` as the single input value;
     -e     set the exit status code based on the output;
     -s     read (slurp) all inputs into an array; apply filter to it;
     -r     output raw strings, not JSON texts;
     -R     read raw strings, not JSON texts;
     -C     colorize JSON;
     -M     monochrome (don't colorize JSON);
     -S     sort keys of objects on output;
     --tab  use tabs for indentation;
     --arg a v  set variable $a to value <v>;
     --argjson a v  set variable $a to JSON value <v>;
     --slurpfile a f    set variable $a to an array of JSON texts read from <f>;
    See the manpage for more options.

WP REST APIのエンドポイントを確認する

以下のコマンドを実行すればOKです。

$ curl https://YOURDOMAIN.COM/wp-json | jq .routes | jq keys

うちのサイトで試すとこうなります。

$ curl https://wp-kyoto.cdn.rabify.me/wp-json | jq .routes | jq keys
$ curl https://wp-kyoto.cdn.rabify.me/wp-json | jq .routes |jq keys
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  193k    0  193k    0     0   229k      0 --:--:-- --:--:-- --:--:--  229k
[
  "/",
  "/alexawp/v1",
  "/alexawp/v1/skill/(?P<id>\\d+)",
  "/alexawp/v1/skill/briefing",
  "/alexawp/v1/skill/news",
  "/bogo/v1",
  "/bogo/v1/languages",
  "/bogo/v1/posts/(?P<id>\\d+)/translations",
  "/bogo/v1/posts/(?P<id>\\d+)/translations/(?P<locale>[a-z]{2}(?:_[A-Z]{2}(?:_[A-Za-z]+)?)?)",
  "/contact-form-7/v1",
  "/contact-form-7/v1/contact-forms",
  "/contact-form-7/v1/contact-forms/(?P<id>\\d+)",
  "/contact-form-7/v1/contact-forms/(?P<id>\\d+)/feedback",
  "/contact-form-7/v1/contact-forms/(?P<id>\\d+)/refill",
  "/jetpack/v4",
  "/jetpack/v4/connection",
  "/jetpack/v4/connection/data",
  "/jetpack/v4/connection/url",
  "/jetpack/v4/connection/user",
以下略

WP APIのエンドポイントが一覧で見れるようになります。
ざっとみた範囲だと、alexawp,bogo,Contact Form 7,Jeetpackの4プラグインが独自のエンドポイントを追加している様子です。
ということはWP APIを止めるとこの4プラグインの動きが変わる可能性がありそうですね。

ちなみにplugin_name/version(bogo/v1)というエンドポイントにリクエストを出すと、そのプラグインが追加したAPIにどんなリクエストを投げることができるかが確認できます。

Bogoの例

$ curl https://wp-kyoto.cdn.rabify.me/wp-json/bogo/v1 | jq ".routes" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   876    0   876    0     0   7013      0 --:--:-- --:--:-- --:--:--  7064
{
  "/bogo/v1": {
    "namespace": "bogo/v1",
    "methods": [
      "GET"
    ],
    "endpoints": [
      {
        "methods": [
          "GET"
        ],
        "args": {
          "namespace": {
            "required": false,
            "default": "bogo/v1"
          },
          "context": {
            "required": false,
            "default": "view"
          }
        }
      }
    ],
    "_links": {
      "self": "https://wp-kyoto.cdn.rabify.me/wp-json/bogo/v1"
    }
  },
  "/bogo/v1/languages": {
    "namespace": "bogo/v1",
    "methods": [
      "GET"
    ],
    "endpoints": [
      {
        "methods": [
          "GET"
        ],
        "args": []
      }
    ],
    "_links": {
      "self": "https://wp-kyoto.cdn.rabify.me/wp-json/bogo/v1/languages"
    }
  },
  "/bogo/v1/posts/(?P<id>\\d+)/translations": {
    "namespace": "bogo/v1",
    "methods": [
      "GET"
    ],
    "endpoints": [
      {
        "methods": [
          "GET"
        ],
        "args": []
      }
    ]
  },
  "/bogo/v1/posts/(?P<id>\\d+)/translations/(?P<locale>[a-z]{2}(?:_[A-Z]{2}(?:_[A-Za-z]+)?)?)": {
    "namespace": "bogo/v1",
    "methods": [
      "POST"
    ],
    "endpoints": [
      {
        "methods": [
          "POST"
        ],
        "args": []
      }
    ]
  }
}

自分でWP API周りを触ったことがなかったりすると、「別におれ使わないし、このあいだの改ざん騒動怖かったしWP APIとめたいよねー」という気持ちになりやすいとは思います。
ただ、自分が使ってるプラグインがWP APIを使ってる可能性も結構あるので無闇に止めるのは正直オススメしないです。

Comment