Solitamente uso WordPress come CMS, lo trovo comodo e semplice da usare qualora non siano presenti particolare esigenze da parte del cliente. 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 è un formato leggero per l’interscambio di dati, più leggero dell’XML e ciò ha fatto che l’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 HTML.IT
Nel mio caso l’esigenza è quella di realizzare un app android che acceda ai contenuti gestiti su una piattaforma WordPress e ne consenta la lettura e/o la modifica.
In questo articolo vedremo come realizzare un servizio REST. Per fare questo occorre realizzare un plugin wordpress, definire l’endpoint da gestire e la logica con cui gestire le chiamate ricevute.
Andiamo per ordine, per realizzare il plugin occorre caricare un file php nella cartella /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:
1 2 3 4 5 6 7 8 9 |
<?php /* Plugin Name: Valerio Finazzo Plugin Plugin URI: http://www.valeriofinazzo.it/ Description: Plugin per la lettura dei posts Author: Valerio Finazzo Version: 1.0 */ ?> |
Se avete fatto correttamente, accedendo alla sezione plugin di WordPress trovere il plugin da attivare
A questo punto attiviamo il file ma non essendoci alcun endpoint definito non vedremo effetti. Per definire l’endpoint ci avvaliamo della direttiva add_action che consente di stabilire le regole di invocazione del servizio e la logica con cui restituire il dato
1 2 3 4 5 6 |
add_action( 'vfplugin_api_init', function () { register_rest_route( 'vfplugin/v1', '/posts/', array( 'methods' => 'GET', 'callback' => 'api_get_posts', )); }); |
Il comando add action invoca la direttiva register_rest_route che stabilisce l’url da invocare, il metodo HTTP con cui invocare il servizio e la funzione da invocare). Nell’esempio fornito il plugin risponde alla chiamata GET del servizio http://www.valeriofinazzo.it/wp-json/vfplugin/v1/posts/.
Il metodo cakllback prevede di chiamare la routine api_get_posts che recupera tutti gli articoli presenti nel sito serializzati in formato json
1 2 3 4 5 6 7 |
function api_get_posts( $data ) { $all_posts = array(); $posts = get_posts(); if ( empty($posts) ) return null; return $posts; } |
La serializzazione viene gestita in modo trasparente da WordPress. Pertanto il servizio è attivo e non è richiesto altro.
A seguire il codice completo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php /* Plugin Name: Valerio Finazzo Plugin Plugin URI: http://www.valeriofinazzo.it/ Description: Plugin per la lettura dei posts Author: Valerio Finazzo Version: 1.0 */ add_action( 'rest_api_init', function () { register_rest_route( 'vfplugin/v1', '/posts/', array( 'methods' => 'GET', 'callback' => 'api_get_posts', )); }); function api_get_posts( $data ) { $all_posts = array(); $posts = get_posts(); if ( empty($posts) ) return null; return $posts; } ?> |