_fields

PostのようなRESTリソースは、大量のデータを含んでいます:コンテンツ、タイトル、著者IDなどの基本情報に加えて、登録されたメタデータとフィールド、メディア情報、他のリソースへのリンクも含まれます。アプリケーションは、すべてのリクエストでこれらの情報を必要としない場合があります。

WordPressに応答でフィールドのサブセットのみを返すよう指示するには、_fieldsクエリパラメータを使用します。たとえば、アーカイブビューを構築していて、投稿のコレクションに対してID、タイトル、パーマリンク、著者、抜粋のみが必要な場合、このフィールドクエリを使用して応答をこれらのプロパティのみに制限できます:

  1. /wp/v2/posts?_fields=author,id,excerpt,title,link

カンマ区切りのリストの代わりに、クエリパラメータ配列構文を使用して同じリストを提供することもできます:

  1. /wp/v2/posts?_fields[]=author&_fields[]=id&_fields[]=excerpt&_fields[]=title&_fields[]=link

_fieldsが提供されると、WordPressは応答オブジェクトを生成する際に不要なフィールドをスキップし、必要のないデータのための潜在的に高価な内部計算やクエリを回避します。これにより、REST APIから返されるJSONオブジェクトは小さくなり、ダウンロードにかかる時間とクライアントデバイスでの解析にかかる時間が短縮されます。

アプリケーションをより迅速に使用し、効率的に実行するために、各リソースから必要なプロパティのみを引き出すようにクエリを慎重に設計してください。

WordPress 5.3以降、_fieldsパラメータはネストされたプロパティをサポートしています。これは、多くのメタキーを登録している場合に便利で、登録されたメタプロパティのうちの1つの値のみを要求できます:

  1. ?_fields=meta.one-of-many-keys

キーone-of-many-keysを持つメタ値のみが返され、他のものは除外されます。

複雑なメタオブジェクト内の特定の深くネストされたプロパティを要求することもできます:

  1. ?_fields=meta.key_name.nested_prop.deeply_nested_prop,meta.key_name.other_nested_prop

_embed

ほとんどのリソースには、関連リソースへのリンクが含まれています。たとえば、投稿は親投稿や投稿に対するコメントにリンクできます。必要なHTTPリクエストの数を減らすために、クライアントはリソースとリンクされたリソースを取得したい場合があります。_embedパラメータは、応答にこれらの埋め込まれたリソースを含めるべきであることをサーバーに示します。

埋め込みモードは、_embedパラメータがクエリ文字列(GETパラメータ)に渡されると有効になります。このパラメータは値を必要としません(つまり、?_embedは有効です)が、クライアントライブラリによって必要な場合は「1」を値として渡すことができます。

WordPress 5.4以降、埋め込むリソースは、_embedパラメータにリンク関係名のリストを渡すことで制限できます。たとえば、/wp/v2/posts?_embed=author,wp:termは投稿の著者と投稿に関連付けられた用語のリストのみを埋め込みます。

埋め込みモードのリソースには、リンクされたリソースを含む_linksキーの隣に追加の_embeddedキーが含まれます。embeddableパラメータがtrueに設定されているリンクのみが埋め込まれます。

  1. リンクと埋め込みについての詳細は、[Linking and Embedding](https://developer.wordpress.org/rest-api/linking-and-embedding/)ページを参照してください。
  2. <a name="_method-or-x-http-method-override-header"></a>
  3. ## _method (or X-HTTP-Method-Override header)
  4. 一部のサーバーやクライアントは、APIが使用する一部のHTTPメソッドを正しく処理できません。たとえば、リソースに対するすべての削除リクエストは`````DELETE`````メソッドを使用しますが、一部のクライアントはこのメソッドを送信する機能を提供していません。
  5. これらのサーバーやクライアントとの互換性を確保するために、APIはメソッドオーバーライドをサポートしています。これは、`````_method`````パラメータまたは`````X-HTTP-Method-Override`````ヘッダーを介して渡すことができ、使用するHTTPメソッドに設定された値を持ちます。
  6. クライアントは、POSTリクエストでのみメソッドオーバーライドパラメータまたはヘッダーを送信する必要があります。GETリクエストでメソッドオーバーライドを使用すると、リクエストが不正にキャッシュされる可能性があります。
  7. `````POST`````から`````/wp-json/wp/v2/posts/42?_method=DELETE`````へのリクエストは、`````DELETE`````から`````wp/v2/posts/42`````ルートへのリクエストに変換されます。
  8. 同様に、次のPOSTリクエストはDELETEになります:
  9. ``````bash
  10. POST /wp-json/wp/v2/posts/42 HTTP/1.1
  11. Host: example.com
  12. X-HTTP-Method-Override: DELETE
  13. `

_envelope

  1. エンベロープモードは、`````_envelope`````パラメータがクエリ文字列(GETパラメータ)に渡されると有効になります。このパラメータは値を必要としません(つまり、`````?_envelope`````は有効です)が、クライアントライブラリによって必要な場合は「1」を値として渡すことができます。
  2. 将来の互換性のために、他の値は渡さないでください。
  3. エンベロープされた応答には、追加のヘッダー(Content-Typeを除く)なしで「フェイク」HTTP 200応答コードが含まれており、応答が中間者を正しく通過することを保証します。
  4. たとえば、`````GET`````から`````wp/v2/users/me`````への次の応答がある場合:
  5. ``````bash
  6. HTTP/1.1 302 Found
  7. Location: http://example.com/wp-json/wp/v2/users/42
  8. {
  9. "id": 42,
  10. ...
  11. }
  12. `

同等のエンベロープされた応答(GETからwp/v2/users/me?_envelopeへの応答)は次のようになります:

  1. HTTP/1.1 200 OK
  2. {
  3. "status": 302,
  4. "headers": {
  5. "Location": "http://example.com/wp-json/wp/v2/users/42"
  6. },
  7. "body": {
  8. "id": 42
  9. }
  10. }

_jsonp

APIは、レガシーブラウザやクライアントのためにクロスドメインリクエストを許可するJSONP応答をネイティブにサポートしています。このパラメータは、データの前に追加されるJavaScriptコールバック関数を取ります。このURLは、<script>タグを介して読み込むことができます。

コールバック関数には、任意の英数字、_(アンダースコア)、または.(ピリオド)文字を含めることができます。無効な文字を含むコールバックはHTTP 400エラー応答を受け取り、コールバックは呼び出されません。

最新のブラウザは、クロスドメインリクエストのためにCross-Origin Resource Sharing (CORS)のプレフライトリクエストを使用できますが、すべてのブラウザでのサポートを確保するためにJSONPを使用できます。

たとえば:

  1. <script>
  2. function receiveData( data ) {
  3. // Do something with the data here.
  4. // For demonstration purposes, we'll simply log it.
  5. console.log( data );
  6. }
  7. </script>
  8. <script src="https://example.com/wp-json/?_jsonp=receiveData"></script>