jqで自分のサイトのWP APIエンドポイントを確認する
なんとなくWP API止めてるって人いませんか? JetPackやContact Form 7など、最近のプラグインは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を使ってる可能性も結構あるので無闇に止めるのは正直オススメしないです。