WP API : LA REVIEW TECHNIQUE
WORDCAMP PARIS 2016
QUI SUIS-JE ?
Développeur PHP et JavaScript
Développeur avec WordPress depuis 6 ans
Directeur technique à @be_api
REST
Un ensemble de bonne pratiques pour la construction d'une
API
Chaque contenu est défini comme une ressource
Utilisation des verbes HTTP
Des "routes" claires et formatées
RÉCUPÉRER LES DERNIERS
ARTICLES
GET monsite.fr/wp­json/wp/v2/posts
RÉCUPÉRER LE CONTENU D'UN
ARTICLE
GET monsite.fr/wp­json/wp/v2/posts/15/
METTRE À JOUR UN CONTENU
POST|PUT|PATCH monsite.fr/wp­json/wp/v2/posts/15/
4.4 -> 4.5
LA WP API
Le projet
ou pas...
3 CLASSES 4.4
WP_REST_Server
WP_REST_Request
WP_REST_Response
WP_REST_REQUEST
Requête du client
Contient toutes les constantes magiques
Sanitize les données
Valide les paramètres
WP_REST_SERVER
Contient les verbes autorisés
Récupère une WP_REST_Request
dispatch sur les controllers
Attend une WP_REST_Response
Sert la WP_REST_Response
WP_REST_RESPONSE
Etend WP_HTTP_Response
Contient les données retournées par les controllers
Ajoute les "links" d'une ressource
collection
description du type de contenu
taxonomies
meta
...
source : https://hmn.md/uploads/2016/01/Talking-to-25-of-the-Web.pdf
CLASSES 4.5
Base : WP_REST_Controller
12 Classes pour les controlleurs des contenus
WP_REST_CONTROLLER
Classe abstraite
1 méthode à redéfinir : register_routes
12 méthodes implémentables
get_items
get_item
create_item
update_item
delete_item
....
RÉCUPÉRER UN CONTENU :
GET_ITEM
MAIS D'ABORD :
GET_ITEM_PERMISSIONS_CHECK
MAIS D'ABORD :
CHECK_READ_PERMISSIONS
MÊME PRINCIPE POUR
create
update
delete
QUELQUES MÉTHODES
IMPORTANTES
get_item_schema
prepare_item_for_response
prepare_links
GET_ITEM_SCHEMA
Basé sur http://json-schema.org/
Décrit l'objet retourné
Propriétés et fonctions
Filtre les valeurs au moment du retour
PREPARE_ITEM_FOR_RESPONSE
Récupère les données avant retour
Filtre en fonction du contexte (view, edit) et du schema
Ajoute les champs additionnels
Ajoute les 'links'
Retourne une WP_REST_Response
PREPARE_LINKS
Hypermedia (HAL)
Liaison forte entre les contenus
API auto découvrable
author, collection, enclosure, related, replies, up
?_embed
WP_REST_POSTS_CONTROLLER
ETENDABLE ET COMPATIBLE TOUT
TYPE DE CONTENU ET TAXONOMIE
TYPE DE CONTENU
show_in_rest : bool
rest_base : string
rest_controller_class : WP_REST_Posts_Controller
TAXONOMIE
show_in_rest : bool
rest_base : string
rest_controller_class : WP_REST_Terms_Controller
INITIALISATION DES ROUTES
create_initial_rest_routes
Types de contenus
Taxonomies
Champs personnalisés
Révisions
Collection des type de contenus
Collection des taxonomies
Collection des status
Utilisateurs
Commentaires
...
EXEMPLE PHP
ADAPTATION : BEA POST VIEW
COUNTER
Compteur de vues par jour, mois, semaine, année
admin-ajax.php vs Rest API
ROUTES
Namespace et version
POST monsite.fr/wp­json/bea­post­view­counter/1.0/{post_id}
GET monsite.fr/wp­json/bea­post­view­counter/1.0/{post_id}
BEA_PVC_COUNTER_REST_CONTRO
LLER
register_routes
get_item
create_item
create_item_permissions_check
prepare_item_for_database
monsite.fr/wp­json/
INTÉGRER DANS MA RÉPONSE POST
FIELD
monsite.fr/wp­json/wp/v2/posts/{post_id}/
EMBED
monsite.fr/wp­json/wp/v2/posts/{post_id}/?_embed  
monsite.fr/wp­json/bea­post­view­counter/1.0/{post_id}/
EXEMPLE JAVASCRIPT
CRÉATION : EDITEUR FRONT OFFICE
Modifier le titre et l'image depuis le front office
PHP
56 lignes, 1 classe
JAVASCRIPT
111 lignes bien indentées
wp-api.js + jQuery + Backbone + Underscore
RÉCUPÉRER LES DONNÉES
monsite.fr/wp­json/wp/v2/posts/{post_id}/
CLICK
FOCUSOUT
CONCLUSION
Etendable
Authentifications
WP CLI
Possibilités infinies
E-Commerce
Multilingue
Posts to posts
Advanced custom fields
Objet connecté
Dashboard dynamique
DES QUESTIONS ?

Wordcamp paris 2016 - La REST API, une review technique