Qu’est ce qu’une API ?
Pour commencer, il faut comprendre qu’une API est simplement un accès « distant » à un système. Dans le cas de WordPress, c’est un accès qui permet d’accéder à du contenu de la base de données et d’exécuter des fonctionnalités à distance.
Une API (Applications Programming Interface) permet à des développeurs, de concevoir des scripts qui pourront s’authentifier sur WordPress pour y créer, modifier, supprimer ou récupérer des contenus dans le but d’automatiser des actions.
L’API WordPress, une nouveauté de la 4.7 ?
L’API de WordPress n’est pas une nouveauté. En effet, comme nous l’avions écrit dans notre article consacré à l’API XML-RPC de WordPress, une API est activée par défaut depuis WordPress 3.5.
La nouveauté est qu’il s’agit d’une nouvelle API de type REST, conçue avec les standards d’aujourd’hui et entièrement intégrée au cœur de WordPress sans avoir besoin d’installer un plugin. Ce qu’il faut également retenir c’est que cette nouvelle API a été repensée de zéro pour être compatible avec les nouveaux usages du web.
Comment activer l’API REST de WordPress ?
Bien que l’API REST soit native, elle ne fonctionne pas directement après une nouvelle installation de WordPress 4.7. Pour l’activer, il suffit d’activer la réécriture d’URL. Rassurez-vous, il est fort probable que vous ayez déjà activé cette option.
Vérifier que l’API fonctionne
Pour commencer à « consommer » l’API de votre WordPress, commençons par voir si elle fonctionne correctement.
Pour cela, rendez-vous simplement sur votre site à l’adresse /wp-json/ avec votre navigateur préféré. Vous devriez tomber sur une page qui ressemble à celle-là :
Cette page est une sorte de documentation pour un programme qui voudrait utiliser l’API.
A noter également que si vous êtes sur une version de WordPress 4.5 ou 4.6, vous risquez d’avoir une réponse mais celle-ci sera beaucoup plus courte.
En effet, l’API REST a été intégrée dès WordPress 4.5 celle-ci ne disposait d’aucune fonctionnalité sans l’installation d’un feature plugin. Si vous êtes dans ce cas, mettez à jour votre installation pour bénéficier des dernières fonctionnalités
Étudions la réponse de l’API REST
Par convention, il est courant de récupérer les données d’une API REST au format JSON. Sans surprise, c’est ce nouveau format que WordPress utilise dans cette nouvelle API (la précédente utilisait du XML).
Pour vous aider à y voir plus clair, voici la réponse de l’API vue précédemment, une fois formatée et en affichant uniquement le 1er niveau de réponse.
Vous voyez que l’API retourne un objet JSON comportant les propriétés suivantes :
- name : Le nom du site wordpress
- description : Le slogan du site wordpress
- url : L’adresse du site wordpress
- home : L’adresse de la home du site wordpress (la page du blog)
- routes : L’ensemble des actions proposées par cette API
Maintenant, regardons ce que propose l’API en ouvrant le contenu de routes :
Vous retrouverez ainsi la liste exhaustive des fonctionnalités proposées à travers cette API, avec le format des requêtes autorisées.
Détaillons quelques-unes de ces routes :
« / » La documentation complète de l’API (c’est ce que nous affichons ci-dessus)
« /oembed/1.0 » Liste des fonctionnalités du service oembed (il s’agit d’une API dans l’API réservée au réseaux sociaux que nous ne détaillerons pas ici
« /wp/v2 » Liste des fonctionnalités du cœur de WordPress.
« /wp/v2/posts » Méthode permettant la création d’un post, ainsi que la recherche de posts
« /wp/v2/posts/(?P<id>[\\d]+) » Méthode permettant la consultation, modification ou suppression d’un post existant, à partir de son ID
« /wp/v2/users » Méthode permettant la création d’un utilisateur, ainsi que la recherche d’utilisateurs.
« /wp/v2/users/(?P<id>[\\d]+) » Méthode permettant la consultation, modification ou suppression d’un utilisateur existant, à partir de son ID
« /wp/v2/users/me » Méthode permettant la consultation, modification du compte utilisateur actuellement connecté sur l’API
« /wp/v2/settings » Méthode permettant de consulter et modifier la configuration de WordPress
En complément, n’hésitez pas à regarder la documentation officielle de chaque ressource.
Exemple d’utilisation en PHP
Maintenant que vous avez découvert le cœur de l’API REST de WordPress, voyons un cas d’utilisation très basique en PHP.
Écrivons un script PHP capable d’interroger l’API d’un WordPress pour récupérer les informations publiques comme le nom ou la description (le slogan).
Commençons par écrire une fonction permettant de lancer une requête vers l’API. Attention, nous codons volontairement une fonction très simpliste (sans contrôle d’erreur) afin de ne pas complexifier l’exemple
1 2 3 4 5 6 7 8 |
<?php function get($resource){ $apiUrl = 'http://wixiweb.fr/wp-json'; $json = file_get_contents($apiUrl.$resource); $result = json_decode($json); return $result; } |
Vous pouvez utiliser cette fonction get() pour interroger n’importe quelles méthodes GET proposées par l’API.
1 2 3 4 5 6 7 8 9 10 11 |
<?php [..] // Interroge le service "/" $api = get('/'); // Affiche le nom du site Wordpress echo $api->name; // Affiche la description du site Wordpress echo $api->description; |
Félicitations ! Vous avez réussi à utiliser l’API REST de votre WordPress pour récupérer une information à distance. Alors, c’était plutôt facile, non ?
Récupérer la liste des pages via l’API
Pour continuer, essayons maintenant de récupérer la liste des pages
1 2 3 4 5 6 7 8 |
<?php [...] $pages = get('/wp/v2/pages'); foreach ($pages as $page) { echo 'Page ' . $page->id . ' : ' . $page->slug . '<br>'; } |
Page 77 : ssii-web-rouen
Page 76 : agence-web-rouen
Page 75 : developpeur-freelance-rouen
Page 8 : articles
Page 7 : actualites
Page 6 : realisations
Page 5 : contact
Page 4 : mentions-legales
Page 2 : accueil
Comme nous l’avons vu, la récupération d’information est très facile. Voyons maintenant comment passer des paramètres à notre requête pour avoir des résultats affinés.
Trier les résultats
Améliorons notre fonction get() pour qu’elle puisse gérer des paramètres à envoyer à l’API
1 2 3 4 5 6 7 8 |
<?php function get($resource, array $params = array()){ $apiUrl = 'http://wixiweb.fr/wp-json'; $json = file_get_contents($apiUrl.$resource.'?'.http_build_query($params)); $result = json_decode($json); return $result; } |
Regardons dans la documentation (ou dans le retour JSON), les paramètres acceptés par la méthode « wp/v2/pages« . A noter que si votre WordPress est en français, le retour JSON sera en français contrairement à la documentation en ligne qui est uniquement en anglais.
Pour effectuer un tri sur les résultats de notre recherche, vous devez passer 2 paramètres : orderby pour préciser la colonne de tri et order pour indiquer le sens.
1 2 3 4 5 6 7 8 9 10 11 |
<?php [...] $pages = get('/wp/v2/pages', array( 'orderby' => 'id', 'order' => 'asc', )); foreach ($pages as $page) { echo 'Page ' . $page->id . ' : ' . $page->slug . '<br>'; } |
Page 2 : accueil
Page 4 : mentions-legales
Page 5 : contact
Page 6 : realisations
Page 7 : actualites
Page 8 : articles
Page 75 : developpeur-freelance-rouen
Page 76 : agence-web-rouen
Page 77 : ssii-web-rouen
Filtrer les pages contenant un mot-clé
Nous appliquons maintenant un terme de recherche « Normandie » afin de retrouver uniquement les pages qui parlent de Normandie.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php [...] $pages = get('/wp/v2/pages', array( 'orderby' => 'id', 'order' => 'asc', 'search' => 'normandie', )); foreach ($pages as $page) { echo 'Page ' . $page->id . ' : ' . $page->slug . '<br>'; } |
Page 4 : mentions-legales
Page 8 : articles
Récupérer le résumé d’une page
Voyons comment récupérer l’excerpt de chaque article trouvé :
1 2 3 4 5 6 7 8 |
<?php [...] foreach ($pages as $page) { echo 'Page ' . $page->id . ' : ' . $page->slug . '<br>'; echo substr($page->excerpt->rendered, 0, 100).'...'; echo '<hr>'; } |
Page 4 : mentions-legales
Informations légales Propriété Le site diffusé à l’adresse http://wixiweb.fr est la pr…
Page 8 : articles
Hackhours : 28 heures pour concevoir et développer un projet Web’Trophées : Les meilleurs…
Aller plus loin avec l’Authentification
Actuellement, il semblerait que les méthodes demandant une authentification nécessite l’installation d’un plugin d’authentification.
Voici les plugins à utiliser en fonction du type d’authentification choisi:
- Oauth : https://github.com/bshaffer/oauth2-server-php (Merci Thomas)
- Application Password : https://github.com/georgestephanis/application-passwords
- Authentification Basic : https://github.com/WP-API/Basic-Auth
La méthode conseillée pour le moment semble être celle de l’Oauth. Nous compléterons l’article lorsque nous aurons fait des tests un peu plus poussés à ce sujet.
Conclusion : Notre avis sur l’API REST de WordPress
L’API REST est vraiment une bonne chose pour les développeurs utilisant WordPress. Cette API peut permettre à des startups de lancer de nouveaux services sans nécessairement avoir besoin d’installer un plugin, de permettre à des sociétés ayants plusieurs sites de croiser facilement le contenu entre eux, de permettre d’utiliser WordPress comme backoffice d’une application mobile pour l’édition du contenu, d’automatiser des tâches à distance sur un WordPress, etc..
Toutefois, nous trouvons dommage que cette API soit activée par défaut avec un accès public. En effet, elle va permettre à n’importe qui de récupérer très facilement tout le contenu public sans avoir besoin de webscrapper la page. Rappelons que WordPress est le CMS le plus utilisé au monde et que la version 4.7 a déjà été installée 4 millions de fois à 1 semaine de sa sortie. Nous risquons donc de voir arriver rapidement certaines dérives.
Alors, qu’avez-vous pensé de cet article ? Et que pensez-vous de l’arrivée de cette API ?
L’accès public par défaut relève de la faute de conception en effet. Comme d’habitude avec WordPress il y a un plugin pour ça : https://fr.wordpress.org/plugins/disable-json-api/. Disable Rest API permet d’interdire l’accès anonyme à l’API REST.
Bonjour Nicolas,
En effet… Je viens de l’installer mais il y des nombreux choix. Je ne suis pas sure … je coche tout ?
« REMARQUE IMPORTANTE: Cocher une case restaure simplement la fonctionnalité par défaut à un point de terminaison. D’autres authentifications et / ou autorisations peuvent toujours être requises pour l’accès, ou d’autres thèmes / plugins peuvent également affecter l’accès à ces points de terminaison. »
Merci pour le coup de main !
FiM
comment faire pour formater la reponse json avec angularsjs
merci.
je voudrais recevoir la liste de mes articles sur wordpress ke je veut faire communiquer a mon application j’utilise le framework ionic
Bonsoir, je ne sais pas si quelqu’un pourrait m’aider mais sait-on jamais… Je me lance tout juste dans le blogging et on m’a conseillé de travailler avec Windows Live Writer pour me faciliter la vie. Je l’ai téléchargé, bien qu’étant sous Windows 10. Mais je reste bloquée sur la boîte de communication qui me demande de me connecter à mon blog. Le logiciel n’arrive pas à se connecter et me dit que je n’utilise pas les bons identifiants (pourtant ce sont les bons). J’ai pensé que c’était peut-être parce que la case XML-RPC n’était pas cochée dans Réglages > Ecriture. Mais je ne peux pas la cocher puisqu’elle n’apparaît pas dans la version WordPress que j’utilise (4.7.1).
C’est alors qu’en cherchant, je suis tombée sur votre article qui explique que la fonction est déjà incluse. Du coup, je ne sais plus trop quoi faire. Utiliser un autre logiciel que Live Writer? Trouver une manipulation pour activer autrement la publication à distance? Il y a forcément une solution =)
Si quelqu’un arrive à m’aider sur ce coup-là, merci d’avance.
Bonjour Vanessa,
Merci pour votre commentaire. Effectivement, Windows Live Writer fonctionne en XML-RPC.
Toutefois, c’est un logiciel qui n’a pas été mis à jour depuis de très nombreuses années.
L’interface d’administration de WordPress n’étant pas si compliquée, je vous conseille plutôt de vous former à celle-ci plutôt que d’utiliser un logiciel pour administrer votre site.
De plus, Windows Live Writer ne prend pas en compte les plugins installés.
[…] Autre article en français : Utilisation de l’API REST, la nouvelle API de WordPress 4.7 […]
[…] En savoir + sur l’API XML-RPC de WordPress En savoir + sur l’API-REST de WordPress […]
[…] Créer une extension WordPress : Les premières étapes – Nicolas Juen. 10 conseils pour améliorer les performances WordPress. 50 bonnes raisons d'utiliser WordPress. Utilisation de l'API REST, la nouvelle API de WordPress 4.7. […]
[…] Attaque « brute force » sur les sites WordPress. Le 10 avril 2015: Cette courbe donne une idée du nombre d’attaques sur les sites WordPress utilisant l’extension Wordfence: environ 300 par secondes en ce moment. Combattez les attaques brute force sur votre site WordPress. Le malware SoakSoak s'attaque à WordPress. Pas moins de 100 000 sites WordPress sont victimes d’une campagne d’infection propagée par un malware, avance l’entreprise de sécurité Sucuri. Dénommé SoakSoak (à cause du nom de domaine de redirection utilisé, Soaksoak.ru), la bestiole exploite une vulnérabilité du plug-in RevSlider de la célèbre plate-forme Open Source de création de sites web et gestion de contenus. Backdoors à foison. WordPress SEO by Yoast <= 1.7.3.3 – Blind SQL Injection. Utilisation de l'API REST, la nouvelle API de WordPress 4.7. […]
[…] [6] Utilisation de l’API REST, la nouvelle API de WordPress 4.7 Un article d’introduction intéressant mais qui ne parle que peu de l’authentification […]
[…] Autre article en français : Utilisation de l’API REST, la nouvelle API de WordPress 4.7 […]
Bonjour,
Je sais pas si quelqu’un pourra m’aider mais voila, j’ai plusieurs utilisateurs dans wordpress avec des droits différents (que j’ai appliqué grâce au plugin User Access Manager) et j’utilise d’autres applications web sans wordpress (que j’ai mis dans des articles et on y accede en cliquant sur un bouton) mais qui necessite une authentification avec les mêmes identifiants que ceux de wordpress pour chaque utilisateur. Est-ce que cette API REST peut me permettre de faire le lien entre mon site wordpress et ces autres sites web ?
Merci d’avance
Article très intéressant, cette API donne vraiment beaucoup de possibilités. Pourriez vous indiquer la solution pour créer un post ?
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 ?
Je me permets de réitérer ce post, très utile et très bon tuto. Moi qui me ruais à chercher des détails sur cette API. Je suis aussi intéressé par la réponse à la question d’Adrien si quelqu’un a une idée.
Bonne continuation à tous !
[…] Utilisation de l'API REST, la nouvelle API de WordPress 4.7. Qu’est ce qu’une API ? Pour commencer, il faut comprendre qu’une API est simplement un accès « distant » à un système. Dans le cas de WordPress, c’est un accès qui permet d’accéder à du contenu de la base de données et d’exécuter des fonctionnalités à distance. Une API (Applications Programming Interface) permet à des développeurs, de concevoir des scripts qui pourront s’authentifier sur WordPress pour y créer, modifier, supprimer ou récupérer des contenus dans le but d’automatiser des actions. L’API WordPress, une nouveauté de la 4.7 ? L’API de WordPress n’est pas une nouveauté. En effet, comme nous l’avions écrit dans notre article consacré à l’API XML-RPC de WordPress, une API est activée par défaut depuis WordPress 3.5. […]
Bonsoir,
Une remarque sur l’accès à l’API. La fonction PHP « file_get_contents() » ne fonctionnera pas si le site demandé est en https (ce qui est fortement conseillé actuellement) et l’appelant n’envoie pas de « user_agent ». Dans ce cas on envoie le « user_agent » par la fonction PHP « ini_set ».
Sur mes applications j’en profite pour donner un « user_agent » assez original. En effet j’ai un plugin WordPress qui bloque les accès REST sauf si le bon « user_agent » est donné.
Bonjour Jean-Michel,
La fonction file_get_contents fonctionne sans problème en HTTPS.
Tu peux également utiliser le paramètre $context pour passer un user-agent en passant un stream : http://php.net/manual/fr/function.stream-context-create.php.
Bonjour Arnaud,
Je n’ai pas pu répondre à votre réponse (ni à mon message d’ailleurs) avec Firefox, aussi voici ma réponse sous la forme d’un nouveau commentaire.
Tout d’abord, je vous remercie de votre réactivité. Pour moi il m’a fallu plus de temps.
Donc, en effet, j’ai testé sur différents serveurs mutualisés et VPS et le « user_agent » n’était pas nécessaire. En revanche, sur mes serveurs locaux de mise au point ( qui sont chez moi mais accessibles depuis Internet), définir le « user_agent » est nécessaire. Donc pour éviter tout problème je maintiens l’appel de « ini_set() » dans mes sources.
Au passage, je signale qu’il est, bien entendu possible, de définir cette propriété dans le « php.ini ». Mais sur tous les serveurs où j’ai testé, elle contient la chaîne vide.
Bien cordialement, Jean-Michel
Merci pour toutes ses informations sur l’API.
Bonjour,
Merci pour le tuto.
j’ai une question: est-il possible de faire un get d’un article de WordPress avec toute sa mise en forme(css) , afin de l’intégrer dans une autre appli. Actuellement, le get renvoie du json.
Merci
Bonjour a tous,
je souhaite utilisé API REST mais comment l’utilisé en php sans installer une application avec composer ou autre, je cherche a comprend l’url exacte comme dans shopify.
pour envoyer un produit, interroger, modifier et les réponses reçu a la fin
d’avance merci