FSWP API デベロッパー は何をしますか?
常時適用: fswp-developer/references/lean-coding.md(少なく書いて、再利用を優先)、fswp-developer/references/coding-standards.md(コーディング標準、ドキュメント、国際化、アクセシビリティ)、および fswp-security-engineer(入力、出力、認可)。
公式リファレンス: REST API ハンドブック(fswp-developer/references/official-docs.md)。fswp-security-engineer のセキュリティルールはすべてのルートに適用されます。
ルートの登録
function vp_register_routes() {
register_rest_route( 'vendor-prefix/v1', '/items/(?P<id>\d+)', array(
'methods' => WP_REST_Server::READABLE,
'callback' => 'vp_get_item',
'permission_callback' => function ( WP_REST_Request $r ) {
return current_user_can( 'edit_post', (int) $r['id'] );
},
'args' => array(
'id' => array( 'type' => 'integer', 'required' => true, 'sanitize_callback' => 'absint' ),
),
) );
}
add_action( 'rest_api_init', 'vp_register_routes' );
ルール
- 名前空間とバージョン:
vendor-prefix/v1。コアのwp/v2名前空間には決して登録しないでください。 permission_callbackは必須です。 ログイン状態だけでなく、ケイパビリティチェックを返してください。完全に公開データの場合のみ__return_trueを使用し、その理由をコメントで説明してください。リクエストに ID が含まれる場合は、オブジェクトレベルのアクセス権(edit_post、所有権)をチェックしてください。argsを宣言し、type、required、enum、minimum/maximum、validate_callback、sanitize_callbackを指定してください。リクエストはバリデーション後も信頼できないため、$request->get_param()の値は型指定されたものとして使用してください。- データは
rest_ensure_response()で返し、エラーはnew WP_Error( 'vp_code', __( 'Message', 'text-domain' ), array( 'status' => 404 ) )として返してください。正確なステータスコードを使用してください(400 不正、401 未認証、403 禁止、404 未検出、409 競合、413 大きすぎる)。 - スキーマ:
get_item_schema()(またはschemaコールバック)を実装して、クライアントとインデックスがリソースを記述できるようにし、prepare_item_for_response()でレスポンスを整形してください。 - コレクション: ハードキャップ付きの
page/per_pageをサポートし、X-WP-TotalとX-WP-TotalPagesを設定し、無制限のリストを決して返さないでください。 - 秘密、パスワードハッシュ、生のオプション、他のユーザーのプライベートデータを決して返さないでください。
- コントローラー: ルートが 2、3 個を超える場合は、
WP_REST_Controllerを拡張し(register_routes、get_items、get_item、create_item、メソッドごとのパーミッションチェック)、クラスを一度だけ登録してください。 - コアオブジェクトの公開: カスタム投稿タイプとタクソノミーは
'show_in_rest' => true(およびrest_base)で公開し、メタはregister_meta()/register_post_meta()で'show_in_rest' => trueに加えてスキーマとauth_callbackを指定して公開してください。 - キャッシュとパフォーマンス:
GETハンドラーは軽量に保ち、高コストな結果はキャッシュし(fswp-performance-engineer)、ループ内でのクエリは避けてください。
認証
| クライアント | 方法 |
|---|---|
| 同一サイト JS(管理画面、ブロック、フロントエンド) | Cookie 認証 + X-WP-Nonce ヘッダー(wp_create_nonce( 'wp_rest' )、または自動付与する wp_localize_script / @wordpress/api-fetch) |
| 外部サーバーまたはアプリ | HTTPS 上のアプリケーションパスワード、または審査済み OAuth プラグイン |
| 公開読み取り | データが公開されている場合のみ、認証不要 |
ノンスはケイパビリティチェックを代替しません。CORS: 認証済みルートで Access-Control-Allow-Origin: * を開放しないでください。
クライアントサイド
ブロックや管理画面では @wordpress/api-fetch を使用してください。エラーはテキスト解析ではなく、code と message で処理してください。
Abilities API
ツールや AI エージェントが発見・呼び出し可能な、個別の機械可読な機能(名前、入力スキーマ、出力スキーマ、パーミッションチェック、実行コールバック)を登録するためのコア API です。これは比較的新しい機能です。使用前に開発者ドキュメントで最低限必要な WordPress バージョンと正確な関数名を確認してください(「Abilities API」で検索)。PRD でエージェントが呼び出せる関数が必要な場合にのみ使用してください。通常のクライアント-サーバー呼び出しには通常の REST で十分です。
アビリティを登録する際は:
- 最初にカテゴリを、次にアビリティを、ドキュメント化されたフックで登録してください。
- 入力と出力に JSON スキーマを指定し、実際のケイパビリティをチェックする
permission_callbackを指定してください。 - 安全性アノテーションを正直に設定してください。読み取り専用アビリティは書き込んではならず、破壊的アビリティはフラグを立てる必要があります。書き込みを行うコールバックに読み取り専用アノテーションが付いている場合は欠陥であり、
fswp-reviewerはそれを欠陥として扱います。 - リモートから呼び出せるべきものだけを REST 経由で公開してください。
監査と検証手順: references/abilities.md。
既存のエンドポイントをアビリティにすべき候補を提案する場合は、各ルートのメソッド、現在のパーミッションチェック、副作用、推奨アノテーションをリストアップし、承認されるまでは何も登録しないでください。