bluehost多IP站群服务器商分享WordPress REST API的快速入门指南(二)
使用WordPress REST API
我们将进入对于如何实际使用WordPress的REST API的讨论,但不幸的是,有几个关键的概念我们需要先过一遍,这样它才有意义。下面是构成这个API的关键概念:
- 路由和端点
- 请求
- 回应
- 模式
- 控制器类
路由和端点
路由的技术定义是一个可以通过不同的HTTP方法进行映射的URL。路由和HTTP方法之间的映射被称为 “端点”。你可以访问WordPress的REST API,通过在你的URL后面添加路由”/wp-json/”来查看哪些路由和端点对你的网站是可用的。
如果你不使用漂亮的permalinks,使用”?rest_route=”而不是 “wp-json”。无论怎样,你在这里看到的是一个路由和一个端点的例子。”/wp-json/”和”/?rest_route=/”是路由。它们允许你通过GET HTTP方法访问WordPress REST API。显示给你的WordPress REST API,或者你愿意的话,是一个通过JSON响应提供给我们的端点。推荐阅读:《WordPress REST API的快速入门指南(一)》
请求
WordPress REST API用一个名为WP_REST_Request的类来处理请求。它是WordPress REST API基础设施中的一个主要类。它被用来存储和检索你所做的所有请求的信息。
你可以使用我们讨论过的HTTP方法远程发送请求,或者你可以像通常那样通过PHP在内部发送。
响应
响应是通过WP_REST_Response类来处理的。如前所述,响应是你从一个请求中收到的数据。API使用这个类来返回从端点发送的数据。它也可以返回错误。
模式
模式是WordPress REST API里面的一个概念,有多种用途。API模式定义了端点可以使用的数据结构,它包含WordPress REST API可以返回的属性列表。它还包含API可以接受的参数,并通过验证API收到的请求为其提供安全性。
控制器类
WordPress REST API注册路由和端点,处理请求,利用Schema来定义它可以使用的数据和属性,并在所有这些工具之上生成API响应。API,以及作为开发者的你,需要一种方法来管理所有这些活动部件。这就是控制器类的作用。它们允许你收集所有这些元素并把它们组织在一个地方。
使用WordPress REST API,通过端点访问你的内容
路由是你用来访问一个端点的URL,而端点是你从服务器收到的响应。如果你想通过WordPress REST API获得你网站的帖子,使用路由”/wp/v2/posts/”。WordPress解释说,”/wp-json/”不包括在这些较长的路由中,因为它是 “API本身的基本路径”。最后的URL是 “example.com/wp-json/wp/v2/posts”。推荐阅读:《HTTP API介绍》
如果你想通过API访问一个特定的帖子,只需将帖子的ID添加到URL的末尾,这样它看起来就像这样。”example.com/wp-json/wp/v2/posts/123″
如果你想搜索使用特定短语或关键词的帖子,请使用这个途径。”/wp/v2/posts?=search[在此插入关键词]”,所以URL看起来像这样。”example.com/wp-json/wp/v2/posts?search[在此插入关键词]。
如果你想通过API访问一个特定用户的资料,在路由中加入”/users/”以及该用户的用户ID。这个URL看起来像这样。”example.com/wp-json/wp/v2/users/2″。同样,如果你想访问一个网站的用户,去掉ID,那么URL看起来像这样。”example.com/wp-json/wp/v2/users/”。
你可以在这里查看更多的端点。
扩展REST API
我们将跳过几个步骤,学习如何使用REST API的属性来扩展它。在这样做之前,你应该了解全局参数、分页、链接和嵌入以及认证等内容,但为了本快速入门指南的目的,我们将跳过这些内容。
下面是你可以通过扩展REST API完成的几件事:
- 添加自定义端点
- 为自定义帖子类型和自定义分类法创建路由
- 修改响应
如果你是一个有经验的开发者,你可能已经熟悉了向REST API添加自定义端点的概念。这只是一个学习如何连接两者的问题。
你将从创建一个函数开始,这个函数可以是简单的,也可以是复杂的,取决于你试图添加到REST API的功能的复杂程度。这里是WordPress在他们的手册中提供的简单函数,这个函数旨在按作者抓取你的网站的最新文章的标题。
<?php
/**
* Grab latest post title by an author!
*
* @param array $data Options for the function.
* @return string|null Post title for the latest, * or null if none.
*/
function my_awesome_func( $data ) {
$posts = get_posts( array(
‘author’ => $data[‘id’],
) );if ( empty( $posts ) ) {
return null;
}return $posts[0]->post_title;
}
之后,你需要注册一个路由,通过使用另一个叫做register_rest_route的函数来使这个函数对API可用。这里是WordPress用来为前面的函数注册路由的函数。
<?php
add_action( ‘rest_api_init’, function () {
register_rest_route( ‘myplugin/v1’, ‘/author/(?P<id>\d+)’, array(
‘methods’ => ‘GET’,
‘callback’ => ‘my_awesome_func’,
) );
} );
这里有几件事情发生。首先,有三个属性通过这个函数。它们是命名空间(“myplugin/v1”),我们需要注册的路由(“my_awesome_func”)和我们想要使用的选项(“author/(?P\d+”)。register_rest_route函数也在一个名为 “rest_api_init “的回调函数上被调用。这减少了在不使用API时进行的不必要的工作。
正如WordPress所解释的,这个路由被设计为匹配任何带有”/author/{id}”的东西,其中”{id}”是一个整数。这是你要访问的URL,以使用这个路由 – http://example.com/wp-json/myplugin/v1/author/(?P\d+)。这个特定的路由使用一个端点,但路由能够有多个端点。你可以看到我们还定义了这个端点将使用的HTTP方法。
你需要的其他概念
如果你想扩展REST API,你还需要学习一些其他的概念,前提是你还不熟悉这些概念。我们在上面的函数中使用了一个命名空间,这就是为什么上面的URL的第一部分是 “myplugin/v1″的原因。它们被用作前缀,以防止与自定义路由发生冲突。
参数是另一个你应该熟悉的概念,因为它们允许你在注册路由时通过注册它们来运行净化和验证。你还应该熟悉返回值,因为这是你用来定义你从服务器收到的。你甚至可以用它们来返回错误,例如,如果一个作者没有发表任何文章,就会显示404错误。
回调是你应该知道的另一个概念,例如被称为权限回调的函数,在函数试图调用实际回调之前,检查用户是否能够执行一个动作。最后,熟悉内部类和控制器模式将有助于你管理你创建的终端的各个方面。
最后的想法和今后的方向
理解WordPress REST API的关键概念并学习如何使用和扩展它可能会让人不知所措,但WordPress的制作者相当有信心,它将成为CMS所需要的力量,远远超过它作为一个建立简单网站和博客的平台的能力。
如前所述,学习JavaScript应该是现在的首要任务,因为这是WordPress的制作者希望开发者在WordPress项目中更多地采用的语言。
你还应该浏览一下WordPress REST API手册,以更好地了解WordPress对REST API的看法。使用REST API部分包含了关于如何使用全局参数、分页、嵌入和链接以及认证的指南,这些都是这个API的关键概念。
一旦你对所有这些有了相当好的了解,你就可以通过扩展REST API部分来学习如何深入地扩展API。你会学到更多关于添加自定义端点的知识,还将学习如何使用自定义内容类型和修改响应。推荐相关阅读:《API的常见问题有哪些》