skip to Main Content

Comment utiliser l’API REST de WordPress

Cherchez-vous les meilleurs thèmes et plugins WordPress ?

Téléchargez les meilleurs plugins et thèmes WordPress sur Envato et créez facilement votre site web. Déjà plus de 49.720.000 de téléchargements. [EXCLUSIF]

Fonctionnalités après fonctionnalités, WordPress tend à laisser tomber le manteau de système de blogging pour revêtir celui de système de développement d’applications. Le premier pas sensible vers ce changement à été l’introduction des types de post personnalisés (custom post types) dans sa version 2.9. Aujourd’hui, la transformation se poursuit avec l’arrivée de l’API REST de WordPress. Dans ce tutoriel, je vous expliquerai ce qu’est l’API REST de WordPress et vous montrerai comment l’utiliser.

Pour faire simple, comprenez que L’API REST de WordPress, permet d’interagir avec le noyau de WordPress sans passer par son interface graphique. Cela signifie un découplage du noyau et de l’interface graphique. Avec cette API, vous pouvez par exemple créer un nouvel article, sans avoir à accéder au tableau de bord. L’API REST sera incluse dans le noyau à la sortie de la version 4.4 d’ici Décembre.

Etant donné la nature du sujet de ce tutoriel, une bonne connaissance du langage PHP et de WordPress est nécessaire.

Pour commencer avec l’API REST, vous aurez besoin du plugin REST API ainsi que de la dernière version de WordPress. Vous l’avez ? Si non, voyez pourquoi. Des notion sur l’API HTTP de WordPress seront de bonne compagnie pour effectuer les appels distants.

Comme projet pour ce tutoriel, nous créerons une installation locale de WordPress à partir de laquelle nous récupérerons des articles de notre site en ligne à travers l’API REST. Assurez vous bien d’avoir le plugin REST API installé et activé sur le site en ligne. Maintenant, créez un widget dans votre installation en local. En voici le code de base :

/**
 * Plugin Name: REST API Widget Essai
 * Plugin URI: http://le-site-de-votre-widget-ici.com
 * Description: Ce widget récupère des articles à l'aide de l'API REST
 * Version: 1.0
 * Author: Votre nom
 * Author URI: http://votre-site.com
 */

class Mes_Articles_Widget extends WP_Widget {

    public function __construct() {
        $widget_details = array(
            'classname' => 'widget-essai-rest-api',
            'description' => 'Un widget qui récupère des articles à l\'aide de l\'API REST depuis un autre site'
        );

        parent::__construct( 'widget-essai-rest-api', 'REST API Widget Essai', $widget_details );

    }

    public function form( $instance ) {
        $title = ( !empty( $instance['title'] ) ) ? $instance['title'] : '';
        ?>

        <p>
            <label for="<?php echo $this->get_field_name( 'title' ); ?>">Title: </label>
            <input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
        </p>

        <?php
    }
    public function widget( $args, $instance ) {
        echo $args['before_widget'];
        if( !empty( $instance['title'] ) ) {
            echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $args['after_title'];
        }
        // le code fonctionnel du widget ici
        echo $args['after_widget'];
    }
}
add_action( 'widgets_init', function(){
     register_widget( 'Mes_Articles_Widget' );
});

Dans le répertoire de plugin de votre site local, créez un dossier nommé widget-essai-rest-api. Dans ce dossier, créez un fichier nommé widget-essai-rest-api.php et collez y le code ci-dessus. Ce code contient l’entête des extensions (les commentaires en début de code) qui permet à WordPress de savoir qu’il s’agit d’une extension. Vient ensuite le code minimum de création d’un widget, augmenté de quelques lignes.  Nous mettrons plus l’accent sur la fonction widget(), car c’est à l’intérieur de celle-ci que se construit l’affichage du widget. Par conséquent, c’est à l’intérieur de cette fonction que nous ferons les appels à l’aide de l’HTTP API.

Récupérer les articles

Nous aurons besoin de quelques informations afin d’interroger le site en ligne. Ces dernières constituent en quelque sorte la question posé au noyau de WordPress de notre site en ligne. Ce sont le chemin de base de l’API, la route utilisée, la terminaison utilisée, les entêtes, et les paramètres.

Le chemin de base de l’API REST de WordPress est toujours /wp-json/wp/v2/. Ainsi, le chemin complet sera http://votre-domaine.com/wp-json/wp/v2/. La route utilisée pour récupérer les articles est /posts. Ce qui fait que la route complète pour les articles est http://votre-domaine.com/wp-json/wp/v2/posts.

Chaque route peut avoir un certain nombre de terminaisons, différenciées par la méthode HTTP utilisée. Ainsi la route d’un article peut être /posts/291. Cette route a 3 terminaisons :

GET : pour récupérer l’article
PUT : pour mettre à jour l’article
DELETE : pour supprimer l’article.

Divi : Le meilleur thème WordPress de tous les temps !

Avec plus de 554.000 téléchargements, Divi est le thème WordPress le plus populaire au monde. Il est complet, facile à utiliser et livré avec plus de 62 templates gratuits. [ Recommandé ]

En faisant usage de l’HTTP API et de la terminaison GET, récupérer les articles se résume en une ligne de code :

$response = wp_remote_get( 'http://mysite.com/wp-json/wp/v2/posts/' );

Si la réponse est un objet WP_Error, on termine l’exécution de notre fonction widget(), dans le cas contraire, on examine le contenu du corps de la réponse avec la fonction wp_remote_retrieve_body  à la recherche d’articles encodés au format JSON. Voilà à quoi ressemble alors la fonction widget()  :

 public function widget( $args, $instance ) {
    $response = wp_remote_get( 'http://mysite.com/wp-json/wp/v2/posts/' );

    if( is_wp_error( $response ) ) {
        return;
    }

    $posts = json_decode( wp_remote_retrieve_body( $response ) );

    if( empty( $posts ) ) {
        return;
    }   
    echo $args['before_widget'];

    if( !empty( $instance['title'] ) ) {
        echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $args['after_title'];
    }
    if( !empty( $posts ) ) {
        echo '<ul>';
        foreach( $posts as $post ) {
            echo '<li><a href="' . $post->link. '">' . $post->title->rendered . '</a></li>';
        }
        echo '</ul>';
    }
    echo $args['after_widget'];
}

Ce qui est intéressant dans cet exemple c’est qu’en remplaçant la fonction wp_remote_get par autre chose, cet exemple sortirai du cadre de WordPress. Cela signifie qu’on peut interroger le noyau de WordPress depuis n’importe quelle autre plateforme, que ce soit Joomla, Prestashop, Drupal, Android ou IOS. Vous pouvez donc créer une application mobile native connectée à un back office WordPress. L’API REST transforme WordPress en plateforme de développement d’applications.

Aller plus loin avec l’API REST

Interroger le noyau de WordPress dans le but d’interagir avec des données constitue 90% de son utilisation. Mais il reste encore quelques domaines qu’il serai intéressant d’explorer : la mise en cache de réponse, l’authentification et la découverte de services.

La mise en cache de réponse

Lorsqu’on récupère des informations comme les articles de notre exemple, il est de bonne mise de les mettre en cache, c’est à dire les copier quelque part sur le terminal appelant afin d’éviter d’autres appels pour les mêmes informations vers le serveur. Différentes approches existent pour réaliser cela incluant JP REST API CACHE, le plugins de cache, et les transients.

L’idée de transient est de recopier l’information en local avec une date d’expiration. Par défaut, la copie sera dans la base de données, mais certaines implémentations permettent la copie directement en mémoire, ce qui rend l’opération de restitution encore plus rapide. Les informations sont alors récupérées depuis la base de données locale jusqu’à leur expiration où, elles sont alors rappelées depuis le site distant. Voici une version modifiée de notre widget qui inclue la notion de transient (avec une nouvelle fonction) :

public function get_remote_posts() {
    $posts = get_transient( 'remote_posts' );
    if( empty( $posts ) ) {
        $response = wp_remote_get( 'http://votre-domaine.com/wp-json/wp/v2/posts/' );
        if( is_wp_error( $response ) ) {
            return array();
        }

        $posts = json_decode( wp_remote_retrieve_body( $response ) );

Créez Facilement votre Boutique en ligne

Téléchargez gratuitement WooCommerce, le meilleurs plugins e-commerce pour vendre vos produits physiques et numériques sur WordPress. [GRATUIT]

        if( empty( $posts ) ) {
            return array();
        }

        set_transient( 'remote_posts', $posts, HOUR_IN_SECONDS );
    }

    return $posts;
}

public function widget( $args, $instance ) {
    $posts = $this->get_remote_posts();

    if( empty( $posts ) ) {
        return;
    }
    
    echo $args['before_widget'];

    if( !empty( $instance['title'] ) ) {
        echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $args['after_title'];
    }

    echo '<ul>';
    foreach( $posts as $post ) {
        echo '<li><a href="' . $post->link. '">' . $post->title->rendered . '</a></li>';
    }
    echo '</ul>';

    echo $args['after_widget'];

}

L’authentification

Lorsque vous travaillez avec des ressources externes il est conseillé de s’identifier. Ceci se fait par le processus d’authentification. L’API REST vous donne deux méthodes pour vous identifier : l’authentification basique et OAuth.

L’authentification basique : des deux méthodes, celle ci est la plus simple. Elle consiste à envoyer votre nom d’utilisateur et votre mot de passe avec chaque requête, ce qui comporte de gros risques de sécurité. Pour cette raison, il faut le plus possible ne PAS l’utiliser en production.

Pour utiliser l’authentification basique, il faut installer et activer le plugin Basic-Auth. Ensuite, pour réaliser un appel authentifié, déclarez l’entête avec Basic <Base64 encoded username:password> et effectuez l’appel :

$headers = array (
    'Authorization' => 'Basic ' . base64_encode( 'username:password' ),
);

$response = wp_remote_request( 'http://votre-domaine.com/wp-json/wp/v2/posts/1234/', array(
    'method' => 'DELETE',
    'headers' => $headers
));

Prenez garde à cet exemple, car si vous l’essayez avec votre site, vous effacerez l’article qui possède l’ID 1234 si ce dernier existe.

OAuth : Cette méthode, encore obscure du point de vue de la documentation requiert que vous installiez et activiez le plugin OAuth1. La mise en œuvre de cette méthode d’authentification inclue l’installation et l’utilisation combinée de WP-CLI, une ligne de commande pour WordPress et de WP Client CLI. L’introduction d’interfaces de ligne de commande ne pose pas de problème en soi, mais c’est le manque de liste de commande qui fait hic.

La découverte de services

Une partie de l’apprentissage de toute API est de se familiariser avec ses options. Alors je vous recommande de consulter la partie sur la découverte de services de la documentation de l’API REST de WordPress. Vous y trouverez des méthodes pour interagir avec les articles, les types de post, les médias, les métadonnées ainsi que des irrégularités comme l’impossibilité de supprimer un utilisateur ou d’autres soucis mineurs. Retenez que c’est un travail en cours qui est tout de même déjà très intéressant.

Qui utilise l’API REST de WordPress ?

En toutes choses, il y a des pionniers, l’API REST de WordPress n’y fait aucune exception. Voici une courte liste des quelques compagnies qui font usage de l’API, malgré sa jeunesse :

Human made utilisent l’API pour créer des sites pour des clients qui veulent quelque chose de plus flexible pour le frontend.

WP Search Live est un plugin gratuit qui fait usage de l’API pour ses fonctions de recherche.

Editus est un plugin premium qui emploi l’API pour ses fonctions d’édition sur le frontend.

D’après Who’s using this thing? d’autres personnes et compagnies mettent en oeuvre l’API REST de WordPress pour concevoir des applications mobiles.

Malgré sa jeunesse, l’API REST de WordPress est très prometteuse en tant que fonctionnalité majeure dans la transformatio’n de WordPress en plateforme de développement d’applications.

Vous utilisez l’API REST de WordPress ? Nous aimerions avoir vos impressions sur le sujet. Comment trouvez-vous les opportunités qu’elle offre ? Partagez vos réactions avec nous dans notre section de commentaires.

Cet article comporte 4 commentaires
  1. Merci pour cet article, moi personnellement, j’ai un problème en ce moment avec l’API REST et Woocommerce. J’utilise le plugin de sécurité Secupress et quelques règles sur le .htaccess, depuis je rencontre des soucis avec la synchronisation LET IT BILL.

    Je suis passé de l’environnement de production Legacy à Stable.

    Une idée ?

  2. Bonjour, vous dites de declarer le header

    $headers = array (
    ‘Authorization’ => ‘Basic ‘ . base64_encode( ‘username:password’ ),
    );

    mais dans quel fichier svp j’ai un peu de mal tout comprendre désolé

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

Back To Top
11 Partages
Partagez10
Tweetez1
Enregistrer
WhatsApp