_fields
PostのようなRESTリソースは、大量のデータを含んでいます:コンテンツ、タイトル、著者IDなどの基本情報に加えて、登録されたメタデータとフィールド、メディア情報、他のリソースへのリンクも含まれます。アプリケーションは、すべてのリクエストでこれらの情報を必要としない場合があります。
WordPressに応答でフィールドのサブセットのみを返すよう指示するには、_fields
クエリパラメータを使用します。たとえば、アーカイブビューを構築していて、投稿のコレクションに対してID、タイトル、パーマリンク、著者、抜粋のみが必要な場合、このフィールドクエリを使用して応答をこれらのプロパティのみに制限できます:
/wp/v2/posts?_fields=author,id,excerpt,title,link
カンマ区切りのリストの代わりに、クエリパラメータ配列構文を使用して同じリストを提供することもできます:
/wp/v2/posts?_fields[]=author&_fields[]=id&_fields[]=excerpt&_fields[]=title&_fields[]=link
_fields
が提供されると、WordPressは応答オブジェクトを生成する際に不要なフィールドをスキップし、必要のないデータのための潜在的に高価な内部計算やクエリを回避します。これにより、REST APIから返されるJSONオブジェクトは小さくなり、ダウンロードにかかる時間とクライアントデバイスでの解析にかかる時間が短縮されます。
アプリケーションをより迅速に使用し、効率的に実行するために、各リソースから必要なプロパティのみを引き出すようにクエリを慎重に設計してください。
WordPress 5.3以降、_fields
パラメータはネストされたプロパティをサポートしています。これは、多くのメタキーを登録している場合に便利で、登録されたメタプロパティのうちの1つの値のみを要求できます:
?_fields=meta.one-of-many-keys
キーone-of-many-keys
を持つメタ値のみが返され、他のものは除外されます。
複雑なメタオブジェクト内の特定の深くネストされたプロパティを要求することもできます:
?_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
に設定されているリンクのみが埋め込まれます。
リンクと埋め込みについての詳細は、[Linking and Embedding](https://developer.wordpress.org/rest-api/linking-and-embedding/)ページを参照してください。
<a name="_method-or-x-http-method-override-header"></a>
## _method (or X-HTTP-Method-Override header)
一部のサーバーやクライアントは、APIが使用する一部のHTTPメソッドを正しく処理できません。たとえば、リソースに対するすべての削除リクエストは`````DELETE`````メソッドを使用しますが、一部のクライアントはこのメソッドを送信する機能を提供していません。
これらのサーバーやクライアントとの互換性を確保するために、APIはメソッドオーバーライドをサポートしています。これは、`````_method`````パラメータまたは`````X-HTTP-Method-Override`````ヘッダーを介して渡すことができ、使用するHTTPメソッドに設定された値を持ちます。
クライアントは、POSTリクエストでのみメソッドオーバーライドパラメータまたはヘッダーを送信する必要があります。GETリクエストでメソッドオーバーライドを使用すると、リクエストが不正にキャッシュされる可能性があります。
`````POST`````から`````/wp-json/wp/v2/posts/42?_method=DELETE`````へのリクエストは、`````DELETE`````から`````wp/v2/posts/42`````ルートへのリクエストに変換されます。
同様に、次のPOSTリクエストはDELETEになります:
``````bash
POST /wp-json/wp/v2/posts/42 HTTP/1.1
Host: example.com
X-HTTP-Method-Override: DELETE
`
_envelope
エンベロープモードは、`````_envelope`````パラメータがクエリ文字列(GETパラメータ)に渡されると有効になります。このパラメータは値を必要としません(つまり、`````?_envelope`````は有効です)が、クライアントライブラリによって必要な場合は「1」を値として渡すことができます。
将来の互換性のために、他の値は渡さないでください。
エンベロープされた応答には、追加のヘッダー(Content-Typeを除く)なしで「フェイク」HTTP 200応答コードが含まれており、応答が中間者を正しく通過することを保証します。
たとえば、`````GET`````から`````wp/v2/users/me`````への次の応答がある場合:
``````bash
HTTP/1.1 302 Found
Location: http://example.com/wp-json/wp/v2/users/42
{
"id": 42,
...
}
`
同等のエンベロープされた応答(GET
からwp/v2/users/me?_envelope
への応答)は次のようになります:
HTTP/1.1 200 OK
{
"status": 302,
"headers": {
"Location": "http://example.com/wp-json/wp/v2/users/42"
},
"body": {
"id": 42
}
}
_jsonp
APIは、レガシーブラウザやクライアントのためにクロスドメインリクエストを許可するJSONP応答をネイティブにサポートしています。このパラメータは、データの前に追加されるJavaScriptコールバック関数を取ります。このURLは、<script>
タグを介して読み込むことができます。
コールバック関数には、任意の英数字、_
(アンダースコア)、または.
(ピリオド)文字を含めることができます。無効な文字を含むコールバックはHTTP 400エラー応答を受け取り、コールバックは呼び出されません。
最新のブラウザは、クロスドメインリクエストのためにCross-Origin Resource Sharing (CORS)のプレフライトリクエストを使用できますが、すべてのブラウザでのサポートを確保するためにJSONPを使用できます。
たとえば:
<script>
function receiveData( data ) {
// Do something with the data here.
// For demonstration purposes, we'll simply log it.
console.log( data );
}
</script>
<script src="https://example.com/wp-json/?_jsonp=receiveData"></script>