该 API 包含多个全局参数(也称为“元参数”),用于控制 API 如何处理请求和响应。这些参数在资源本身之上的一层运行,并可在所有资源上使用。
_fields
像文章这样的 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 参数支持嵌套属性。如果您注册了许多元键,这可能非常有用,允许您仅请求其中一个注册元属性的值:
?_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 参数指示服务器响应中应包含这些嵌入的资源。
如果在查询字符串(GET 参数)中传递了 _embed 参数,则启用嵌入模式。此参数不需要值(即 ?_embed 是有效的),但如果客户端库要求,也可以传递 "1" 作为值。
自 WordPress 5.4 起,可以通过向 _embed 参数传递链接关系名称列表来限制要嵌入的资源。例如,/wp/v2/posts?_embed=author,wp:term 将仅嵌入文章的作者以及与文章关联的术语列表。
处于嵌入模式的资源将在包含链接资源的 _links 键旁边包含一个额外的 _embedded 键。只有将 embeddable 参数设置为 true 的链接才会被嵌入。
要将 _embed 与 _fields 一起使用,请将 _embedded 以及 _links 添加到字段中,例如,/wp-json/wp/v2/posts/_embed=author,wp:term&_fields=title,author,_links,_embedded。
有关链接和嵌入的更多信息,请参阅 链接和嵌入 页面。
_method (或 X-HTTP-Method-Override 标头)
某些服务器和客户端无法正确处理 API 使用的某些 HTTP 方法。例如,资源上的所有删除请求均使用 DELETE 方法,但某些客户端不提供发送此方法的能力。
为了确保与这些服务器和客户端的兼容性,API 支持方法覆盖。这可以通过 _method 参数或 X-HTTP-Method-Override 标头传递,并将值设置为要使用的 HTTP 方法。
客户端应仅对 POST 请求发送方法覆盖参数或标头。对 GET 请求使用方法覆盖可能会导致请求被错误缓存。
向 /wp-json/wp/v2/posts/42?_method=DELETE 发送 POST 请求将被转换为对 wp/v2/posts/42 路由的 DELETE 请求。
类似地,以下 POST 请求将变为 DELETE:
POST /wp-json/wp/v2/posts/42 HTTP/1.1
Host: example.com
X-HTTP-Method-Override: DELETE
_envelope
类似于 _method,某些服务器、客户端和代理不支持访问完整的响应数据。API 支持传递 _envelope 参数,该参数将包括标头和状态码在内的所有响应数据发送到正文中。
如果在查询字符串(GET 参数)中传递了 _envelope 参数,则启用信封模式。此参数不需要值(即 ?_envelope 是有效的),但如果客户端库要求,也可以传递 "1" 作为值。
为了未来的兼容性,不应传递其他值。
信封响应包含一个“虚拟”HTTP 200 响应代码,无额外标头(Content-Type 除外),这应确保响应正确通过中间件。
例如,给定对 wp/v2/users/me 进行 GET 请求的以下响应:
HTTP/1.1 302 Found
Location: http://example.com/wp-json/wp/v2/users/42
{
"id": 42,
...
}
等效的信封响应(对 wp/v2/users/me?_envelope 进行 GET 请求)将是:
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 回调函数,该函数将附加在数据之前。然后可以通过 <script> 标签加载此 URL。
回调函数可以包含任何字母数字字符、_(下划线)或 .(句点)。包含无效字符的回调将收到 HTTP 400 错误响应,并且不会调用该回调。
现代浏览器可以使用 跨域资源共享 (CORS) 预检请求进行跨域请求,但可以使用 JSONP 以确保与所有浏览器的支持。
例如:
<script>
function receiveData( data ) {
// 在此处处理数据。
// 为了演示目的,我们将其简单记录。
console.log( data );
}
</script>
<script src="https://example.com/wp-json/?_jsonp=receiveData"></script>