The JSON REST API for WordPress

37
JSON REST API for WordPress @tlovett12 + JSON REST API =

Transcript of The JSON REST API for WordPress

Page 1: The JSON REST API for WordPress

JSON REST API for

WordPress

@tlovett12

+JSON

REST API=

Page 2: The JSON REST API for WordPress

• My name is Taylor Lovett

• Director of Web Engineering at 10up

• Plugin author and contributor

• Core contributor

• WP API team member

Who Am I?

@tlovett12

Page 3: The JSON REST API for WordPress

We are hiring!

Page 4: The JSON REST API for WordPress

So what’s this new WP API

thing all about? Don’t we

already have one?

Page 5: The JSON REST API for WordPress

Right now, we have XML-RPC. It works but

is extremely hard to use and outdated.

Page 6: The JSON REST API for WordPress

Comparison to other WordPress API’s

https://github.com/WP-API/WP-

API/blob/master/docs/comparison.md

Page 7: The JSON REST API for WordPress

• In a nutshell, JSON REST API’s have swept the

web becoming an almost standard. They are

extremely intuitive and provide an easy way to

distribute, collect, and modify data.

Why JSON REST API?

Let’s break it down a bit.

Page 8: The JSON REST API for WordPress

• JSON is an abbreviation for “JavaScript Object Notation”

• It’s simply a way to describe data that is lightweight and

extremely easy to use. Arguably much easier to use than XML.

JSON

Page 9: The JSON REST API for WordPress

• REST (Representational State Transfer) is an architectural style

that dictates how HTTP and URI’s should be used and organized.

• Verbs and resources: GET /post/1

• Hypermedia as the Engine of Application State (HATEOAS) -

Server provides everything you need to know how to use it in a

response.

• Actions are autonomous and do not depend on each other.

• Bottom line: RESTful API’s have become extremely popular

across the web. They are much easier to use than things like RPC

or SOAP.

REST

Page 10: The JSON REST API for WordPress

• An API (Application Programming Interface) is a

set of entry points that allow you to interact with a

platform (WordPress in this case).

And of course, API

Page 11: The JSON REST API for WordPress

Ryan McCue and Contributors

Page 12: The JSON REST API for WordPress

How can I start using it

now?

Page 13: The JSON REST API for WordPress

http://wordpress.org/plugins/json-rest-api/

Core integration (probably) in 4.1

First, install the plugin

Page 14: The JSON REST API for WordPress

What does the API allow

me to do?

/wp-json/Shows all the routes and endpoints available

/wp-json/postsCreate, read, update, and delete posts

/wp-json/usersCreate, read, update, and delete users

/wp-json/mediaCreate, read, update, and delete media items

/wp-json/taxonomiesRead taxonomies and terms

/wp-json/pages/Create, read, update, and delete pages

Page 15: The JSON REST API for WordPress

The API is rich with

functionality. Explore the

documentation!http://wp-api.org/docs-development/

Let’s look at a few key endpoints.

Page 16: The JSON REST API for WordPress

List Posts

[{

"ID": 11297,

"title": "Post 19",

"status": "publish",

"type": "post",

"author": 1,

"content": "",

"parent": null,

"link": "http:\/\/example.com\/2014\/08\/post-19\/",

"format": "standard",

"slug": "post-19",

"guid": "http:\/\/example.com\/2014\/08\/post-19\/",

"excerpt": null,

"menu_order": 0,

"comment_status": "closed",

"ping_status": "open",

"sticky": false,

"meta": {},

"featured_image": null,

"terms": {}

}]

GET /wp-json/posts

Page 17: The JSON REST API for WordPress

List PostsEndpoint: /wp-json/posts

Takes a number of useful parameters:

• Filter[]: Accepts WP_Query arguments

• Page: Allows for pagination

• Context: Determines usage context i.e. “view or edit”

• …

https://github.com/WP-API/WP-API/blob/master/docs/routes/routes.md

Page 18: The JSON REST API for WordPress

Retrieve A Post

{

"ID": 11297,

"title": "Post 19",

"status": "publish",

"type": "post",

"author": 1,

"content": "",

"parent": null,

"link": "http:\/\/example.com\/2014\/08\/post-19\/",

"format": "standard",

"slug": "post-19",

"guid": "http:\/\/example.com\/2014\/08\/post-19\/",

"excerpt": null,

"menu_order": 0,

"comment_status": "closed",

"ping_status": "open",

"sticky": false,

"meta": {},

"featured_image": null,

"terms": {}

}

GET /wp-json/posts/<id>

Page 19: The JSON REST API for WordPress

Edit A PostPUT /wp-json/posts/<id>

curl -X PUT -H “Content-Type: application/json” -d ‘

{

"title": “Updated Title",

“content_raw": “Updated post content"

}

‘ -u admin:password http://example.com/wp-json/posts/<id>

We need to send a PUT request to this endpoint with

our post data. Of course we must authenticate before

doing this.

Page 20: The JSON REST API for WordPress

Three ways to

authenticate

• Cookie Authentication (client side)

• HTTP Basic Authentication

• OAuth 1

Page 21: The JSON REST API for WordPress

HTTP Basic

AuthenticationFirst install the WP Basic Auth Plugin:

https://github.com/WP-API/Basic-Auth

Remember this piece of our cURL request?

-u admin:password

That’s HTTP Basic Authentication! Essentially we are authenticating

by passing an HTTP header like this:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Where that crazy looking string is username:password base64

encoded.

Page 22: The JSON REST API for WordPress

HTTP Basic

Authentication should

only be used for testing!

Page 23: The JSON REST API for WordPress

OAuth 1.0aFirst install the WP OAuth Plugin:

https://github.com/WP-API/OAuth1

OAuth is outside of the scope of this talk. However, it

should be used instead of HTTP Basic Auth when

building external applications that interact with the API.

Rather than giving someone an account on your site,

you can give them temporary access with OAuth.

Page 24: The JSON REST API for WordPress

Create A PostPOST /wp-json/posts/

curl -X POST -H “Content-Type: application/json” -d ‘

{

"title": “Title",

“content_raw": “Post content"

}

‘ -u admin:password http://example.com/wp-json/posts/

Notice we are using a POST request this time.

Page 25: The JSON REST API for WordPress

TaxonomiesGET /wp-json/taxonomies

[

{

"name": "Categories",

"slug": "category",

"labels": {},

"types": { /* Registered post types */ },

"show_cloud": true,

"hierarchical": true,

"meta": {}

},

{

"name": "Tags",

"slug": "post_tag",

"labels": {},

"types": { /* Registered post types */ },

"show_cloud": true,

"hierarchical": false,

"meta": {}

}

}

]

Page 26: The JSON REST API for WordPress

TaxonomyGET /wp-json/taxonomies/<taxonomy>

{

"name": "Categories",

"slug": "category",

"labels": {},

"types": { /* Registered post types */ },

"show_cloud": true,

"hierarchical": true,

"meta": {}

}

Page 27: The JSON REST API for WordPress

Taxonomy TermsGET /wp-json/taxonomies/<taxonomy>/terms

[

{

"ID": 1,

"name": "Books",

"slug": "books",

"description": "",

"parent": null,

"count": 1,

"link": "http:\/\/example.com\/category\/books\/",

"meta": {}

},

{

"ID": 2,

"name": "Products",

"slug": "products",

"description": "",

"parent": null,

"count": 1,

"link": "http:\/\/example.com\/category\/products\/",

"meta": {}

}

]

Page 28: The JSON REST API for WordPress

WP API is very extensible (custom post types!)

http://wp-api.org/guides/extending.html

Build Your Own Routes and

Endpoints

Page 29: The JSON REST API for WordPress

What can I do with the

JSON REST API for

WordPress?

Page 30: The JSON REST API for WordPress

JavaScriptInteract with your (or someone else’s) WordPress install with

JavaScript.

Backbone.js Client:

https://github.com/WP-API/client-js

Node.js Client:

https://github.com/kadamwhite/wordpress-rest-api

Page 31: The JSON REST API for WordPress

• Backbone.js is a JavaScript framework that lets

you structure code in terms of models, views, and

collections. It works great with RESTful JSON

API’s.

Backbone.js

Page 32: The JSON REST API for WordPress

• _s or underscores is a popular starter theme by

Automattic:

https://github.com/automattic/_s

• _s_backbone is an _s fork that powers post

loops using the WP API Backbone client

_s_backbone

Page 33: The JSON REST API for WordPress

https://github.com/tlovett1/_s_backbon

e

Page 34: The JSON REST API for WordPress

• It means _s_backbone is a starter theme with

infinite scroll built-in using the WP API Backbone

client.

• Infinite scroll is the concept of loading multiple

rounds of entities without reloading the page.

What does this mean?

Let’s look at some code!

Page 35: The JSON REST API for WordPress

This is some JavaScript you could add to a theme or

plugin to display your site’s posts. You will first need

to have JSON REST API for WordPress installed and

the “wp-api” JavaScript dependency enqueued.

functions.php:

js/scripts.js:

Page 36: The JSON REST API for WordPress

If you learned nothing

so far, know this:

You can do amazing things with the JSON REST

API for WordPress.

With core integration and ~23% of the web using

this API in the near future, you will have much

easier access to data across the web.

Page 37: The JSON REST API for WordPress

Questions?

@tlovett12