Word camp paris 2016

Preview:

Citation preview

WP API : LA REVIEW TECHNIQUEWORDCAMP PARIS 2016

QUI SUIS-JE ?Développeur PHP et JavaScriptDéveloppeur avec WordPress depuis 6 ansDirecteur technique à @be_api

RESTUn ensemble de bonne pratiques pour la construction d'une

API

Chaque contenu est défini comme une ressourceUtilisation des verbes HTTPDes "routes" claires et formatées

RÉCUPÉRER LES DERNIERSARTICLES

GET monsite.fr/wp­json/wp/v2/posts

RÉCUPÉRER LE CONTENU D'UNARTICLE

GET monsite.fr/wp­json/wp/v2/posts/15/

METTRE À JOUR UN CONTENUPOST|PUT|PATCH monsite.fr/wp­json/wp/v2/posts/15/

4.4 -> 4.5

LA WP APILe projet

ou pas...

3 CLASSES 4.4WP_REST_ServerWP_REST_RequestWP_REST_Response

WP_REST_REQUESTRequête du clientContient toutes les constantes magiquesSanitize les donnéesValide les paramètres

WP_REST_SERVERContient les verbes autorisésRécupère une WP_REST_Requestdispatch sur les controllersAttend une WP_REST_ResponseSert la WP_REST_Response

WP_REST_RESPONSEEtend WP_HTTP_ResponseContient les données retournées par les controllersAjoute les "links" d'une ressource

collectiondescription du type de contenutaxonomiesmeta...

source : https://hmn.md/uploads/2016/01/Talking-to-25-of-the-Web.pdf

CLASSES 4.5Base : WP_REST_Controller12 Classes pour les controlleurs des contenus

WP_REST_CONTROLLERClasse abstraite1 méthode à redéfinir : register_routes12 méthodes implémentables

get_itemsget_itemcreate_itemupdate_itemdelete_item....

RÉCUPÉRER UN CONTENU :GET_ITEM

MAIS D'ABORD :GET_ITEM_PERMISSIONS_CHECK

MAIS D'ABORD :CHECK_READ_PERMISSIONS

MÊME PRINCIPE POURcreateupdatedelete

QUELQUES MÉTHODESIMPORTANTES

get_item_schemaprepare_item_for_responseprepare_links

GET_ITEM_SCHEMABasé 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_RESPONSERé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_LINKSHypermedia (HAL)

Liaison forte entre les contenus

API auto découvrable

author, collection, enclosure, related, replies, up

?_embed

WP_REST_POSTS_CONTROLLER

ETENDABLE ET COMPATIBLE TOUTTYPE DE CONTENU ET TAXONOMIE

TYPE DE CONTENU

show_in_rest : boolrest_base : stringrest_controller_class : WP_REST_Posts_Controller

TAXONOMIE

show_in_rest : boolrest_base : stringrest_controller_class : WP_REST_Terms_Controller

INITIALISATION DES ROUTEScreate_initial_rest_routes

Types de contenusTaxonomiesChamps personnalisésRévisions

Collection des type de contenusCollection des taxonomiesCollection des statusUtilisateursCommentaires...

EXEMPLE PHP

ADAPTATION : BEA POST VIEWCOUNTER

Compteur de vues par jour, mois, semaine, année

admin-ajax.php vs Rest API

ROUTESNamespace 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_CONTROLLER

register_routesget_itemcreate_itemcreate_item_permissions_checkprepare_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 OFFICEModifier le titre et l'image depuis le front office

PHP

56 lignes, 1 classe

JAVASCRIPT

111 lignes bien indentéeswp-api.js + jQuery + Backbone + Underscore

RÉCUPÉRER LES DONNÉESmonsite.fr/wp­json/wp/v2/posts/{post_id}/

CLICK

FOCUSOUT

CONCLUSIONEtendableAuthentificationsWP CLIPossibilités infinies

E-CommerceMultilinguePosts to postsAdvanced custom fieldsObjet connectéDashboard dynamique

DES QUESTIONS ?