{"id":464,"date":"2017-12-18T21:23:30","date_gmt":"2017-12-18T20:23:30","guid":{"rendered":"http:\/\/www.valeriofinazzo.it\/wordpress\/?p=464"},"modified":"2017-12-18T21:29:06","modified_gmt":"2017-12-18T20:29:06","slug":"tutorial-wordpress-creare-plugin-per-api-rest","status":"publish","type":"post","link":"http:\/\/www.valeriofinazzo.it\/wordpress\/2017\/12\/tutorial-wordpress-creare-plugin-per-api-rest\/","title":{"rendered":"TUTORIAL WORDPRESS &#8211; CREARE PLUGIN PER API REST"},"content":{"rendered":"<p>Solitamente uso WordPress come CMS, lo trovo comodo e semplice da usare qualora non siano presenti particolare esigenze da parte del cliente.\u00a0 Da poco tempo ho scoperto la presenza della APi Rest pienamente supportate dalla versione 4.7, il che fa si che WordPress possa essere utilizzato come backend per architetture a servizi di tipo REST. In breve WordPress permette di definire agevolmente endpoint in grado di ricevere e inviare oggetti di tipo JSON (JavaScript Object Notation). JSON \u00e8 un formato leggero per l&#8217;interscambio di dati, pi\u00f9 leggero dell&#8217;XML e ci\u00f2 ha fatto che l&#8217;architettura REST con JSON si presenti come alternativa ad una architettura SOAP con XML. Per chi volesse maggiori dettagli su REST rimando ai ragazzi di <a href=\"http:\/\/www.html.it\/pag\/19595\/introduzione-ai-web-service\/\">HTML.IT<\/a><\/p>\n<p>Nel mio caso l&#8217;esigenza \u00e8 quella di realizzare un app android che acceda ai contenuti gestiti su una piattaforma WordPress e ne consenta la lettura e\/o la modifica.<\/p>\n<p>In questo articolo vedremo come realizzare un servizio REST. Per fare questo occorre realizzare un plugin wordpress, definire l&#8217;endpoint da gestire e la logica con cui gestire le chiamate ricevute.<\/p>\n<p>Andiamo per ordine, per realizzare il plugin occorre caricare un file php nella cartella\u00a0\/wp-content\/plugins. Tale file deve presentare una intestazione particolare, che consenta a WordPress di individuarlo e di consentire tramite la dashboard di attivarlo. Di seguito un esempio:<\/p>\n<pre class=\"lang:php decode:true\">&lt;?php\r\n\/*\r\nPlugin Name: Valerio Finazzo Plugin\r\nPlugin URI: http:\/\/www.valeriofinazzo.it\/\r\nDescription: Plugin per la lettura dei posts\r\nAuthor: Valerio Finazzo\r\nVersion: 1.0\r\n*\/\r\n?&gt;\r\n<\/pre>\n<p>Se avete fatto correttamente, accedendo alla sezione plugin di WordPress trovere il plugin da attivare<\/p>\n<figure id=\"attachment_469\" aria-describedby=\"caption-attachment-469\" style=\"width: 300px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-content\/uploads\/2017\/12\/plugin-1.png\"><img loading=\"lazy\" class=\"wp-image-469 size-medium\" src=\"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-content\/uploads\/2017\/12\/plugin-1-300x90.png\" alt=\"\" width=\"300\" height=\"90\" srcset=\"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-content\/uploads\/2017\/12\/plugin-1-300x90.png 300w, http:\/\/www.valeriofinazzo.it\/wordpress\/wp-content\/uploads\/2017\/12\/plugin-1.png 457w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><figcaption id=\"caption-attachment-469\" class=\"wp-caption-text\">Il plugin compare dopo aver caricato il file php contenente la sua definizione<\/figcaption><\/figure>\n<p>A questo punto attiviamo il file ma non essendoci alcun endpoint definito non vedremo effetti. Per definire l&#8217;endpoint ci avvaliamo della direttiva\u00a0add_action che consente di stabilire le regole di invocazione del servizio e la logica con cui restituire il dato<\/p>\n<pre class=\"lang:default decode:true\">add_action( 'vfplugin_api_init', function () {\r\nregister_rest_route( 'vfplugin\/v1', '\/posts\/', array(\r\n                     'methods' =&gt; 'GET',\r\n                     'callback' =&gt; 'api_get_posts',\r\n));\r\n});<\/pre>\n<p>Il comando add action invoca la direttiva register_rest_route che stabilisce l&#8217;url da invocare, il metodo HTTP con cui invocare il servizio e la funzione da invocare). Nell&#8217;esempio fornito il plugin risponde alla chiamata GET del servizio\u00a0\u00a0http:\/\/www.valeriofinazzo.it\/wp-json\/vfplugin\/v1\/posts\/.<\/p>\n<p>Il metodo cakllback prevede di chiamare la routine api_get_posts che recupera tutti gli articoli presenti nel sito serializzati in formato json<\/p>\n<pre class=\"lang:default decode:true\">function api_get_posts( $data ) {\r\n   $all_posts = array();\r\n   $posts = get_posts();\r\n   if ( empty($posts) ) \r\n       return null;\r\n   return $posts;\r\n}<\/pre>\n<p>La serializzazione viene gestita in modo trasparente da WordPress. Pertanto il servizio \u00e8 attivo e non \u00e8 richiesto altro.<\/p>\n<p>A seguire il codice completo<\/p>\n<pre class=\"lang:default decode:true \">&lt;?php\r\n\/*\r\nPlugin Name: Valerio Finazzo Plugin\r\nPlugin URI: http:\/\/www.valeriofinazzo.it\/\r\nDescription: Plugin per la lettura dei posts\r\nAuthor: Valerio Finazzo\r\nVersion: 1.0\r\n*\/\r\nadd_action( 'rest_api_init', function () {\r\nregister_rest_route( 'vfplugin\/v1', '\/posts\/', array(\r\n       'methods' =&gt; 'GET',\r\n        'callback' =&gt; 'api_get_posts',\r\n));\r\n});\r\n\r\nfunction api_get_posts( $data ) {\r\n   $all_posts = array();\r\n   $posts = get_posts();\r\n   if ( empty($posts) ) \r\n       return null;\r\n   return $posts;\r\n}\r\n\r\n\r\n?&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Solitamente uso WordPress come CMS, lo trovo comodo e semplice da usare qualora non siano presenti particolare esigenze da parte del cliente.\u00a0 Da poco tempo ho scoperto la presenza della APi Rest pienamente supportate dalla versione 4.7, il che fa si che WordPress possa essere utilizzato come backend per architetture a servizi di tipo REST. &hellip; <a href=\"http:\/\/www.valeriofinazzo.it\/wordpress\/2017\/12\/tutorial-wordpress-creare-plugin-per-api-rest\/\" class=\"more-link\">Continua la lettura di <span class=\"screen-reader-text\">TUTORIAL WORDPRESS &#8211; CREARE PLUGIN PER API REST<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[85],"tags":[88,89,87,86],"_links":{"self":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/464"}],"collection":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/comments?post=464"}],"version-history":[{"count":9,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/464\/revisions"}],"predecessor-version":[{"id":475,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/posts\/464\/revisions\/475"}],"wp:attachment":[{"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/media?parent=464"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/categories?post=464"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.valeriofinazzo.it\/wordpress\/wp-json\/wp\/v2\/tags?post=464"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}