Slide 1

Slide 1 text

Meet the WordPress
 JSON REST API Rachel Baker @rachelbaker

Slide 2

Slide 2 text

What is the JSON REST API?

Slide 3

Slide 3 text

Three Parts:
 “JSON REST API”

Slide 4

Slide 4 text

JSON { "ID": 4, "title": "My Awesome Post", "content": "This is my awesome content!" } JavaScript Object Notation • Supported by basically everything • Human readable • Standard

Slide 5

Slide 5 text

REST Actions applied to Resources Create POST Read GET Update PUT Delete DELETE Uses HTTP actions: Representational State Transfer

Slide 6

Slide 6 text

REST Representational State Transfer /posts /posts/4 /posts /posts/4 /posts/4 GET GET POST PUT DELETE Action
 (Verb) Resource
 (Object)

Slide 7

Slide 7 text

API Application Programming Interface A way to access and manipulate your data

Slide 8

Slide 8 text

API Or extend as needed! GET POST PUT DELETE Posts ✔ ✔ ✔ ✔ Pages ✔ ✔ ✔ ✔ Custom Post Types ✔ ✔ ✔ ✔ Post Meta ✔ ✔ ✔ ✔ Media ✔ ✔ ✔ ✔ Comments ✔ ✔ Taxonomies/Terms ✔ ✔ ✔ ✔ Users ✔ ✔ ✔ ✔

Slide 9

Slide 9 text

Why do we need it?

Slide 10

Slide 10 text

WordPress XML-RPC API Turned on by default since WordPress 3.5 Flexible and extendible Works well with documents and media
 Insecure authentication Not suited to exchanging data Large amount of code required to parse XML Cannot control access to certain apps

Slide 11

Slide 11 text

Jetpack API Easy for developers Works with Javascript easily (JSON-based)
 Requires Jetpack active Depends on WordPress.com Does not work for local development Cannot control access to certain apps

Slide 12

Slide 12 text

How do we use it?

Slide 13

Slide 13 text

{ "name": "WP API Dev", "description": "Just another WordPress site", "URL": "http://local.wpapi.dev", "routes": {}, "authentication": [], "meta": {} } /wp-json/ GET

Slide 14

Slide 14 text

[{ "ID": 110, "title": "Testing sticky", "status": "publish", "type": "post", "author": {}, "content": "

this should be stuck as a post. Stuck on you.

\n", "link": "http://local.wpapi.dev/testing-sticky/", "date": "2014-06-02T10:47:39-05:00", "modified": "2014-06-02T10:47:39-05:00", "format": "standard", "slug": "testing-sticky-2", "guid": "http://local.wpapi.dev/testing-sticky-2/", "excerpt": "

this should be stuck as a post. Stuck on you.

\n”, "comment_status": "open", "sticky": true, "meta": {}, "featured_image": null, "terms": {} }] /wp-json/posts GET

Slide 15

Slide 15 text

[{ "name": "Categories", "slug": "category", "labels": {}, "types": {}, "show_cloud": true, "hierarchical": true, "meta": {} },{ "name": "Tags", "slug": "post_tag", "labels": {}, "types": {}, "show_cloud": true, "hierarchical": false, "meta": {} },] /wp-json/taxonomies GET

Slide 16

Slide 16 text

[{ "ID": 121, "title": "puppies", "type": "attachment", "author": {}, "content": "

\"puppies\" a>

\n", "link": "http://local.wpapi.dev/?attachment_id=121", "date": "2014-07-25T17:07:02-05:00", "modified": "2014-07-25T17:07:02-05:00", "slug": "puppies", "guid": "http://local.wpapi.dev/wp-content/uploads/2014/07/puppies.jpeg", "meta": {}, "terms": [], "attachment_meta": { "width": 1600, "height": 1200, "file": "2014/07/puppies.jpeg", "sizes": {}, "image_meta": {} }] /wp-json/media GET

Slide 17

Slide 17 text

{ "ID": 1, "title": "Hello World!", "status": "publish", "type": "post", "author": {}, "content": "

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

\n", "link": "http://local.wpapi.dev/hello-world/", "date": "2014-04-18T15:14:46-05:00", "modified": "2014-05-02T01:26:30-05:00", "format": "standard", "slug": "hello-world", "guid": "http://local.wpapi.dev/?p=1", "excerpt": "

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

\n", "comment_status": "open", "meta": {}, "featured_image": null, "terms": {} } /wp-json/posts/1 GET

Slide 18

Slide 18 text

[{ "ID": 1, "post": 1, "content": "

Hi, this is a comment.
\nTo delete a comment, just log in and view the post's comments. There you will have the option to edit or delete them.

\n", "status": "approved", "type": "comment", "author": { "ID": 0, "name": "Mr WordPress", "URL": "https://wordpress.org/", "avatar": "http://0.gravatar.com/avatar/ ad516503a11cd5ca435acc9bb6523536?s=96" }, "date": "2014-04-18T15:14:46-05:00", "meta": { "links": { "up": "http://local.wpapi.dev/wp-json/posts/1", "self": "http://local.wpapi.dev/wp-json/posts/1/comments/1" }}}] /wp-json/posts/1/comments GET

Slide 19

Slide 19 text

[{ "code": "json_user_cannot_list", "message": "Sorry, you are not allowed to list users." }] /wp-json/users GET GET /wp-json/posts/1/meta [{ "code": "json_cannot_edit", "message": "Sorry, you cannot edit this post” }]

Slide 21

Slide 21 text

Response {! ! "ID":6,! ! "title":"Put Your Content to REST with WP API",! ! "status":"publish",! ! "type":"post",! ! "author":{! ! ! "ID":1,! ! ! "username":"admin",! ! ! "name":"admin",! ! ! "first_name":"",! ! ! "last_name":"",! ! ! "nickname":"admin",! ! ! "slug":"admin",! ! ! "URL":"",! ! ! "avatar":"http:\/\/1.gravatar.com\/avatar\/7c4ff521986b4ff8d29440beec01972d?s=96",! ! ! "description":"",! ! ! "email":"demo@example.com",! ! ! "registered":"2014-06-05T14:39:17+00:00",! ! ! "meta":{! ! ! ! "links":{! ! ! ! ! "self":"http:\/\/wcchi.dev\/wp-json\/users\/1",! ! ! ! ! "archives":"http:\/\/wcchi.dev\/wp-json\/users\/1\/posts"! ! ! ! }! ! ! }! ! },! ! "content":"

The JSON REST API (WP API)< \/a> is coming to WordPress Core in WordPress 4.1. Come to learn more what the JSON REST API is, why this upcoming feature is a game changer<\/strong> for WordPress as an application platform<\/em>, and leave with some examples of how you can be using or extending it today.<\/ p>\n

We will walk through examples of how to make HTTP requests to view resources through the API, and authenticating<\/a> to perform more sensitive actions such as creating, editing, and deleting resources.<\/p>\n",! ! "parent":0,! ! "link":"http:\/\/wcchi.dev\/put-your-content-to-rest-with-wp-api\/",! ! "date":"2014-06-13T11:39:55+05:00",! ! "modified":"2014-06-13T11:39:55+05:00",! ! "format":"standard",! ! "slug":"put-your-content-to-rest-with-wp-api",! ! "guid":"http:\/\/wcchi.dev\/put-your-content-to-rest-with-wp-api\/",! ! "excerpt":"

The JSON REST API (WP API) is coming to WordPress Core in WordPress 4.1. Come to learn more what the JSON REST API is,! ! why this upcoming feature is a game changer for WordPress as an application platform,! ! and leave with some examples of how you can be using or extending it today. We will […]<\/p>\n",! ! "menu_order":0,! ! "comment_status":"open",! ! "ping_status":"open",! ! "sticky":true,! ! "date_tz":"Etc\/GMT-5",! ! "date_gmt":"2014-06-13T16:39:55+00:00",! ! "modified_tz":"Etc\/GMT-5",! ! "modified_gmt":"2014-06-13T16:39:55+00:00",! ! "password":"",! ! "meta":{! ! ! "links":{! ! ! ! "self":"http:\/\/wcchi.dev\/wp-json\/posts\/6",! ! ! ! "author":"http:\/\/wcchi.dev\/wp-json\/users\/1",! ! ! ! "collection":"http:\/\/wcchi.dev\/wp-json\/posts",! ! ! ! "replies":"http:\/\/wcchi.dev\/wp-json\/posts\/6\/comments",! ! ! ! "version-history":"http:\/\/wcchi.dev\/wp-json\/posts\/6\/revisions"! ! ! }!

Slide 22

Slide 22 text

/wp-json/users/1 PUT Request Request curl -X PUT -H "Content-Type: application/json" -d '! {! ! "name":"Rachel Baker",! ! "first_name":"Rachel",! ! "last_name": “Baker",! ! "nickname": “rachelbaker",! ! "email": “rachel\u0040rachelbaker.me"! }! ' -u admin:password http://wcchi.dev/wp-json/users/1/!

Slide 23

Slide 23 text

Response {! ! "ID":1,! ! "username":"admin",! ! "name":"Rachel Baker",! ! "first_name":"Rachel",! ! "last_name":"Baker",! ! "nickname":"rachelbaker",! ! "slug":"admin",! ! "URL":"",! ! "avatar":"http:\/\/0.gravatar.com\/avatar\/634b37a53babc18a5bda19722d5b41a3?s=96",! ! "description":"",! ! "registered":"2014-06-05T14:39:17+00:00",! ! "roles":["administrator"],! ! “capabilities":{! ! ! "switch_themes":true,! ! "edit_themes":true,! ! "activate_plugins":true,! ! "edit_plugins":true,! ! "edit_users":true,! ! "edit_files":true,! ! "manage_options":true,! ! "moderate_comments":true,! ! "manage_categories":true,! ! "manage_links":true,! ! "upload_files":true,! ! "import":true,! ! "unfiltered_html":true,! ! "edit_posts":true,! ! "edit_others_posts":true,! ! "edit_published_posts":true,! ! "publish_posts":true,! ! "edit_pages":true,! ! "read":true,! ! "level_10":true,! ! "level_9":true,! ! "level_8":true,! ! "level_7":true,! ! "level_6":true,! ! "level_5":true,! ! "level_4":true,! ! "level_3":true,! ! "level_2":true,! ! "level_1":true,! ! "level_0":true,! ! "edit_others_pages":true,! ! "edit_published_pages":true,! ! "publish_pages":true,! ! "delete_pages":true,! ! "delete_others_pages":true,! ! "delete_published_pages":true,! ! "delete_posts":true,! ! "delete_others_posts":true,! ! "delete_published_posts":true,! ! "delete_private_posts":true,! ! ! "edit_private_posts":true,!

Slide 24

Slide 24 text

Where could we use it?

Slide 25

Slide 25 text

Use Cases: Perform CRUD operations 
 on the client-side Backbone.js themes or plugins ! Receiving and populating content 
 for “infinite scrolling” 
 Form validation and submissions
 
 Front-end content editing


Slide 26

Slide 26 text

Use Cases: Perform CRUD operations 
 on another WordPress site ! Display content from a separate WordPress site ! Display content from another site 
 within a multisite network ! Manage (create, update, delete) content on 
 a separate WordPress site or another site 
 within a multisite network !

Slide 27

Slide 27 text

Use Cases: Break your content free 
 from WordPress ! Display and manage your content in 
 a mobile application ! Integrate your content with other 
 application platforms ! Manage (create, update, delete) content on 
 a separate WordPress site or another site 
 within a multisite network

Slide 28

Slide 28 text

Current Examples: ! New York Times ! Wired ! My Blog ! 10up Bocoup and more! ! Folks already using the JSON REST API

Slide 29

Slide 29 text

Where do I go to get started?

Slide 30

Slide 30 text

wp-api.org

Slide 31

Slide 31 text

Meet the Team

Slide 32

Slide 32 text

Resources: JSON REST API JSON REST API Plugin https://github.com/WP-API/WP-API or https://wordpress.org/plugins/json-rest-api/ ! JSON REST API Auth Plugins and Clients https://github.com/WP-API ! !

Slide 33

Slide 33 text

Have questions? Rachel Baker @rachelbaker wp-api.org github.com/WP-API/WP-API