WP REST API V2にてカスタムエンドポイントを追加するまとめ
カスタムエンドポイントの作り方全般をまとめてみた。
環境など
- PHP 5.6
- WordPress ver.4.5.3
- WP REST API ver.2.0-beta13.1
- ドメイン :
http://wprest.local
GET
まずは基本的な追加方法としてGET
メソッドのエンドポイントを追加する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
rest_api_init
のフックでREST APIが初期化されたタイミングで追加する。
呼びだされたadd_custom_endpoint
関数内でAPIのエンドポイントを追加している。
エンドポイントを追加するには、register_rest_route
を利用する。
- 第一引数 : 名前空間
- 第二引数 : エンドポイント
- 第三引数 : メソッドなどの設定配列
第一引数と第二引数を合わせたものがエンドポイントとなる。
エンドポイントは(デフォルトでは) /wp-json/
がルートとなるのでこの指定はそれ以下の分、となる。
なので、このエンドポイントへのアクセスは以下のURLのようになる。
http://wprest.local/wp-json/custom/v0/show
第三引数のcallback
で指定した関数がAPIアクセス時に呼び出される。
返却する内容は実はなんでも構わないが、WP_REST_Response
クラスを利用することでヘッダーなどの設定が出来るよう。
ここでは、ステータス200、ヘッダーにドメインをロケーションで追加、などしている。
返ってくる内容は以下。
1 2 3 4 5 |
|
パラメータの追加
REST APIらしく、URLにIDなどのパラメータを含める事ができる。
register_rest_route
でエンドポイントを指定する時に以下のようにする。
1 2 3 4 |
|
受け取る際は、コールバックの関数内で以下のようにする。
1 2 3 4 5 |
|
メソッドの指定方法
メソッドの指定方法はGET
やPOST
など文字列での指定も可能だが、WP_REST_Server
クラスを指定して複数いっぺんに指定が出来たりもする。
1 2 3 4 |
|
- READABLE = ‘GET’
- CREATABLE = ‘POST’
- EDITABLE = ‘POST, PUT, PATCH’
- DELETABLE = ‘DELETE’
- ALLMETHODS = ‘GET, POST, PUT, PATCH, DELETE’
エラーの追加
指定されたIDの投稿がないなど、エラーを返したい場合は以下のようにする。
(404エラーの場合の例)
1 2 3 4 5 |
|
/custom/v0/show/0
でアクセスすると以下のように返ってくる。
1 2 3 4 5 6 7 |
|
POST
ポストでの送信、データ取得は以下。ほぼ、GETの時と変わらない。
送られたデータはどうやって取得するのかすごく悩んだのだが、単純に$_POST
で取得、でよかった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
送った内容を表示させているだけ、の内容。
bodyで、id=2
, body=test
の2つを送ってみると、返ってくる値は以下。
1 2 3 4 |
|
権限
特にPOSTなどは実行するには認証を必要としたい場合が多いと思う。
そういう時には、実行前に権限をチェックする関数を呼び出すものとして、permission_callback
が用意されている。
register_rest_route
の第三引数の中で以下のように指定する。
1 2 3 4 5 |
|
この呼びだされた関数で、true
を返すと通り、false
を返すとエラーとなる。
エラーは以下のように返却される。
1 2 3 4 5 6 7 |
|
この権現の確認は、current_user_can
関数で行う。
1 2 3 |
|
OAuthやアプリケーションパスワードを使った認証部分はこの手前で完了しているため、実際に接続しに来たユーザーの権限をここでチェックしてやるだけで良い。
権限は以下を参考に。
参考: current_user_can:WordPress私的マニュアル