 Tout d'abord bonjour. Dans cette conférence je vais faire un petit peu la revue technique de la API parce qu'on a vu un petit peu la surface et comment ça fonctionne avec Maxim. Là on va un petit peu rentrer dans le cœur et voir comment ça fonctionne. Alors tout d'abord qui suis-je ? On m'a déjà présenté. Nicolas Juant, je suis développeur WordPress avec WordPress depuis 5 à 6 ans. Je suis actuellement CTO à BAP. Vous pouvez aller venir nous voir au stand si vous ne nous avez pas encore vu. Alors je vais commencer par présenter ce que c'est une API REST en général. Il nous a donné un bon exemple Maxim tout à l'heure mais en gros ça permet de donner une route pour créer un API c'est plein de bonnes pratiques. Pour en fait que toutes les APIs se ressemblent et en fait une fois qu'on en connaît une on en connaît plus ou moins toutes. Cette volonté aussi de créer une REST API dans WordPress ça vient du fait que l'XML RPC c'est un fichier d'à peu près 3000 lignes. C'est un petit peu pas maintenable et on va tirer un côté et tout va se casser la gueule. Donc ils veulent ouvrir cette API et puis l'XML c'est plus trop d'actualité, c'est extrêmement compliqué à utiliser et à lire. C'est très verbeux et c'est pas pratique. Alors on va mettre en place cette API là. Il y a aussi une volonté de faire ce qu'on appelle un Headless CMS. C'est un CMS sans tête, pas de fronte et ça permet aux équipes en fait de dire bah ouais moi me refais j'aime bien mais moi mes Technos c'est comme disait Maxine tout à l'heure c'est JS, c'est React, c'est des choses comme ça. Et moi faire du PHP ça me parle pas et puis je pense c'est pas très sexy. Donc l'intérêt c'est de pouvoir dire on fait un front avec ce qu'on veut et on fait le back avec WordPress. Donc on garde cette facilité d'utilisation mais le front on fait un peu ce qu'on veut. Chaque contenu dans cette API est définie comme une ressource. On a une URL unique pour y accéder et pour faire des actions. On va utiliser ce qu'on appelle les verbes HTTP donc get, post, delete, put, patch, etc. Donc il y en a vraiment beaucoup. On va avoir des petites routes claires et formatées et non pas une URL avec un point d'interrogation et plein de paramètres derrière comme on peut avoir sur une nage axe par exemple. Et ça va donner quelque chose comme ça. Donc par exemple pour récupérer les derniers articles je vais appeler en get parce que effectivement je veux récupérer des informations, je ne veux pas en publier, je ne veux pas en supprimer. Je vais appeler en get mon site.fr, webp, json, webp, posts et donc là j'ai la liste des derniers articles. Donc là ça va fonctionner exactement comme orpress le fait c'est-à-dire qu'on va avoir les articles d'ordre antichronologique avec toutes leurs données qui sont comprises dedans. Si je veux récupérer le contenu d'un seul article c'est tout simple c'est la même route sauf que je précise là il y a 15, 20, 30, 35, etc. Et si jamais on ne répond pas correctement si le contenu n'existe pas, si on n'a pas le droit de le lire par exemple si il est protégé par un sparse word, s'il n'est pas publié et bien on se prend un vrai retour HTTP 404, 401, 503, etc. Il y a des vrais retours que chaque développeur et développeuse vont pouvoir mettre en place et avoir une vraie réponse qui est cohérente avec ce qu'on attend. Pareil si je veux mettre un jour au contenu c'est toujours la même URL c'est toujours slash 15 parce que je connais l'ID et puis là je vais pouvoir dire soit put soit post soit patch. Alors les trois fonctionnes on va plutôt priviger le put parce que post c'est créer un contenu, put ça va être le mettre à jour patch c'est un peu la même chose mais tous les indicateurs ne le traite pas. Et donc à partir du moment où on a compris ce principe là, on peut l'ouvrir à tout. J'appelle la même URL en 18, vous avez compris quoi, je veux supprimer le contenu. Après on va jouer avec les droits de WordPress, on va vérifier qu'on a bien de le faire. Donc l'OPAPI, rapidement le projet c'est quoi ? C'est un Google Summer of Code qui s'est transformé en énorme que l'on a voulu mettre en place. Ça a bien commencé puisqu'en 4.4 on a déjà cette structure, cette architecture pour la faire fonctionner. On a déjà les OMBED qui sont présents. Donc si on va dans les nouveaux sites en 4.4 on peut aller dans WPGison v2 et on a les deux OMBED qui sont disponibles. Alors l'OMBED je rappelle c'est je prends une URL dans le site qui est sous WordPress. J'appelle ce site et puis je vais avoir une petite box avec déjà tout écrit, le titre, l'auteur, la date, etc. Mais on retrouve déjà cette chose là. Le futur c'est la 4.5. La 4.5 c'est quoi ? C'est qu'on va intégrer justement toutes ces routes que j'ai présentées avec le put page delete. Elles ne sont pas présentes actuellement, si on essaie d'y aller ça ne fonctionnera pas. Tout ça ils ont dit ça dans un plugin à côté qui sont en train de développer, donc il y a déjà une V1. Mais si on veut justement faire fonctionner son site déjà en 4.4 avec les routes, il suffit d'installer le plugin et ça fonctionne. Je vous dis il y a 4.5 ou pas. On ne sait pas trop. Si on regarde un petit peu ce qui se passe dans les change logs, on a des deprecities, des breaking changes. Enfin voilà on met à jour, on a tout cassé, tout ce qu'on a de développement avant il ne fonctionnait plus. Donc c'est vraiment dommage et ils sont en train aussi un peu de beaucoup remodeler cet API, intégrer des nouvelles classes. Donc c'est vraiment en mouvement, ils se promettent pas mal en question justement avec ce chat qui a eu hier soir, qui a un petit peu tout mélangé et remis en cause pas mal de choses. Voilà, on ne sait pas trop. Peut-être 4.5, peut-être 4.6, 4.7, on ne sait pas vraiment. En tout cas ils font pression pour que ça avance. Dans notre 4.4, il y a trois classes importantes qui ont été intégrées. Il y en a plus mais c'est ces trois-là importantes. Il y a WebRS Server, WebRS Request et WebRS Respond. C'est trois classes là qui vont en fait justement asseoir notre structure et faire en sorte que déjà on puisse traiter les demandes en avant, les traiter et répondre. Par exemple la WebRS Request, elle va contenir ce que le client appelle. Par exemple, elle va contenir aussi les constantes magiques. Post, Get, File, Request. Toutes ces choses là qu'on appelle directement dans le PHP, c'est vu qu'il va se charger, va récupérer ces données là, va les formater, les mettre en place et on va pouvoir l'utiliser. Donc on a déjà une Request d'une personne qui est clair net et précise. On va permettre aussi de valider les paramètres. C'est que nos routes vont avoir forcément besoin d'un ID, d'éléments comme ça. Il va valider tout ça, il va vérifier qu'on est bon et il n'ira pas plus loin s'il n'y a rien qui match avec. On a notre WebRS Server qui est un petit peu notre tour de contrôle. C'est vu qu'il va récupérer cette response et elle va dire, voici les verbes qui sont autorisées sur mon API. Par exemple, on va dire le mot clé Readable, on va se retrouver avec Get. On va être à voir Editable, ça va correspondre à Put, Patch par exemple. Donc c'est des mots qui vont être des verbes qui vont être utilisés. Donc lui, ce qu'il va faire, c'est qu'il va prendre cette WebRS Request, il va récupérer tous les contrôleurs, c'est-à-dire nos routes, il va aller voir lesquels matchs, envoyer les données vers ça, les récupérer et va servir la WebRS Response. Parce que les contrôleurs doivent rentrer une réponse valide. C'est la classe WebRS Response. Donc elle va étendre une nouvelle classe qui vient d'apparaître aussi avec la 4.4. C'est la WebRS HTTP Response qui est toute simple, qui va dire quelles sont les Header, quel est le Body, quelle est la réponse, etc. Elle va contenir toutes les données que les contrôleurs vont prendre. Donc le serveur récupère la Response, crée ça et crée la WebRS Response. Et puis elle va ajouter ce qu'on appelle les links dans la ressource, qui permet d'accéder aux collections, à la description d'un type de contenu par exemple, des taxonomies, des méta, etc. Ce qu'on a actuellement, c'est ce schéma-là que j'ai pris aussi comme maximum du livre de Human Mate que je vous conseille de lire parce qu'il est très clair et extrêmement bien fait. Alors le schéma est tout simple, vous allez à la partie gauche qui correspond à la requête arrive dans WordPress. Donc c'est forcément une requête HTTP. Et le serveur récupère, on crée une Request, qu'on passe au serveur. En fait, le serveur, qu'est-ce qu'il va faire ? Il va regarder la sanitisation des données, il va valider des données, et puis on va avoir les callbacks de nos endpoints puisque normalement on a un endpoint, donc on a un contrôleur qui va répondre. Ce contrôleur, qu'est-ce qu'il fait ? Il renvoie au serveur la Response, il prend cette Response et il serve la Request et qui est en fait une réponse HTTP avec un statut 200, 301, 302, etc. Donc ça c'est un petit peu le moteur de tout ça et ils ont bien séparé toutes ces parties-là pour pouvoir changer des petits bouts au fur et à mesure si jamais on se rend compte que ça ne va pas. On va passer aux classes de la 4.5. Donc la 4.5, elle n'est pas encore là, mais on va dire que c'est les classes de la WPAPI v2 qui est actuellement sur le repository officiel. Nous avons une seule base, la WPRS Contrôleur, donc c'était vraiment la partie qui nous manquait actuellement qui fait toutes les routes. Et on a 12 classes pour les contrôleurs de contenu. Donc actuellement on va en faire sur le master, actuellement c'est comme ça. Vous allez sur le develop, c'est pas du tout la même chose. On a encore tout changé. Nous avons la WPRS Contrôleur, je vous l'ai présenté. C'est une classe abstraite, c'est-à-dire qu'on ne peut pas dire ok, nouvelle reste contrôleur, ça marche pas. C'est une classe qu'on doit étendre et on est obligé de redéfinir une méthode, c'est register route. Forcément un contrôleur qui n'a pas de route, ça n'a pas de sens. Là-dedans, il va encore nous donner 12 méthodes qu'on va pouvoir implémenter. GetItems, GetItems, CreateItems, GetItems, GetItems, etc. C'est un peu le principe du crude. Tout ce qu'on va pouvoir faire avec notre objet, on va pouvoir les refaire ici. C'est pas qu'il nous contraint, mais il nous donne déjà les clés et les pistes pour aller là-dessus. Par exemple, pour la classe des attachments, on va étendre cette classe-là et on va implémenter en plus le PLO2. On va pouvoir récupérer un fichier, l'insérer et mettre le média, etc. Par exemple, pour GetItems, je vois si c'est disible. GetItems, qu'est-ce qu'il prend ? Il prend une WP HTTP request. Il prend pas un tableau, il prend pas des arguments, il récupère une HTTP request, puisqu'on sait après comment l'utiliser. On va vérifier un petit peu tout ça. On va voir quel est le post ID. L'ID n'existe pas. Par exemple, on a un statut 404. L'élément n'existe pas. Mais avant même de faire tout ça, on va vérifier les permissions. Si l'article n'est pas autorisé à être lu, par moi ou par quelqu'un d'autre, on va pas l'afficher. Donc là, on va récupérer ce post-là et en fonction du contexte, on a toujours des choses différentes. On peut dire que la personne peut lire les articles des autres, mais elle peut pas les éditer, elle peut pas les supprimer, etc. Tout ce fallback va se mettre en place. On va vérifier ce qu'il a droit d'update ou le read, see per read. Là-dedans, on va faire un check read permission. On rentre de plus en plus profond dans l'API. Qu'est-ce qu'il va faire ? Il va récupérer ce post-là. Est-ce que j'ai le droit de l'update si je suis en mode update ? Est-ce que le post-type est autorisé dans l'API ? Je regarde son post-status, c'est ce qu'il est publié, etc. Et cette chose-là de check read permission, il va juste retourner tout ou false. Il va dire, ok, j'ai le droit, t'as pas le droit. Et ça a été la même chose pour le reste, pour du create, pour du update et pour du lead. Et chacune, ils vont vérifier les droits. Avec, par exemple, le current user can. Qu'on connaît très bien, il se base de toute façon sur ces choses-là. Et vu qu'on est connecté la plupart du temps pour avoir presse à travers son cookie, son utilisateur, toutes les possibilités qu'on a dans la admine en termes de droits, on va les retrouver ici. Il y a quelques méthodes importantes qu'on a, par exemple, dans la classe générale des postes qui sont assez importantes. C'est GetItemChema, PrepareItemForResponse et PrepareLinks. GetItemChema, les schémas de nos données c'est basé sur le JishunChema. Ce pays n'a pas inventé cette partie-là. Le JishunChema, en fait, ça permet de décrire l'objet qui est retourné et qui permet d'avoir un élément lisible par un humain et qu'en seulement lisant le code comprennent comment fonctionne cet objet-là. Ça va lister toutes les propriétés et les fonctions de chaque champ. ID, c'est un integer, c'est l'ID de l'élément. Et c'est utilisé pour filtrer l'élément au moment du retour. Si l'élément n'est pas dans le schéma, on ne l'affiche pas. Si je change le schéma de mon élément et je dis mon type de contenu et qu'il n'a pas d'auteur, on n'affiche pas l'auteur. Ca se sont tous les champs qu'on connaît qui sont les champs de base de données, sticky, excerpt, content, title, slug, etc. Si je vais voir dans le JishunChema, j'ai ID, une description unique, je sais que c'est l'ID unique. C'est le type integer. Et les contextes dans lesquels il va être accessible, c'est view, edit et embed. On ne va pas avoir au moment du insert, on ne va pas mettre un ID, sinon c'est un update. Est-ce qu'il en read only ? Oui, on ne va pas le laisser en mode modifiable, ça ne va pas le faire. On a aussi le preparatime for response. Cette méthode va récupérer les données juste avant le retour. Juste avant qu'on revoie une rest response, on va appeler cette fonction. Ca va filtrer le schéma grâce au schéma en fonction du contexte, savoir quelles sont les champs, je vais afficher. C'est là où le schéma rentre en jeu assez fort. On ajoute les champs additionnels, vous avez des fields pour ajouter des champs, tout va bien. On va ajouter des links, je vais revenir dessus et ça retourne une reprise response. C'est très important, on va faire attention de bien retourner une reprise response. Derrière ça, la pays elle fait en sorte de s'intercaler un tout petit peu avant et elle va dire je vais vérifier quand même qu'on me renvoie une response. Parce qu'on pourrait tenter de renvoyer juste un tableau. Ce n'est pas forcément bien parce que la response elle va prendre en compte plein de choses. C'est justement ces links dont je vous parle. Alors exemple, ça c'est la préparation for response de la WP Post controller. On a quoi ? Les champs de base, le permalink, le statut, le password, la ID etc. Donc ça c'est des données qui sont récupérées de la pays. Donc par exemple là ils ont intégré prépare date for response. Comme ça, vu que c'est une date modifiée, la personne dans le bac aussi elle a rentré la date d'une façon spéciale. Peut-être elle veut retourner de la façon jour mois un petit peu en dessous, on va récupérer toutes les taxonomies de mon objet et je vais rajouter pour chacune des taxonomies qui sont dans la REST API parce que c'est pour ça qu'il y a un show in rest 2. Et on va récupérer tous les termes et tous les ID des termes. Donc on va avoir non la taxonomie et tous les ID associés. Pour préparings en fait c'est simplement ce qu'on appelle hyper média. Alors hyper média c'est quoi ? C'est des pratiques pour lier tous nos contenus les uns avec les autres. Pour que à partir du moment où je commence à fonctionner les clés hyper médias et les liens que je puisse en fait lire mon API humainement j'entends bien comme ça humainement regarder des JSON ouvrir et découvrir l'API par soi-même sans documentation. C'est ce qu'on appelle une API auto-découverable c'est qu'on pourrait coder des systèmes qui d'eux-mêmes vu qu'ils connaissent la structure de comment ça fonctionne une API vont pouvoir aller chercher de voir où se trouvent ces collections là où se trouvent ces termes où se trouvent ces éléments là etc. Donc on pourrait avoir des choses comme ça. Dans les links de base on retrouve author collection par exemple author c'est la fin de mon article je vais avoir un links author et ça va me faire un lien vers l'auteur qui est en fait la ressource unique de l'auteur dans l'API. Par exemple la collection mon poste fait partie d'une collection d'une collection de poste je vais envoyer vers là où se trouvent les postes Donc en fait à partir de un seul élément on va pouvoir remonter et redescendre l'arboréissance de mon API facilement. Alors là c'est les mots de base si vous tapez sur internet il y en a plein plein plein plein Il y a une API qui est bien en termes d'hyper-médias c'est l'API de PayPal il n'y a même quasiment pas besoin de lire la doc le petit bout du début où vous trouvez l'API et puis après on peut tout tout voir toutes les méthodes disponibles comment ça fonctionne c'est plutôt génial. Dans les links qu'est ce qu'on a ? On a par exemple un self un collection on a about, un author etc. Et puis on a 4-5 éléments à la fin on a WPAPI org, feature-médias donc les médias qui sont accrochés les attachments, les termes et les méta donc ça c'est pour avoir un petit 9 space pour être sûr qu'il y a personne qui s'appelle feature-médias dans l'ensemble. Si je découvre par exemple termes je vais retrouver quels sont les taxonomies catégorie et post-hag et comment aller voir toutes les catégories de mon poste toutes ces URLs là ce sont des routes et là vous allez me dire c'est bien joli mais moi mon terme ça m'intéresse pas à l'ID moi je vais avoir le nom, je vais avoir un lien je vais avoir plus de choses j'ai voir la description par exemple c'est là où on entre en jeu pour l'interrogation underscore embed on ajoute ça à la fin de nos URLs et en fait ça va permettre d'intégrer dans ma réponse les contenus que l'API a considéré comme étant embedable et en fait ça va enrichir la réponse sans avoir à faire une requête supplémentaire parce que s'il faut faire une requête supplémentaire pour aller chercher les termes à chaque fois qu'on les affiche vous voyez ça en fait un petit peu long donc ça ressemble à ça si je rajoute point underscore embed j'ai un nouvel index qui s'affiche qui s'appelle underscore embedded et si j'ouvre termes qu'est ce que j'ai j'ai toutes les informations de mon terme l'ID, link, name, slug, taxonomie et là bien sûr on a de nouveau nos liens d'hypermédia comment accéder à la vue de ce terme là comment accéder à la collection de ces termes de cette taxonomie et comment récupérer en fait le about c'est la description de la taxonomie comment elles fonctionnent, hiérarchicoles etc la WPRS controller moi là je vous montre le début parce que c'est register route où on est obligé de le faire les premières lignes c'est quoi c'est WP V2, donc ça c'est l'API V2 la base donc ça va être la base de mon post type je la se poste par exemple et ben qu'est ce que je vais dire donc on get je vais appeler get items donc récupérer mes éléments et avant de faire ça je vais avoir une permission get items information check et les args en fait c'est pour dire quels sont les arguments qui sont acceptables et les arguments qui sont acceptables ils se trouvent où ? dans les parames de la collection et les parames de la collection s'appliquent sur quoi ? sur le schéma en partie plus les nouveaux paramètres et juste en dessous ben dans la même register route j'ai un createable donc ça veut dire que si j'appelle cette route là en poste je peux créer un nouvel item et qu'est ce qu'il va faire avant il va vérifier les permissions etc etc pour cette route là ici ben c'est WP, WP, V2 poste, un ID donc c'est une petite expression régulière pour dire ben c'est un ID et ben là c'est quoi c'est je vais récupérer les données d'un ID d'un poste, d'un contenu donc voilà donc tout le reste c'est plus ou moins pareil le principe est toujours le même vérifier les permissions, valider des données faire une réponse et ça va être applicable sur le create, le update et le delete et ce qui amène dans tout ça c'est que c'est étantable tout type de contenu est taxonomie c'est déjà prévu en fait on n'a même pas besoin de s'embêter à refaire toutes les routes de nous-mêmes à les recréer, à recoder, vérifier, faire les permissions etc ça peut être extrêmement long et ça se met en place de très simplement pour un type de contenu quand je fais un register post type je vais dire ben show in rest true or false et là j'ai deux arguments qui sont optionnels, la reste base donc si ça m'intéresse pas d'avoir mon type de contenu par exemple mon type de contenu s'appelle book si ça m'intéresse pas d'avoir slash book si je dois avoir livre et ben je peux le préciser ici je mets livre et je vais pouvoir spécifier le contrôleur en face donc au lieu d'utiliser le post contrôleur où je vais dire ben moi je veux que mes contenus ne soient que lisibles je veux rien, je veux jamais qu'il y ait du update ou du delete etc ben il suffit d'étendre post contrôleur, enfin le post contrôleur et de retirer les méthodes qui ne nous intéressent pas retirer les routes qui ne nous intéressent pas et ça va être pareil pour nos taxonomies on les affiche dans le reste ou pas quelle est la base et quel est le contrôleur donc ça ça nous permet un petit peu de d'utiliser la puissance de la reste API en retirant des éléments en augmentant parce que vu qu'on va pouvoir étendre cette classe WeprestarmCtrl on va pouvoir ajouter des nouvelles fonctionnalités derrière il y a une phase importante dans le plugin c'est l'initialisation des routes alors ça se fait sur la fonction createInitialRestRoutes qu'est-ce que ça va faire ça va récupérer tous les types de contenus qui sont capables pour la reste API donc ça va créer toutes leurs routes ça va récupérer pour chacun de ces types de contenus les taxonomies qui sont disponibles les champs personnalisés et les révisions puis on va récupérer la collection des types de contenus donc la définition pour votre site de tous les types de contenus comment ils se comportent quels sont leurs champs pareil pour les taxonomies pour pouvoir savoir quels sont les taxonomies qui sont disponibles les post status les utilisateurs les commentaires etc etc etc donc dans cette phase là c'est là où ça va nous créer toutes ces routes qu'est-ce que ça donne concrètement ça donne ça actuellement si vous installez sur votre site vous avez les posts vous avez les pages vous avez les médias les types, les statuts, les taxonomies les catégories, les tags, les users, les comments et comme je parlais du OMBED et donc ça en fait c'est la réponse de base que va recevoir votre navigateur quand vous allez aller sur votre site et à partir de ces éléments là vous pouvez déplier parce que là j'ai tout replié parce que sinon c'est trop grand mais vous pouvez déplier les éléments et pour chacun des éléments vous allez pouvoir savoir comment ça fonctionne alors je vais vous présenter deux petits exemples de code plutôt simples un exemple PHP à jouer d'une route utilisation de cette route là et un exemple JavaScript pour justement prendre possession de cet API le petit exemple PHP c'est une adaptation de BAP as you conter c'est un plugin maison qui permet juste de compter les vues par jour, par mois, par semaine etc comme tous les plugins qui fonctionnent comme ça on va pouvoir voter voir qu'une seule fois par exemple ou pas ou que les personnes connectées etc donc c'est des règles de gestion qu'on doit quand même conserver en passant de la JAX à la JAX avec la REST API c'est là où on se pose la question de l'anime la JAX versus la REST API pourquoi est-ce que je passerai pas directement par l'anime la JAX puisque j'ai déjà une API disponible je n'ai pas besoin d'attendre qui sortent la 4.8 pour que ce soit fonctionnel admisax ça dit ce que ça veut dire c'est l'admine et pourquoi est-ce qu'on ferait une action fronte vers l'admine alors qu'on est en fronte deuxième chose quand on arrive sur admis à JAX qu'est-ce qu'on fait on charge tout l'admine donc le dossier web admis est chargé déjà ça on perd en performance et en plus on va charger aussi les traductions de l'admine c'est pas pour rien que WordPress à un moment ils ont dit ok on va séparer les fichiers de traduction admine et fronte admine pour réalité parce que c'était trop long parce que la différence entre un WordPress US qui ne charge pas de traduction un WordPress FR elle est gigantesque juste à cause de ces fichiers de traduction donc les routes qu'on va vouloir mettre en place première chose c'est avant de faire quoi que ce soit c'est que je vais créer un Namespace et une version puisque les APIs évoluent assez souvent que ce soit par exemple l'API Twitter qui d'un seul coup elle a disparu on pouvait plus rien faire et il y avait des centaines de sites qui étaient cassés avec le client qui appelle fait oh mais y'a mon flux Twitter il a disparu et tout mais c'est normal ils ont tout coupé bon l'intérêt aussi c'est ça c'est que je vais créer mon Namespace je vais mettre une version et que même si je fais une version 2 une version 3 une version 4 version 5 etc les gens vont pouvoir continuer justement à utiliser les précédentes versions même s'il n'y aura pas tout ce qu'on a dans la version 2 donc ça va éviter de tout casser et ça va inciter les gens à passer la version d'après donc par exemple ici je vais avoir une première route en poste pgson baposucounter mon namespace la version 1.0 et j'ai dit ok slash post ID donc là je vais dire je vais ajouter une vue sur ce contenu en particulier et je vais avoir la même route pour faire le get donc je vais récupérer les informations des vues d'un élément comme ça donc par exemple je ne sais pas si vous avez un dashboard en admin ou si vous avez une liste qui s'affiche et vous voulez faire récupérer le nombre de vues et bien vous pouvez passer par ça vous appelez cette vueur là hop je récupère les vues de mon contenu ce qu'on va implémenter c'est tout le nom de la classe mais en gros c'est le contrôleur c'est le contrôleur qui va récupérer la requête et voir qu'est ce qu'on peut faire et ce qu'on peut faire donc dans mon registre route je vais mettre quoi je vais dire bah j'ai une route qui est readable et j'ai une route qui est credible je vais implémenter mon get item parce que je récupère un item je vais implémenter un get item parce que je vais créer un item je vais aussi faire la vérification des permissions donc c'est important quand même de vérifier que la personne bah si ça fait 3 fois qu'elle a vu le contenu je vais pas contenir à chaque fois je vais faire un prepare item for database donc juste avant de l'insérer et en gros mon registre route ressemble à ça donc j'ai ma version mon namespace concatené avec ma version slash id slash id uncreatable un readable get item get item bah et là dans les arguments je suis pas j'ai pas fait de schéma mais vous pouvez faire comme ça vous pouvez faire ok j'ai un argument c'est un id le callback de validation et bah c'est voir si c'est bien numérique si c'est pas numérique on arrête pareil pour le get donc le pour le get et pour le delete qu'est-ce que ça va donner bah dans mon slash we pay design qui est en fait la racine où on va retrouver tous mes namespace bah je vais retrouver mon nouveau namespace pour mon plugin donc slash 1.0 et un petit peu plus loin je vais dire quels sont les deux routes qui sont disponibles donc j'ai une route de base qui va m'expliquer comment fonctionne ma route et je vais j'ai la version slash pay id avec justement l'id que j'ai besoin de travailler pour faire mon get et faire mon post si j'ouvre ça il va me dire bah le namespace c'est celui-là j'ai deux méthodes qui sont disponibles post et get donc là il peut pas être plus clair que ça et les deux endpoints qui sont disponibles j'ai un endpoint en post et là on prend tout le sens d'un pays auto-découvable c'est que rien quand on lisant ça et qu'on connaissant les verbes HTTP on peut comprendre on peut comprendre un peu comment ça fonctionne alors effectivement à id on aurait pu avoir une description en disant l'id du post que vous voulez mais c'est plutôt clair parce que c'est post view counter et c'est là que je vais vouloir faire je vais vouloir intégrer dans ma réponse post donc slash post slash 15 je vais vouloir intégrer dans mon post en fait c'est vu là parce que s'il faut appeler l'url des vues pour aller récupérer les vues à chaque fois que je l'appelle par la pays ça fait une requête supplémentaire et si je fais une collection de postes j'en ai jamais fini pour ça il y a register asfield première argument c'est le type d'objet sur lequel on va travailler donc là par exemple c'est des posts ça pourrait être user ça pourrait être command ça pourrait être revision je nomme mon champ donc moi je l'appelle view et j'ai un petit un petit get call back donc c'est juste pour dire bah pour afficher les données il faut passer par cette fonction là enfin en tout cas cette méthode là si je vais justement sur mon site wp10v2post post-id je vais me retrouver avec en dessous de tous les éléments donc là j'ai bien mes tags views et donc là j'ai intégré une partie des données de mon API donc j'ai intégré die counter, weak counter etc. j'ai d'autres données qui sont disponibles par exemple j'ai les vues du jour précédent ou les vues du mois suivant mais si il faut récupérer toutes ces données là ils affichent à chaque fois ça peut faire une réponse lourde c'est pas ce qu'on veut d'un API rapide c'est là où entre en jeu le embed donc là je vais au moment où en fait j'ajoute les links à la fin de mon mon élément bah je vais dire ok pour ce contenu là il y a une nouvelle route alors moi je l'ai appelé github, biapi etc. parce que c'est un mspace il n'y a que nous qui ayons cette url chez github donc on est sûr que c'est unique et je vais intégrer dedans la href qui correspond à la resturale donc l'url vers justement cette ressource là en disant cbhbucounter slash 1.0 slash l'ID en récupérant bah là je récupère une WP10 request et bah je peux récupérer l'ID qu'on va donner comme ça c'est dynamique et je lui dis embedable true alors pourquoi embedable true alors déjà ça nous donne ça à côté de tous les autres éléments on se retrouve avec ça et en fait consulter l'url WP10, v2, post, post-ID underscore embed ça revient en fait à chicher le contenu qu'il y a dans 1.0 post-ID de mon API et donc ça donne ça donc à côté de Autor iPlay, ce machin j'ai tout ça mais là j'ai rien fait fin j'ai rien fait j'ai juste ajouté links il est allé de lui-même récupérer dans mon contrôleur les données qui sont relatives pour les afficher ici donc rien que faire ajouter ce links ça nous évite en fait de refaire un développement qui va aller chercher les données pour cet élément petit exemple javascript ce que j'ai voulu faire c'est faire un éditeur front-office parce que c'est plutôt à la mode de vouloir faire un petit éditeur front-office alors c'est très très très léger c'est un modifier le titre et l'image depuis le front-office c'est pas grand chose mais l'exemple enfin le but de la démo c'est pour montrer très peu lignes de code on peut arriver assez fin avec la WPR-STPI donc le code PHP c'est 56 lignes une petite classe toute minuscule qu'est-ce qu'elle fait cette classe elle ajoute mon script à moi elle ajoute bootstrap parce que je suis pas designer et puis en fonction du contexte sur lequel je vais m'afficher est-ce que je suis est-ce que je suis sur un poste en singular est-ce que j'ai le droit d'éditer ce poste parce que je vais pas pouvoir éditer un poste si j'ai pas les droits normal et ben je vais rajouter mon style je vais rajouter mon script et puis je vais rajouter quelques informations de contexte par exemple le poste ID ou le sélecteur pour savoir où est la zone de titre et puis je vais faire web-inq-media pour aller récupérer justement l'éditeur média pour avoir uploader mettre un média etc et ça c'est juste pour le PHP alors là pour que je dise c'est un petit peu plus long j'ai 100 lignes bien d'inventés donc avec bien tout ce qu'il faut etc donc ça fait une partie bien lisible si on fait une version minifiaise c'est tout minuscule et qu'est-ce que ça va utiliser ça va utiliser wpapei.js qui est en fait une librairie.js écrite en backbone et en underscore fourni par la wpapei qu'est-ce que fait cette librairie en fait elle nous permet de faire des calls vers la paix vers notre API sans avoir en fait à dire alors il faut que j'inclue le nonce il faut bien que la route pour aller regarder les articles c'est bien celle-ci la route pour arriver à un article c'est bien celle-là voilà tout ça il nous l'enlève et il nous donne plein de choses par exemple je récupère les postes et je fais pas suivante pas suivante pas suivante ah bon il fait il n'y a plus de réponse au lieu de dire jQuery, Ajax je récupère un Ajax et les données et je vérifie qu'il y en a encore etc donc tout ça ça vous permet d'aller un petit peu plus vite moi ce que j'ai utilisé derrière c'est le trio jQuery, backbone et underscore premièrement ils sont intégrés dans le corps deuxièmement c'est parce que c'est pas un framework backbone c'est un ensemble c'est une limbré qui nous permet d'aller vite et qui donne toute petite structure à notre contenu en mettant en place ce qu'on appelle des vues des contrôleurs des collections et des modèles qui permettent en fait de représenter la donnée qu'on a en base de données cotégies et en fait de pouvoir se synchroniser derrière c'est très complet c'est super puissant et c'est encore utilisé donc je vous conseille quand même de l'utiliser première chose je vais vouloir récupérer mes données donc en gros c'est appuyer cet élément là et ça tient en fait sur ces lignes de code je crée un nouveau modèle parce que j'ai une représentation d'un objet donc le nouveau post je lui dis ok, la ID c'est égal la donnée que j'ai dans ma variable à ID et puis là je fais modèle fetch fetch va chercher fetch et quand il a terminé j'ai une fonction de callback et à ce moment là de fonction de call à ce moment là où je fais justement une fonction de callback je crée une nouvelle vue alors qu'est-ce qu'une vue dans underscore ou backbone en gros une vue ça va être un ensemble d'éléments HTML et en fait il va régir dans cette vue les événements et les comportements de cet élément là c'est un peu un contrôleur c'est une vue et un contrôleur en même temps et donc ça va permettre de bien isoler par exemple à ce code que j'ai fait là je pourrais un petit peu je pourrais le rendre un peu plus dynamique et dire ok c'est possible aussi sur la liste des postes tant que c'est le même le même jQuery ça pourrait le faire donc l'intérêt c'est ça c'est créer des vues et au moment où j'ai le droit de le faire hop j'instanti tout ça et je fais ce qu'il y a à faire la vue title ressemble concrètement à ça alors il n'y a pas de tout à dire je vais me concentrer sur deux petites méthodes ce qui a un petit peu à comprendre c'est que j'ai un EL tout en haut qui me dit sur quel élément il travaille j'ai des events et ça on les connaît c'est les mêmes que jQuery click, focus, etc et il y a le callback derrière sur l'événement click ce que je fais dès que je clique sur mon titre j'utilise les capacités HTML5 et je le rend content editable donc ça fait un peu comme un chant un chant textaria ça m'évite à devoir créer un fichier input cacher que j'affiche quand je clique c'est vraiment compliqué là c'est super rapide et puis je récupère je dis dans cette vue j'ai un modèle qui est attaché je récupère le title et je récupère le title qui est rendu donc le title pour le front donc si jamais j'affiche ma page une première fois et quelqu'un change le titre de l'autre côté il est récupéré et réaffiché sur mon focus out qu'est ce que je fais ben j'enlève le content editable pour éviter que la question continue à appliquer dedans je dis dans mon modèle je set le title par rapport à la version HTML que la personne a donné et je fais quoi ? je fais le modèle save mais c'est tout j'ai pas à lui dire il faut apptaper en poste la poste slash 15 non ça il sait faire et c'est là on va pouvoir un petit peu jouer avec les succès et les erreurs c'est que si j'ai une erreur xhr c'est-à-dire autre chose que 200 en gros 302 que ça a fonctionné je vais pouvoir récupérer la réponse de WordPress donc c'est la response de jason dans lequel il va me donner le statut 404 401 403 500 par exemple et le message parce que WordPress il reste explicite on va pouvoir afficher ce message là et sinon succès tout s'est bien passé ça enregistrait et puis je redemande à ma vue de se rendre c'est-à-dire elle va prendre le title et elle va le mettre dans le niveau au cas où je sais pas on a un plugin qui se hook sur le save post et il va dire ok le title non il faut rajouter tel et tel élément avant ou enlever les accents ou mettre des espaces en conclusion là WPAPI est étendable on peut vraiment faire ce qu'on veut comme je disais avec la WordPress post controller on va pouvoir dire ouais moi ça m'interesse bien d'avoir des routes mais que les routes en lecture et donc retirer tout le reste elle permet de gérer les identifications moi je n'en ai pas beaucoup parlé mais actuellement elle gère le haut 1 qui est en fait un petit peu ce que fait fait plus maintenant mais Facebook Twitter Google plus Facebook se connectait avec on va pouvoir faire se connecter avec mon site ils prévoient de mettre la haute 2 qui est un petit peu plus sécurisé il y a une intégration WPCLI alors ça c'est génial c'est à dire qu'à partir de petit script bash on va pouvoir les récupérer sur d'autres sites des contenus et les insérer dans notre site les possibilités alors j'ai mis infini mais c'est quasiment infini on va pouvoir ajouter tout ce qu'on veut partout dans la pays des nouvelles routes de nos posts de nos contenus c'est vraiment le rendre extrêmement riche et faire en sorte qu'il fonctionne en mode Headless c'est vraiment j'ai mon backend où je vais pouvoir rentrer mes contenus et faire ce que je veux et le front end il va s'intercaler avec plein de choses le e-commerce par exemple le e-commerce qui intègre son API il pourrait l'intégrer on pourrait penser aux multilingues c'est à dire que dans les links on pourrait dire translations enfin et voir toutes les translations disponibles pour cet article et avoir les liens vers ces contenus là l'intégration ce qu'avait le plugin post to post alors pour les personnes qui ne connaissent pas post to post c'est un plugin qui permet de faire des liaisons entre les types de contenus avec une cardilignité donc pour dire un contenu il y a plusieurs contenus mais que dans ce sens là ou un contenu il y a un contenu et spécifier ces éléments donc par exemple je passe sur un allociné on aurait le film qui est lié à des acteurs et en disant les acteurs l'intégration d'advins custom films qui est quand même un des plugins les plus utilisés c'est pareil c'est à voir justement toutes ces données là qui sont un peu brutes dans la base de données les retrouver dans le design et pouvoir faire ce qu'on veut par exemple je ne sais pas pour une carte avec des points qu'on aurait rentré dans le bac aux 6 bien à ce moment là je les récupère et je les affiche la latitude, la longitude j'ai son T, j'ai son ID j'ai tout je peux faire ce que je veux on pourrait faire des objets connectés aussi avec par exemple on l'a connecté à un site web API donc en fait on joue on met un but on appuie sur un bouton et en live sur l'écran il y a marqué 1.0, 10.0 etc et on peut dire tiens quand il y a une gamel il y a un petit son qui dit gamel on peut faire ce qu'on veut on pourrait faire aussi ce qu'on appelle un dashboard dynamique un dashboard qui va se connecter à tous vos sites tous vos sites que vous gerez et voir les derniers articles les derniers éléments etc donc ça ça permettrait de rendre un peu tout interconnectable vous pourriez avoir un dashboard pour chez vous et faire de la domotique avec parce que votre board presse il sait appeler des éléments il sait il fait une web http response et puis il va appeler la cafeteur il va faire fais-moi le café ouvre la porte du frigo sort le chien donc là on peut dire j'hésite on peut dire j'hésite pourquoi ? parce que c'est pas prêt c'est pas prêt quand je vous dis la branche développe elle change tous les jours et puis ils font une belle version de l'APAPI tout est déplicaté tout est cassé merde ce serait quand même dommage de pas pouvoir profiter tout ça moi ce que je vous dis c'est faites-le faites des choses avec expérimenter cassez-vous les dents dessus just do it c'est vraiment ça c'est faites quelque chose avec en fait il faut expérimenter et c'est comme ça qu'après il y a des gros projets qui montent par exemple comme disait Maxime avec Nomadio ou New York Times c'est des grosses références et c'est des belles références pour le WordPress pour WordPress en gros et donc ça permettrait d'ouvrir encore plus notre outil et on pourrait faire des choses super avec voilà j'ai terminé si vous avez des questions merci Nicolas donc on a un peu de temps pour des questions ici Bonjour ma question elle se posait bizarrement parce que on connait je vais m'attirer les foudres de WordPress et de son utilisation atroce du SQL de la mémoire et donc par rapport à ça quels sont aujourd'hui j'ai l'impression qu'il n'y a rien du tout par rapport à des idées de cache vis-à-vis de la pays alors vis-à-vis de la pays il y a plusieurs couches de cache qu'on peut mettre par dessus il y a forcément le cache mais SQL un terme ça c'est hygière ça comme il veut derrière ça il y a l'objet de cache donc il y a une partie des réponses les get posts etc on peut mettre dans le cache objet pardon dans un même cache au lieu d'aller rechercher et donner à chaque fois les stocks dans le cache les rends donc là on gagne une première une première couche de cache par-dessus ça si on veut on peut rajouter un cache taitique du var niche ou un njanx bien configuré on peut rajouter du cache par-dessus cette API parce que si on sait qu'elle est beaucoup appelée on sait qu'on va devoir si un nouvel article de floucher ce cache là mais les réponses de la reste API sont cachées on peut les cacher donc avoir un rendu en 7 millisecondes 8 millisecondes derrière mais pour le moment il n'y a rien qui est intégré bah non parce qu'après c'est une solution serveur le cache objet on n'est pas obligé de l'intégrer dans son site c'est seulement si on se rend compte que bah j'ai trop de contenu j'ai trop d'éléments enfin voilà le cache taitique c'est pas obligatoire non plus mais on le fait parce qu'on n'a pas envie d'avoir un site qui se charge en une seconde on veut un site qui répond en 90 millisecondes c'est bon merci merci merci pour la conf déjà et petite question au niveau des performances on dirait 1000 postes 2000 postes voire 50 000 postes d'un coup alors ça j'ai pas fait par contre ce que j'ai fait un petit test sur justement entre admina jacks et reste là sur juste ma petite route toute petite avec zéro plugin installé rien dessus l'admina jacks ça répond en 266 millisecondes sur la requête reste à pays c'est 200 millisecondes donc j'imagine que l'écart sera encore plus grand si on a 35 plugins installés et le yost etc qui tourne sur les titres et qui part tout ça merci d'autres questions attention s'il n'y a plus de questions nicolas nous raconte une blague ah ouais ah vous voulez le blague merde alors qu'est ce qui est vert qui va très vite et qui rigole dans les virages un chou marreur bonjour merci beaucoup pour la confiance est ce qu'on peut parler un peu d'authentification et notamment à distance est ce qu'on peut sloguer en tant qu'utilisateur est ce qu'on peut avoir les droits le plot etc oui en fait il y a deux méthodes soit tu te connectes à travers la pays et tu prends ton cookie et tu le renvoies à chaque fois c'est comme si tu es connecté soit il y a un il y a un petit plugin à installer qui permet de faire un MD5 sur le user plus le password et le balancer dans chacune des requêtes donc il va être considéré d'être connecté à chaque fois la meilleure solution c'est de passer quand même par un haut haut derrière pour avoir une connexion unique et sur surtout alors j'en ai pas mal mais on peut installer dans WordPress un serveur au haute alors il suffit d'aller dans le GitHub de la web API on peut créer un serveur au haute qui va justement donner ses tokens etc. qu'on peut appeler une première fois récupérer son token réappeler l'API derrière avec son token valide merci beaucoup c'est juste pour compléter ta réponse sur l'autre mettez du HTTPS sinon on prend toutes vos données en fait c'est mieux quand même c'est un petit peu clairement c'est sans HTTPS on voit vos clients tidy vos clients de secret dans ce moment entre les deux et on récupère tout attention je pense à la spécécurité d'ailleurs sur le GitHub de la web API il y a pas mal de choses en fait en plus de la web API elle-même il y a plein de petites numériques qui fournissent il y a un espèce de web API client c'est un peu ce qu'on peut avoir quand on arrive sur le Facebook développeur on peut aller appeler des routes avec un token pour vérifier qu'elles sont allées données c'est pareil il va nous donner toutes les routes pour notre API et on va pouvoir les appeler et on va pouvoir voir le résultat de Jason un peu ce qu'a fait Maxime tout à l'heure comme il nous l'a montré en fait là on va pouvoir avoir un comportement équivalent on va appeler notre web API avec les arguments j'ai une question est-ce que tu as un framework JS à nous conseiller pour démarrer sur la web API un framework en lui-même non tu paris backbone alors backbone c'est pas un framework c'est une librairie complète qui te donne des outils comme ça dit c'est une colonne vertréorale qui donne en fait les outils qu'on a toujours besoin en fait quand on fait du JS récupérer un ensemble d'éléments avoir un élément pour mettre un élément un jour etc c'est plutôt solide mais ça doit faire ton architecture en fait derrière c'est ça le problème c'est ça ce qui peut un peu rebuter ce qu'il faut faire tout soi-même après il y a plein d'articles qui permettent de savoir comment on fait par dessus backbone il y a des frameworks qui sont mis en place à Chaplin ou à Marionette qui fonctionnent un peu comme ça si ils prennent backbone ils en font un framework après il y en a plein des frameworks tu peux utiliser du React tu peux utiliser du je sais plus comment ça s'appelle c'est le Google d'heter JS du Angular etc si tu vas avoir vraiment un cadre de travail ou du MBRJS MBRJS par exemple tu peux requêter dans la web API très facilement sauf que tu es dans leur modèle donc tu es extrêmement limité ça peut être bien parce que ça permet de faire un truc très vite par contre après tu vas peut-être sentir un petit peu étriqué dans tout ça donc avec des bonnes connaissances tu peux te baser uniquement sur backbone, underscore, etc mais après ça n'empêche pas de de package tout ça avec toutes les nouvelles technos actuelles tu peux rajouter du React tu peux pas obligé d'utiliser underscore pour générer tes vues tu peux dire je l'utilise du React il n'y a pas un framework qui offre des outils pour avoir de web API non à part le fichier web API JS qui donne en fait les modèles backbone etc c'est tout pour l'instant il n'y a pas grand chose en JS qu'il soit vraiment open source et prêt à être utilisé il suffit de regarder un petit peu en fait il faut commencer à regarder un peu les thèmes justement le thème Picard qu'avoir prêt à s'adonner voir comment ils font ou regarder le code source de kalypso le code source de kalypso il faut y aller on connaît pas tout ça c'est difficile à lire parce que c'est tout tout mis en petit morceau et tout indépendant pour éviter justement que ça se tourne dessus merci une dernière chance ok c'est bon on est terminé