wp-rest-api

WP Rest API 入门详解

wp-rest-api

一、关于WP REST API

wordpress已经不仅仅是一个博客网站程序,而是一个强大的CMS系统。开源、完善的社区、丰富的接口等等优势正将wordpress推向更高更广泛的领域。

WP REST API 是wordpress的一个插件,为wordpress提供对外标准的RESTFul接口,随着RESTFul的畅行和各种前端框架的出现,WP REST API可以让wordpress不仅仅存在WEB端,可以让wordpress不仅仅履行一个博客功能,而是可以让wordpress程序作为后台终端(BackEnd),然后以各种应用的形式实现在各种各样的设备中。

这里引用WP REST API V2 官网(http://v2.wp-api.org/)的一段介绍:

This plugin provides an easy to use REST API, available via HTTP. Grab your site’s data in simple JSON format, including users, posts, taxonomies and more. Retrieving or updating data is as simple as sending a HTTP request.

WP REST API 最新的是第二个版本(V2),而在wordpress的最新版本4.4中,也已经内置了WP REST API的部分功能和实现,在不久的将来,也许是wordpress 4.5 或 4.6版本中,将会把WP REST API 完全植入。

非常激动,拭目以待。

 

二、WP Rest API 安装与使用

既然现在的WP REST API是以一个插件形式存在,那么安装就显得非常简单了。

直接在wordpress 插件中搜索”WordPress REST API” ,选择安装“WordPress REST API (Version 2) ” ,安装完成后激活。另外,在wordpress后台“设置”》“固定链接”中设置固定连接为“文章名”。

OK。你的wordpress站点此时就已经有一个可以直接使用的API接口了。WP REST API 默认提供了一套常用的接口,包括文章,页面,文章版本,用户,媒体,文章类型,评论,分类,标签等。

比如,如果想要获取wordpress中最新的文章,你可以直接在浏览器中输入:

http://www.website.com/wp-json/wp/v2/posts

这时会返回website站点最新的十篇文章。

如果想获取指定的文章(按文章ID),可以输入:

http://www.website.com/wp-json/wp/v2/posts/1

这时可以得到ID为1的文章的详细数据。

更多的API接口的使用,我们放在本文第三部分讲。

网址后面的wp-json/wp/v2一串是是WP REST API自定义的命名空间(namespace)和路由。在目前阶段,我们先不用去管命令空间和路由是什么,先学会操作WP REST API内置给我们使用的这些API接口。这些API接口的参考可以在WP REST API Reference 找到。

注:本文介绍的是WP REST API V2 版本,wordpress 4.4以上版本

 

三、工具

在介绍WP REST API 接口前,我们先介绍一个非常有用的工具— Postman

postman

Postman是一款功能强大的网页调试与发送网页HTTP请求的工具。Postman在chrome中以插件和应用两种形式同时存在,都是免费下载使用。QQ浏览器中也有Postman插件。只要下载安装插件即可。在进行RESTFull接口相关的开发测试中,Postman可以为你提供极大的方便,强烈推荐使用。

 

四、常用WP REST API 接口使用介绍(获取数据)

此段介绍WP REST API 常用的获取数据(GET)的接口,提交数据因涉及到较为复杂的认证,此篇文章限于篇幅,后面看情况,再计划出一篇专门的WP REST API认证的文章单独介绍。

1、文章

(1)获取最新文章(默认获取到最新的10篇文章)

http://www.website.com/wp-json/wp/v2/posts

http://www.website.com/wp-json/wp/v2/posts?page=1

效果相同,page用于指定页数,WP REST API 默认返回10条数据,用page指定数据获取的游标。如

http://www.website.com/wp-json/wp/v2/posts?page=2

可取回最新的第11条数据到第20条数据,以此类推。

(2)设置获取的每页文章数量及分页

http://www.website.com/wp-json/wp/v2/posts?filter[posts_per_page]=5

filter[posts_per_page]=5 用于指定返回文章每页的数量,这里指定每页数量为5篇。

filter[posts_per_page]与page联合使用:

http://www.website.com/wp-json/wp/v2/posts?filter[posts_per_page]=5&page=2

(3)获取指定分类的文章

http://www.website.com/wp-json/wp/v2/posts?filter[cat]=2

filter[cat]=2 指定分类ID为2 ,返回分类ID为2的文章。

分类ID是每个分类目录在创建时自动生成的ID,在wordpress后台“文章”==》“分类目录”中,把鼠标放在分类名称上面,页面下方会出现一个网址,网址中的参数tag_ID=2就是这个分类名称的分类ID。如果没有出现网址,可以点击分类名称下的“编辑”,然后查看网页地址栏,同样可以得到tag_ID=2。下面的标签ID的获得方法也一样。

(4)获取指定标签的文章

http://www.website.com/wp-json/wp/v2/posts?filter[tag]=library

filter[tag]=library 指定标签名为“library”的文章

(5)获取指定分类和有指定标签的文章

http://www.website.com/wp-json/wp/v2/posts?filter[cat]=2&filter[tag]=library

上面两个结合一起,可以得到更具体精确的文章。

(6)获取指定日期的文章

http://www.website.com/wp-json/wp/v2/posts?filter[year]=2016&filter[monthnum]=03

filter[year]=2016&filter[monthnum]=03 设置指定的日期

(7)获取指定作者的文章

http://www.website.com/wp-json/wp/v2/posts?filter[author_name]=jinyun

filter[author_name]=jinyun设置指定作者名字

(8)按关键词搜索文章

http://www.website.com/wp-json/wp/v2/posts?filter[s]=金云

filter[s]=金云 :按给定的关键词搜索文章,返回包含“金云”关键词的文章。

(9)获取随机文章

http://www.website.com/wp-json/wp/v2/posts?filter[orderby]=rand

其中orderby还可以为指定的字段排序

(10)获取相关文章

在网站中,在做SEO优化和页面内容布局时,获取相关文章是比较常见的,可以通过以上几个条件组合来达到获取相关文章的效果。

按标签获取相关文章:

http://www.website.com/wp-json/wp/v2/posts?filter[orderby]=rand&filter[tag]=library&filter[posts_per_page]=6

按分类获取相关文章:

http://www.website.com/wp-json/wp/v2/posts?filter[orderby]=rand&filter[cat]=2&filter[posts_per_page]=6

(11)获取指定文章的数据

http://www.website.com/wp-json/wp/v2/posts/189

得到ID为189的文章数据

 

2、分类和标签

(1)获取所有的分类

http://www.website.com/wp-json/wp/v2/categories

(2)获取指定分类ID的分类信息

http://www.website.com/wp-json/wp/v2/categories/2

(3)获取所有的标签

http://www.website.com/wp-json/wp/v2/tags

(4)获取指定标签ID的标签信息

http://www.website.com/wp-json/wp/v2/tags/3

 

3、媒体文件

(1)获取所有的媒体信息

http://www.website.com/wp-json/wp/v2/media

(2)获取指定媒体ID的媒体信息

http://www.website.com/wp-json/wp/v2/media/17

 

4、页面

(1)获取所有的页面信息

http://www.website.com/wp-json/wp/v2/pages

(2)获取指定页面ID的页面信息

http://www.website.com/wp-json/wp/v2/pages/289

 

5、类型

(1)获取当前wordpress所有的内容类型

http://www.website.com/wp-json/wp/v2/types

一般情况下会返回post,page和attachment三种类型

(2)获取指定类型

http://www.website.com/wp-json/wp/v2/types/post

 

6、评论

(1)获取所有评论信息

http://www.website.com/wp-json/wp/v2/comments

(2)获取指定评论ID的单条评论信息

http://www.website.com/wp-json/wp/v2/comments/2

 

7、用户

(1)获取所有的用户信息

http://www.website.com/wp-json/wp/v2/users

(2)获取指定用户ID的用户信息

http://www.website.com/wp-json/wp/v2/users/1

 

以上即是WP REST API 内置API接口最为常用的接口数据获取方法。

 

五、文章数据分析

我们在第三部分讲了如何通过各种接口和参数去获取我们想要的东西,而对于获得到的东西,我们还不是十分了解,因此,有必要讲讲我们所获取的JSON数据到底是什么鬼。当然,作为我们只讲其中一种类型的数据即可,其他都是一样的看,无庸置疑,我们当然是讲最为常用的Post。

我们在使用

http://www.website.com/wp-json/wp/v2/posts

获取数据时,可以看到返回结果是一个数组。这种API我叫它为“集合型”API,类似的有,users,comments,categories,tags,types,media,pages等。

而当我们加上具体的ID后,如

http://www.fymedia.tk/wp-json/wp/v2/posts/189

返回的是一个JSON对象,里面就是这篇文章的所有信息。类似地,users,comments,categories,tags,types,media,pages等也同样。“集合型”API返回的是这些单个JSON对象的集合。认清这一点,对我们使用第三方框架进行WP REST API 扩展开发非常重要。

下面,我们就来看一下一篇文章的JSON数据,上面的请求返回结果如下:

post

如上图所示,我们可以得到一篇文章的所有信息,包括ID,标题,摘要,内容,别名,网址,类型,状态等等。

我们仔细看一下这个JSON内容后会发现,文章的特色图像是以特色图像的ID给出的,分类,标签也同样是以ID形式给出,如果我们想要得到这篇文章的特色图像和分类、标签这些信息,我们还要另外按前面介绍的接口去把这些信息找出来,很明显,这不但加大了工作量和整合难度,也增加了连接数,在实际开发中,会带来一定的性能问题,这是第一个问题。第二个问题,这么多的信息,我们不禁想问:“有必要吗?”,最经常的情况,在展示给用户浏览时,我们其实只需要ID(作为唯一识别,传值)、标题、摘要、内容、分类、标签、图片、作者、链接地址就够了。这么多的数据,如果不做优化,在传输时也带来数据加载的延迟。

因此,总结一下,WP REST API虽然给我们提供了这一套标准的接口,但也只能作为标准参考而已,在实际使用中,还需要根据实际情况做个性化定制。

个性化定制通常包括:自定义字段、修改返回结果及增加自定义路由等。本篇是入门篇,暂不涉及,将会在后面别文介绍。

 

 

六、资源

1、官方文档:http://v2.wp-api.org/

2、WP REST API 插件:https://wordpress.org/plugins/rest-api/

3、WP REST API Github : https://github.com/WP-API/WP-API

4、参考文章:

Introducing the WP REST API

The REST API (and How It Could Change WordPress Forever)

WP API – Using the WordPress REST API

A QUICK START GUIDE FOR USING THE WP REST API

 

那时那我

jinyunblogadmin

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据