# REST API

# Troubleshooting

  • JSON Formatter: CTRL/CMD+Click a triangle to collapse/expand nodes at the same level.
  • YARC: When testing with Basic Authentication, make sure you are logged out of WordPress first.

# Getting Started

WP API (opens new window) supports all HTTP Methods: GET, POST, PUT, PATCH, DELETE, OPTIONS. WP API respects permissions but the developer must setup authentication (opens new window) separately.

# Schema

WP API is self-documenting. Send an OPTIONS request to any endpoint and get back

JSON Schema (opens new window) compatible info on how to use it:

Options in YARC

Options in YARC

To get the entire API schema in a single query, add context=help at the index. (Ie. http://site/book/wp-json?context=help )

# Multisite

Pressbooks has different API endpoints for book and the root site:

Book vs. Root

# Features

WP API items have a _links node based on HAL (opens new window) (Hypertext Application Language):

_links

To reduce the number of HTTP requests use the _embed parameter (opens new window) to tell the API that the response should include embeddable resources.

_embedded]

WP API exposes pagination info in the response header.

Pagination]

# PHP to JSON

WP API renders JSON in a generic way that does not match the DB columns. Keep calm and RTFM (opens new window):

if ( ! empty( $schema['properties']['author'] ) ) {
    $data['author'] = (int) $post->post_author;
}
if ( ! empty( $schema['properties']['slug'] ) ) {
    $data['slug'] = $post->post_name;
}
if ( ! empty( $schema['properties']['content'] ) ) {
    $data['content'] = array(
        'rendered'  => post_password_required( $post ) ? '' : apply_filters( 'the_content', $post->post_content ),
        'protected' => (bool) $post->post_password,
    );
}
{
  "author": 1,
  "slug": "chapter-1",
  "content": {
    "rendered": "<p>This is the first chapter in the main body of the text. You can change the text, rename the chapter, add new chapters, and add new parts.</p>",
    "protected": false
  }
}