API&JWTトークンエンドポイント(WordPress-PHP)

エンドポイント登録

ここで好きなURLをAPI発行所として設定することができます。
callbackでAPI発行処理等を書いた関数を登録
permission_callbackでAPI発行する前にトークン認証したりすることができます。(これは必須ではありません)

トークンエンドポイント

秘密キーの設定(公開外)

例: /home/username/secret-config.php

キーの隠し方はこっち

トークン発行エンドポイント

保護されたエンドポイントでのチェック

他のエンドポイントでは、トークンを検証する permission_callback を使います。

要するにこの関数をエンドポイント登録のところで permission_callback として設定してAPIを発行する前にヘッダーでトークンをチェックしてからAPIを発行して安全性を高めようということです。

✅ WP_REST_Request とは?

WordPressのREST APIでコールバック関数を作るときに、自動的に引数として渡されるクラスです。
リクエスト情報を扱う便利なラッパーと思えばOKです。

  • $request->get_param() → $_GET や $_POST の値をまとめて取得
  • $request->get_header() → リクエストヘッダの値を取得
  • $request->get_body() → JSON本文をそのまま取得

普通の $_POST や $_GET を使うより安全で、REST API向けに統一的に扱えるようになっています。

🔹 ポイント

  1. $request->get_json_params()
    → application/json で送られたリクエストを自動でパースして配列化してくれます。
    → file_get_contents("php://input") + json_decode を自分で書く必要なし!✨
  2. エラー応答もJSONで返せる
    → new WP_Error(..., ..., array('status' => 403)) を返すと、REST API の標準エラーフォーマットで返却されます。
  3. 返り値は配列でOK
    → WordPress REST API が自動で JSON に変換して返してくれます。

API発行エンドポイント

👉 こうすると、

  • https://example.com/wp-json/weather/v1/cache にアクセスするとキャッシュ済みJSONが取得できる

API登録関数でチェックをする

このコードは、APIに送信されるパラメータ(引数)の必須チェック・型チェック・安全化(バリデーションとサニタイズ)を自動で行う効果があります。

具体的には、APIのリクエストURLの末尾(例: ?app_name=MyWpApp)や、POSTのデータ内に app_name というデータが含まれているかをチェックします。

それぞれの設定の効果は以下の通りです。

1. 'required' => true (必須チェック)

  • 効果app_name というパラメータが必須になります。
  • 挙動: もしこのパラメータを含めずにAPIにアクセスした場合、WordPressはコールバック関数(実際の処理)を実行する前に、自動でエラー(400 Bad Request)を返します。

2. 'type' => 'string' (型チェック)

  • 効果: 送られてきたデータの種類が文字列(テキスト)であることを期待します。
  • 挙動: 配列や不正なオブジェクトなど、文字列として扱えないデータが送られてきた場合にエラーを弾きます。

3. 'sanitize_callback' => 'sanitize_text_field' (データの安全化)

  • 効果: 送られてきたテキストから、不正なコード(HTMLタグやJavaScriptなど)を自動で除去します。
  • 挙動sanitize_text_field はWordPressの標準関数です。これを通すことで、データベースに安全に保存できる状態、または画面に安全に表示できる状態のプレーンテキストに変換されます。
  • 結果: コールバック関数($request->get_param('app_name'))でデータを受け取るときには、すでにキレイに掃除された安全な文字列が入っています。

全体のまとめ

この記述があることで、app_name という文字列のデータが絶対に送られてくることを保証し、さらにその中身を安全にクリーニングしてからプログラムの本体(コールバック)に渡す」という強力な防御壁が作られます。

コメント

タイトルとURLをコピーしました