{"id":231489,"date":"2022-12-24T11:39:00","date_gmt":"2022-12-24T08:39:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231489"},"modified":"2022-12-07T10:57:24","modified_gmt":"2022-12-07T07:57:24","slug":"structuration-des-fonctionnalites-de-lapi","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/structuration-des-fonctionnalites-de-lapi\/","title":{"rendered":"Structuration des fonctionnalit\u00e9s de l&rsquo;API"},"content":{"rendered":"\n<p>Je n&rsquo;ai pas beaucoup d&rsquo;exp\u00e9rience en mati\u00e8re de cr\u00e9ation d&rsquo;API. J&rsquo;ai fait une bonne partie du travail en ce qui concerne l&rsquo;int\u00e9gration de WordPress avec des API tierces, mais j&rsquo;ai pass\u00e9 tr\u00e8s peu de temps \u00e0 cr\u00e9er un syst\u00e8me qui a son API avec laquelle d&rsquo;autres syst\u00e8mes peuvent interagir.<\/p>\n<p>En ce qui concerne ce dernier, je suis en train de le faire (et j&rsquo;apprends beaucoup). L&rsquo;essentiel du projet est qu&rsquo;il existe une application iOS qui interagit avec WordPress via <a href=\"https:\/\/developer.wordpress.org\/rest-api\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">l&rsquo;API REST<\/a> de mani\u00e8re bidirectionnelle.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e7069145e53.png\" alt=\"Structuration des fonctionnalit\u00e9s de l&#039;API\" ><\/a><\/p>\n<p>Je suis impatient de partager plus \u00e0 ce sujet, mais je dois le faire lorsque le projet sera plus avanc\u00e9.<\/p>\n<p>Mais lorsqu&rsquo;il s&rsquo;agit de travailler avec des API tierces, puis de cr\u00e9er des composants d&rsquo;un projet WordPress qui interagissent avec elles, deux des choses que je trouve toujours utiles sont\u00a0:<\/p>\n<ul>\n<li><a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">\u00e0 l&rsquo;aide d&rsquo;une biblioth\u00e8que appropri\u00e9e<\/a> ,<\/li>\n<li>sch\u00e9matiser le syst\u00e8me,<\/li>\n<li>s\u00e9parer la fonctionnalit\u00e9 en parties.<\/li>\n<\/ul>\n<p>Et les deux derniers points ci-dessus sont ce que je cherche \u00e0 couvrir dans ce post.<\/p>\n<h2>Structuration des fonctionnalit\u00e9s de l&rsquo;API<\/h2>\n<p>Aucun code n&rsquo;est impliqu\u00e9 dans cet article, mais ce sera peut-\u00eatre un guide sur la fa\u00e7on dont vous pouvez avancer dans votre travail en structurant les fonctionnalit\u00e9s de l&rsquo;API ou en faisant quelque chose de similaire par vous-m\u00eame.<\/p>\n<h3>Biblioth\u00e8ques tierces<\/h3>\n<p>Je mentionne cela uniquement parce que je pense qu&rsquo;il est utile de r\u00e9utiliser des solutions \u00e9prouv\u00e9es qui ont \u00e9t\u00e9 test\u00e9es (et donc utilis\u00e9es) \u00e0 tous les niveaux dans une vari\u00e9t\u00e9 de projets.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-160154-61e706951696d.png\" alt=\"Structuration des fonctionnalit\u00e9s de l&#039;API\" ><\/a><\/p>\n<p>Guzzle est ma biblioth\u00e8que de choix. Oui, WordPress a des fonctions int\u00e9gr\u00e9es pour communiquer avec d&rsquo;autres URL, mais vous pouvez faire plus avec Guzzle (en particulier en ce qui concerne les composants de la requ\u00eate) qu&rsquo;avec WordPress.<\/p>\n<p>Certes, c&rsquo;est mon opinion, mais j&rsquo;aime travailler avec elle. <a href=\"http:\/\/docs.guzzlephp.org\/en\/stable\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Et la documentation est solide<\/a>.<\/p>\n<h3>Sch\u00e9matiser le syst\u00e8me<\/h3>\n<p>Lorsque vous travaillez suffisamment longtemps avec l&rsquo;int\u00e9gration d&rsquo;API tierces, vous devez vous habituer au processus de configuration du fonctionnement du syst\u00e8me. Habituellement, \u00e7a donne quelque chose comme \u00e7a :<\/p>\n<ol>\n<li>cr\u00e9er un client API pour se connecter \u00e0 l&rsquo;API,<\/li>\n<li>mettre en place les fonctions n\u00e9cessaires pour effectuer les requ\u00eates dont vous avez besoin,<\/li>\n<li>analyser la r\u00e9ponse,<\/li>\n<li>renvoyez-le \u00e0 l&rsquo;objet ou \u00e0 la fonction d&rsquo;origine qui a invoqu\u00e9 la requ\u00eate.<\/li>\n<\/ol>\n<p>C&rsquo;est un peu simpliste (apr\u00e8s tout, cr\u00e9er le client API peut \u00eatre une t\u00e2che en soi), mais les points restent tous les m\u00eames (et peuvent ne pas faire une mauvaise s\u00e9rie \ud83e\udd14).<\/p>\n<p>Quoi qu&rsquo;il en soit, par-dessus tout, cela ne fait jamais de mal de sch\u00e9matiser le syst\u00e8me. C&rsquo;est quelque chose que je fais encore parce que cela m&rsquo;aide, dans un sens, \u00e0 articuler ce que je construis et \u00e0 voir s&rsquo;il y a des lacunes dans le flux de contr\u00f4le \u00e0 travers l&rsquo;application.<\/p>\n<p>Voici pourquoi, s&rsquo;il n&rsquo;y a pas d&rsquo;autre raison, c&rsquo;est important\u00a0: articuler ce que vous allez faire vous aide \u00e0 comprendre ce que vous faites et expose souvent des lacunes dans votre r\u00e9flexion que vous tenez pour acquises.<\/p>\n<p>Donc, quand il s&rsquo;agit de mettre en place un syst\u00e8me, ne pr\u00e9sumez pas que vous avez tout compris.<\/p>\n<h3>S\u00e9parer la fonctionnalit\u00e9<\/h3>\n<p>Si vous avez lu ce blog pendant un certain temps, alors vous savez que je suis fan de suivre toutes les id\u00e9es de d\u00e9veloppement de &quot;s\u00e9paration des pr\u00e9occupations&quot;.<\/p>\n<p>Cela est vrai pour de multiples raisons dont les moindres ne sont pas :<\/p>\n<ul>\n<li>\u00eatre capable de tester unitairement un client API de mani\u00e8re isol\u00e9e,<\/li>\n<li>garder le code pour communiquer avec le front-end et le back-end ind\u00e9pendants.<\/li>\n<\/ul>\n<p>Lorsque vous avez une classe d\u00e9di\u00e9e \u00e0 l&rsquo;ex\u00e9cution de la logique m\u00e9tier sur les valeurs, vous pouvez d\u00e9charger une grande partie de la gestion des erreurs dans la classe interm\u00e9diaire.<\/p>\n<p>Cela signifie que la classe principale responsable de la majorit\u00e9 de la logique m\u00e9tier doit avoir exactement ce dont elle a besoin pour faire son travail. Cela ne signifie pas qu&rsquo;il n&rsquo;y a pas de v\u00e9rification des erreurs en place (division par z\u00e9ro ou quelque chose, vous savez\u00a0?), mais cela signifie que les donn\u00e9es peuvent \u00eatre v\u00e9rifi\u00e9es avant m\u00eame qu&rsquo;elles n&rsquo;atteignent la classe principale via la classe interm\u00e9diaire.<\/p>\n<p>Et non seulement il peut v\u00e9rifier les informations manquantes, mais il peut \u00e9galement signaler ces erreurs au serveur frontal.<\/p>\n<h2>Trois points \u00e0 retenir<\/h2>\n<p>Si vous cr\u00e9ez un syst\u00e8me d\u00e9pendant d&rsquo;Ajax dans WordPress, l&rsquo;int\u00e9r\u00eat de tout cela est triple :<\/p>\n<ol>\n<li>sch\u00e9matisez le syst\u00e8me que vous cr\u00e9ez,<\/li>\n<li>cr\u00e9er une classe interstitielle pour g\u00e9rer les informations manquantes et signaler les erreurs,<\/li>\n<li>n&rsquo;envoyez les informations compl\u00e8tes \u00e0 la classe d&rsquo;activit\u00e9 principale qu&rsquo;apr\u00e8s que toutes les informations ont \u00e9t\u00e9 v\u00e9rifi\u00e9es.<\/li>\n<\/ol>\n<p>Une fois que vous avez fait cela, l&rsquo;objectif serait que la classe m\u00e9tier principale renvoie les valeurs demand\u00e9es sans erreur car elles auront \u00e9t\u00e9 intercept\u00e9es avant m\u00eame de l&rsquo;atteindre.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un guide sur la fa\u00e7on dont vous pouvez avancer dans votre travail en cr\u00e9ant des fonctionnalit\u00e9s d&rsquo;API structurantes ou en faisant quelque chose de similaire par vous-m\u00eame.<\/p>\n","protected":false},"author":1,"featured_media":224405,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[893,717,841,862],"tags":[1167],"class_list":["post-231489","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-code-2","category-developpeur","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231489","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231489"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231489\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/224405"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231489"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231489"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231489"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}