À la découverte de l'API REST WP

WP Tech 2015 Nantes

@maximebj

Développeur / formateur / blogueur / entrepreneur

wp-spread.com : blog WP, tutos, actus

dysign.fr : Site perso / blog entreprenarial

Qu'est-ce qu'une API REST ?

Une Requête HTTP (GET, PUT, DELETE)

Une authentification (API KEY)

Utilisable via une commande système CURL

en tapant l'URL directement dans le navigateur

Via une requête Ajax...

Une réponse JSON

L'histoire de la

WP API

  • 2013 : Projet lancé lors du GSOC par Ryan McCue, core dev WP (chez HumanMade depuis 2014 - Happytables)
  • Mai 2014 : Version 1.0 beta release
  • Mars 2015 : V1.2 beta avec beaucoup de nouveautés
  • 29 Avril 2015 : V2.0 Beta : changement de routes
  • 21 septembre 2015 : Merge proposal
  • 28 octobre 2015 : Merge dans le Core WP
  • 8 décembre 2015 : Sortie de WP 4.4 avec l'API phase 1
  • Première moitié 2016 : API Rest phase 2 (API exposée vers l'extérieur)

 

L'api était initialement prévue pour WP 4.1, puis 4.3 en aout 2015...

Source : https://make.wordpress.org/core/tag/json-api/

Brian Krogsgard - Poststatus.com

"The WordPress REST API project is the most exciting project for the platform since custom post types were introduced"

"The integration of the JSON REST API will mark the final transformation of WordPress from its humble roots as a blogging solution into a fully-featured application platform"

WooCommerce

a déjà une API REST !

#woobogoss

#jmelapete

#bandedenoobs

Et le XML-RPC ?

JSON préféré aujourd'hui, plus simple à parser

 

XML-RPC pas aussi développé en terme de fonctions que l'API REST

 

Quelques personnes frileuses à propos de la sécurité (attaques brute force 2014)

Comment l'API REST va changer WordPress

Quelques idées...

Thèmes basés JS

Ils pourront se passer du moteur de template, être complètement gérés en Js (React JS).

 

Un thème expérimental proposé par Automattic : 

https://github.com/Automattic/Picard

 

(nécessite NPM, Gulp installés dans votre terminal)

Un tuto sympa : http://themeshaper.com/2015/11/27/challenges-javascript-theming/

Single page apps

Utiliser WordPress comme base de publication pour une application moderne, fluide

Calypso

wordpress.com a entièrement revu son écran d'admin en utilisant l'API Rest + Node.js

Plus d'infos : https://developer.wordpress.com/calypso/

App natives

Construction d'app natives ios & android qui récupèrent le contenu d'un site WP via l'API REST

Backend CMS mobile

Proposer WordPress comme CMS pour apps natives mobiles

ContenFul s'est positionné sur ce secteur mais avec un CMS maison

Custom Panels

Proposer des interfaces adaptées aux besoins spécifiques des clients/utilisateurs (Ex : Pickle et HappyTables)

Publication sur autres apps

Utiliser WP comme moteur de contenu et y afficher sur un site fait avec une autre plateforme (Ruby On Rails, Django...)

Un éditeur de contenu front

Un builder afin de pouvoir enfin éditer en front des mises en pages poussées 

L'explosion de JS

Dev PHP/SQL

Dev JS

Javascript a connu une explosion depuis jQuery.

Aujourd'hui : Node.js, Angular, Backbone, Ember, React ...

donnent l'impression que : 

L'API REST WP

Comment ça marche ?

Installation

  • Installer le plugin : https://wordpress.org/plugins/json-rest-api/
  • Rafraichir les permaliens
  • Installer l'extention Pretty Json pour Chrome ou Firefox

 

 

Envoyer une requete

Filtres : voir WP Query  dans le Codex

https://codex.wordpress.org/Class_Reference/WP_Query

Résultat

Une petite démo !

Sécurité et authentification

Authentification Nonce

Pour les développeurs de thèmes et plugins

functions.php

script.js

Authentification Oauth

Pour les accès depuis l'extérieur de WP

Nécessite Oauth sur le serveur ainsi que le plugin Oauth sur le site

 

(le plugin Oauth sera intégré dans la version finale de l'API Rest)

Hooks/Filters utiles

Allons un peu plus loin

Débloquer certains filtres

Certains filtres sont bloqués par défaut mais on peut les autoriser

Parmi eux : les meta_queries, les data_queries...

functions.php

Envoyer les custom fields

Par défaut l'API n'envoie pas le contenu des custom fields

Possible d'envoyer n'importe quelle donnée supplémentaire

functions.php

Prise en charge des CPT

Il faut déclarer votre CPT à l'API pour qu'elle ajoute les routes

functions.php

Ajouter vos routes

afin de créer des requêtes spéciales, rattachées à votre thème ou votre plugin

functions.php

Namespaces

afin d'éviter tout conflit, vous pouvez créer votre propre namespace, qui se traduira par un changement dans l'URL

 

Au lieu de /wp/v2 vous pouvez définir myplugin/v1

Problème asynchrone

C'est un problème de WordPress à la base, pas de l'API

imaginons une app à la 9gag sur laquelle on scroll indéfiniment

Solution !

Faire la première requête simplement

 

Récupérer la date de publication de l'article le plus récent

les prochaines requêtes demandent les articles "avant" cette date

 

Cela aura pour effet de ne pas prendre en compte les articles crées après cette date.

RDV dans la Coding Room

On code un projet ensemble ?

Ressources utiles

- Documentation : http://v2.wp-api.org/

- Repo Git Hub : https://github.com/WP-API/WP-API

- Discussion Core :  https://make.wordpress.org/core/tag/json-api/

- Plugin Homepage :  https://wordpress.org/plugins/json-rest-api/

- Articles : 

      https://poststatus.com/wordpress-json-rest-api/

      https://premium.wpmudev.org/blog/wordpress-rest-api/

      http://torquemag.io/on-the-wordpress-rest-api-reflecting-on-the-past-and-looking-to-the-future/

- Tutos :

      http://themeshaper.com/2015/11/27/challenges-javascript-theming/

      http://wp-spread.com 

- Conférences :

      http://jacklenox.com/2015/03/30/building-themes-with-the-wp-rest-api-wordcamp-london-march-2015/

Merci !

Des questions ?

Twitter @maximebj

Blog : wp-spread.com

Site perso : dysign.fr

Made with Slides.com