当您为 WordPress 进行开发时,有许多 API 可用于与您的站点数据进行交互。其中最重要的 API 之一就是 REST API。
本课程作为 WordPress REST API 的入门介绍。
您将了解什么是 REST API,以及一些关键的 REST API 概念,例如路由、端点和全局参数,这些将通过您可以在浏览器中执行的一系列示例请求来学习。
您还将了解在哪里可以找到关于 WP REST API 的更多信息。
什么是 WordPress REST API?
WordPress REST API 提供了一个接口,供应用程序与 WordPress 站点进行交互。这些应用程序可以是 WordPress 插件、主题,或需要访问 WordPress 站点数据的自定义应用程序。
WordPress REST API 最著名的实现之一是块编辑器,它是一个通过 REST API 与 WordPress 数据进行交互的 JavaScript 应用程序。
如果您打开浏览器的开发者工具并查看“网络”选项卡,您可以看到当您与块编辑器交互时,向 WordPress REST API 发出的请求。
REST API 是什么意思?
API 代表应用程序编程接口。它是一组允许应用程序相互交互的功能。WordPress 有许多 API,REST API 只是其中之一。
REST 代表表述性状态转移,这是一种软件架构风格,描述了物理上独立的组件之间的统一接口。
其核心是,WordPress REST API 提供了代表文章、页面、分类法以及任何其他自定义数据类型的 REST 端点(URI)。您的代码可以以 JavaScript 对象表示法(即 JSON)的形式向这些端点发送和接收数据,以获取、修改和创建您站点上的内容。
让我们深入了解 REST API 的一些概念,以便更好地理解它们。
路由与端点
在 WordPress REST API 的上下文中,路由是一个可以映射到不同 HTTP 方法的 URI。
HTTP 方法是您与网络上任何内容交互时发出的请求类型。例如,当您浏览到网络上的一个 URL 时,会向服务器发出一个 GET 请求以请求数据。
当您提交表单时,会发出一个 POST 请求,该请求将提交的表单数据传递给 Web 服务器。
将单个 HTTP 方法映射到路由的过程称为端点。
因此,例如,您会有一个用于获取数据的 GET 端点、一个用于创建数据的 POST 端点以及一个用于删除数据的 DELETE 端点,所有这些都使用相同的路由。
本地开发测试
关于在本地 WordPress 安装上测试 REST API 路由,需要注意的一点是,您可能需要启用除“朴素”之外的固定链接设置。
这是因为 REST API 使用与固定链接相同的 URL 重写功能,将人类可读的路由和端点映射到相关的内部请求。
因此,如果您的本地 WordPress 安装使用的是默认的“朴素”固定链接设置,请将其更改为类似“文章名”的设置。
示例路由与端点
让我们看一些路由和端点的示例。
如果您打开浏览器,并访问 WordPress 站点的 /wp-json/ URI,您将向该 URI 发出一个 GET 请求,该请求会返回一个 JSON 响应。
// 示例代码块,保持原样
某些浏览器内置支持“美化打印”JSON 响应,这将以更易读的格式显示它。
如果您使用 Firefox 查看 JSON 响应,它允许您在不同视图之间切换,以及检查请求头。
根据您的需求,也有浏览器扩展程序,例如 Chrome 的 JSON Formatter 或 Safari 的 JSON Peep。
返回的数据是一个 JSON 响应,显示了哪些路由可用,以及每个路由内有哪些端点可用。
在此示例中,/wp-json/ 是一个路由,当该路由收到 GET 请求时,由显示数据的端点处理。此数据就是所谓的 WordPress REST API 的索引。
相比之下,/wp-json/wp/v2/posts 路由提供了一个返回文章列表的 GET 端点,但也提供了一个 POST 端点。如果您是经过身份验证的用户,并且通过 POST 请求向 /wp-json/wp/v2/posts 路由提交了正确的数据,则该请求由创建新文章的端点处理。
通常,同一个路由(在本例中为 /wp-json/wp/v2/posts)将针对不同的 HTTP 方法有不同的端点,包括用于获取数据的 GET、用于创建数据的 POST 和用于删除数据的 DELETE。
全局参数
WP REST API 包含许多全局参数,这些参数控制 API 如何处理请求/响应处理。这些参数在实际资源之上的层运行,并且对所有资源都可用。
全局参数作为查询字符串参数在 REST API 路由上实现。查询字符串以 ? 开头,后跟一系列由 & 分隔的 key=value 键值对。
看看你之前查看过的 /wp-json/wp/v2/posts 路由,通过在浏览器中请求该路由,从而激活 GET 端点。如你所见,默认情况下会返回文章的所有可用字段。
不过,你可以通过添加 _fields 全局参数来更新路由,然后以逗号分隔的列表形式指定你希望在响应中返回的字段。
wp-json/wp/v2/posts?_fields=author,id,excerpt,title,link
如果你通过刷新浏览器发起第二个 GET 请求,那么只有你请求在响应中返回的字段才会可用。
分页与排序
WP REST API 还支持结果的分页和排序。
分页由 per_page、page 和 offset 参数处理。
例如,你可以通过向路由添加 per_page 参数,将 wp-json/wp/v2/posts 路由更新为每页仅返回 5 篇文章。
wp-json/wp/v2/posts?_fields=author,id,excerpt,title,link&per_page=5
如果你通过刷新页面发起新的 GET 请求,则只会返回前 5 篇文章。
还可以使用 order 和 order_by 参数对结果进行排序。
例如,你可以将 wp-json/wp/v2/posts 路由更新为按文章标题降序排列。
wp-json/wp/v2/posts?_fields=author,id,excerpt,title,link&per_page=5&orderby=title&order=asc
延伸阅读
WordPress 开发者资源网站有一个专门介绍 REST API 的完整章节,其中包含关于 REST API 关键概念、常见问题、使用和扩展 REST API 等内容的部分。