Nouveau

🚀 Offre lancement : -33% sur l’automatisation d’articles SEO pour les 5 premiers sites !

Obtenir mes articles SEO

API REST WordPress : le guide complet pour exploiter tout le potentiel de votre site

Vous avez probablement entendu parler de l’API REST WordPress sans trop savoir ce que c’est concrètement. Ou peut-être que vous savez que ça existe, mais vous vous demandez à quoi ça sert vraiment pour votre projet. Je vous comprends : quand j’ai commencé à l’utiliser il y a quelques années, j’étais moi aussi un peu perplexe 🤔

Aujourd’hui, c’est un outil que j’utilise quasi quotidiennement dans mes développements WordPress. Que ce soit pour connecter une application mobile à un site, automatiser des tâches, ou créer des interfaces ultra-réactives avec un framework JavaScript — l’API REST est devenue incontournable dans le développement WordPress moderne.

Dans cet article, je vais vous expliquer concrètement ce qu’est l’API REST WordPress, pourquoi elle change la donne, et comment en tirer parti pour vos projets. Pas de jargon incompréhensible, promis — juste du concret basé sur mon expérience de développeur freelance WordPress.

L’API REST WordPress, c’est quoi exactement ? 🧩

Imaginez WordPress comme un immense entrepôt rempli de données : vos articles, vos pages, vos médias, vos utilisateurs, vos produits WooCommerce… Tout est là, bien rangé dans la base de données. L’API REST, c’est la porte d’entrée universelle qui permet à n’importe quelle application extérieure de venir chercher ou déposer des données dans cet entrepôt.

Concrètement, c’est un ensemble d’URLs (qu’on appelle des « endpoints ») qui répondent à des requêtes HTTP. Vous tapez https://votre-site.fr/wp-json/wp/v2/posts dans votre navigateur, et hop : vous récupérez la liste de vos articles au format JSON. Pas besoin d’être connecté à l’admin WordPress, pas besoin de PHP — n’importe quelle technologie qui sait faire une requête HTTP peut communiquer avec votre site.

REST, JSON, endpoints… démystifions le vocabulaire

REST (Representational State Transfer) est un style d’architecture pour les APIs web. En gros, ça veut dire qu’on utilise les méthodes HTTP standard :

  • GET pour récupérer des données (lire un article)
  • POST pour créer de nouvelles données (publier un article)
  • PUT/PATCH pour modifier des données existantes
  • DELETE pour supprimer des données

JSON (JavaScript Object Notation) est le format dans lequel les données transitent. C’est léger, lisible par les humains et par les machines. Beaucoup plus pratique que le XML qu’on utilisait avant 😅

Un endpoint, c’est simplement l’URL à laquelle vous envoyez votre requête. Par exemple : /wp-json/wp/v2/posts pour les articles, /wp-json/wp/v2/pages pour les pages, /wp-json/wp/v2/media pour les médias.

Pourquoi WordPress a intégré une API REST ?

Historiquement, WordPress fonctionnait en circuit fermé : le PHP générait le HTML côté serveur, point final. Mais le web a évolué. Les applications mobiles, les Progressive Web Apps, les frameworks JavaScript comme React ou Vue.js, les objets connectés — tous ces nouveaux acteurs avaient besoin de communiquer avec WordPress sans passer par le bon vieux rendu PHP.

L’API REST a été intégrée nativement dans le cœur de WordPress depuis la version 4.7 (fin 2016). Et d’ailleurs, Gutenberg lui-même — l’éditeur de blocs que vous utilisez pour rédiger vos contenus — repose entièrement sur cette API. Quand vous créez un article dans l’admin, votre navigateur communique avec l’API REST en arrière-plan. C’est dire si c’est central.

Les cas d’utilisation concrets de l’API REST WordPress 🚀

La théorie c’est bien, mais voyons ce qu’on peut faire concrètement. Voici les cas que je rencontre le plus souvent dans mes missions.

1. Connecter une application mobile à WordPress

C’est le cas classique. Votre client a un site WordPress avec du contenu (articles, produits, événements) et veut une application mobile iOS/Android. Plutôt que de recréer toute la gestion de contenu dans l’app, on utilise l’API REST pour récupérer les données directement depuis WordPress.

L’avantage est énorme : le client continue de gérer son contenu dans l’admin WordPress qu’il connaît déjà, et l’app mobile se met à jour automatiquement. Zéro double saisie, zéro synchronisation manuelle. J’ai mis ça en place pour plusieurs clients qui avaient besoin d’une version mobile de leur catalogue produits — ça fonctionne comme une horloge 👌

2. Le WordPress « headless » : découpler le front du back

C’est la tendance qui monte depuis quelques années. Le principe : on garde WordPress comme CMS (back-office) pour gérer le contenu, mais on remplace complètement le front-end PHP par une application JavaScript (React, Next.js, Nuxt.js, Astro…). Le front récupère les données via l’API REST et les affiche à sa façon.

Pourquoi faire ça ? Principalement pour les performances. Un front-end en JavaScript statique ou server-side rendered peut être considérablement plus rapide qu’un thème WordPress traditionnel. On parle de temps de chargement divisés par 2 ou 3 dans certains cas.

Attention cependant : le headless n’est pas la solution miracle pour tout le monde. Ça complexifie l’architecture, ça coûte plus cher en développement, et vous perdez certains avantages de l’écosystème WordPress (plugins front-end, prévisualisation native, etc..)

3. Automatiser des tâches et des workflows

L’API REST permet d’automatiser énormément de choses. Quelques exemples que j’ai implémentés :

  • Publication automatique : un script qui crée des articles WordPress à partir de données structurées (flux RSS, tableur, base de données externe)
  • Synchronisation de contenu : entre plusieurs sites WordPress, ou entre WordPress et un ERP/CRM
  • Modération automatisée : un bot qui surveille les commentaires et applique des filtres personnalisés
  • Génération de rapports : extraction régulière de données (nombre d’articles, stats de contenu) pour des dashboards

C’est là que l’API REST révèle toute sa puissance. Tout ce que vous faisiez manuellement dans l’admin peut être scripté et automatisé. Ça fait gagner un temps fou sur les tâches répétitives 💪

4. Créer des interfaces dynamiques avec JavaScript

Sans aller jusqu’au full headless, vous pouvez utiliser l’API REST pour créer des composants dynamiques dans votre thème WordPress. Un moteur de recherche en temps réel, un système de filtres sans rechargement de page, un formulaire qui se met à jour instantanément…

C’est d’ailleurs ce que fait Gutenberg en natif : l’éditeur de blocs est une application React qui communique avec l’API REST. Quand vous développez des blocs Gutenberg sur mesure, vous utilisez cette même API sous le capot.

5. Intégrations multi-plateformes

Affichage de contenus WordPress sur un site en Angular, une borne interactive en magasin, un écran d’accueil, une newsletter dynamique… L’API REST permet de distribuer votre contenu WordPress partout. Le contenu est créé une seule fois dans WordPress, et consommé par autant de canaux que nécessaire.

Guide technique : utiliser l’API REST WordPress 🛠️

Passons à la pratique. Je vais vous montrer les bases pour interagir avec l’API REST, que vous soyez développeur ou simplement curieux de comprendre comment ça fonctionne.

Les endpoints natifs essentiels

WordPress expose par défaut une série d’endpoints. Voici les plus utilisés :

  • /wp-json/wp/v2/posts — Articles (lecture, création, modification)
  • /wp-json/wp/v2/pages — Pages
  • /wp-json/wp/v2/media — Médias (images, fichiers)
  • /wp-json/wp/v2/categories — Catégories
  • /wp-json/wp/v2/tags — Tags
  • /wp-json/wp/v2/users — Utilisateurs
  • /wp-json/wp/v2/comments — Commentaires
  • /wp-json/wc/v3/products — Produits WooCommerce (si installé)

Chaque endpoint accepte des paramètres pour filtrer les résultats. Par exemple, /wp-json/wp/v2/posts?categories=5&per_page=10&orderby=date récupère les 10 derniers articles de la catégorie 5. Simple et efficace.

Authentification : la clé pour écrire des données

En lecture (GET), la plupart des endpoints sont accessibles sans authentification — c’est du contenu public après tout. Mais dès que vous voulez créer, modifier ou supprimer des données, il faut vous identifier.

WordPress propose plusieurs méthodes d’authentification :

  • Application Passwords (natif depuis WP 5.6) : la méthode la plus simple et recommandée. Vous générez un mot de passe dédié dans votre profil utilisateur, et vous l’utilisez en authentification HTTP Basic. C’est ce que j’utilise le plus souvent pour les scripts et les intégrations.
  • JWT (JSON Web Tokens) : idéal pour les applications front-end. Le client se connecte une fois avec ses identifiants, reçoit un token, et utilise ce token pour les requêtes suivantes. Plus sécurisé pour les apps exposées publiquement.
  • OAuth 2.0 : pour les intégrations tierces qui ont besoin d’un accès délégué (par exemple, un service externe qui publie sur votre site). Plus complexe à mettre en place mais plus propre architecturalement.

Mon conseil : pour 80% des cas d’usage, les Application Passwords suffisent largement. Ne complexifiez pas inutilement votre stack d’authentification.

Exemple pratique : récupérer et créer des articles

Voici un exemple concret en JavaScript (fetch API) pour récupérer les 5 derniers articles d’un site WordPress :

// Récupérer les 5 derniers articles
fetch('https://votre-site.fr/wp-json/wp/v2/posts?per_page=5')
  .then(response => response.json())
  .then(posts => {
    posts.forEach(post => {
      console.log(post.title.rendered);
      console.log(post.excerpt.rendered);
    });
  });

Et pour créer un nouvel article (avec authentification) :

// Créer un article en brouillon
fetch('https://votre-site.fr/wp-json/wp/v2/posts', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Basic ' + btoa('user:application_password')
  },
  body: JSON.stringify({
    title: 'Mon article via l\'API',
    content: '<p>Contenu créé depuis l\'API REST !</p>',
    status: 'draft'
  })
})
.then(response => response.json())
.then(post => console.log('Article créé, ID:', post.id));

C’est aussi simple que ça. Évidemment, en production, on ajoutera de la gestion d’erreurs, du retry, et on stockera les credentials de manière sécurisée — mais le principe reste le même.

Créer des endpoints personnalisés avec register_rest_route 🎯

Les endpoints natifs couvrent les besoins de base, mais la vraie puissance de l’API REST, c’est la possibilité de créer vos propres endpoints. C’est comme ajouter de nouvelles portes à l’entrepôt, chacune donnant accès à des données spécifiques à votre projet.

Voici un exemple de custom endpoint qui renvoie les statistiques d’un site :

// Dans functions.php ou un plugin custom
add_action('rest_api_init', function() {
    register_rest_route('mon-site/v1', '/stats', [
        'methods'  => 'GET',
        'callback' => function() {
            return [
                'total_posts'    => wp_count_posts()->publish,
                'total_pages'    => wp_count_posts('page')->publish,
                'total_comments' => wp_count_comments()->approved,
                'total_users'    => count_users()['total_users'],
            ];
        },
        'permission_callback' => function() {
            return current_user_can('manage_options');
        }
    ]);
});

Quelques points importants quand vous créez des endpoints personnalisés :

  • Utilisez un namespace unique (ex: mon-site/v1) pour éviter les conflits avec d’autres plugins
  • Définissez toujours un permission_callback — c’est la sécurité de votre endpoint. Ne laissez jamais __return_true sur des endpoints qui exposent des données sensibles
  • Validez et sanitizez les paramètres avec les arguments validate_callback et sanitize_callback
  • Versionnez votre API (/v1/, /v2/…) pour pouvoir faire évoluer vos endpoints sans casser les intégrations existantes

Sécuriser l’API REST WordPress 🔒

L’API REST est activée par défaut sur tous les sites WordPress. C’est pratique, mais ça signifie aussi que n’importe qui peut interroger certains endpoints de votre site. Voici comment sécuriser tout ça proprement.

Limiter l’accès aux endpoints sensibles

Par défaut, l’endpoint /wp-json/wp/v2/users est accessible publiquement et liste les utilisateurs de votre site avec leurs identifiants. Pas idéal côté sécu 😬

Voici comment restreindre l’accès aux utilisateurs non connectés :

// Restreindre l'API REST aux utilisateurs connectés
add_filter('rest_authentication_errors', function($result) {
    if (true === $result || is_wp_error($result)) {
        return $result;
    }

    if (!is_user_logged_in()) {
        return new WP_Error(
            'rest_not_logged_in',
            'Accès réservé aux utilisateurs connectés.',
            ['status' => 401]
        );
    }

    return $result;
});

Attention : si votre site a un front-end qui consomme l’API (un bloc Gutenberg dynamique, un moteur de recherche AJAX, etc.), cette restriction trop large pourrait casser des fonctionnalités. Dans ce cas, ciblez plutôt les endpoints spécifiques que vous voulez protéger.

Rate limiting et protection contre les abus

Si votre API est exposée publiquement, pensez au rate limiting pour éviter qu’un script mal intentionné ne bombarde votre serveur de requêtes. Les solutions que j’utilise en pratique :

  • Cloudflare : les règles de rate limiting au niveau du CDN sont très efficaces et ne consomment pas les ressources de votre serveur
  • Nginx/Apache : configuration de rate limiting au niveau du serveur web
  • Plugin WordPress : des plugins comme Defender Pro (que j’utilise sur mes projets) permettent de configurer des limites

CORS : autoriser les bons domaines

Si votre front-end est hébergé sur un domaine différent de votre WordPress (cas du headless), vous devrez configurer les headers CORS (Cross-Origin Resource Sharing) pour autoriser les requêtes cross-domain :

// Configurer CORS pour un domaine spécifique
add_action('rest_api_init', function() {
    remove_filter('rest_pre_serve_request', 'rest_send_cors_headers');
    add_filter('rest_pre_serve_request', function($value) {
        header('Access-Control-Allow-Origin: https://mon-front.fr');
        header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
        header('Access-Control-Allow-Headers: Authorization, Content-Type');
        return $value;
    });
});

Ne mettez jamais Access-Control-Allow-Origin: * en production sur des endpoints authentifiés. C’est la porte ouverte à toutes les fenêtres 🔓

Optimiser les performances de l’API REST ⚡

L’API REST peut devenir un goulot d’étranglement si elle n’est pas bien optimisée. Voici les techniques que j’applique systématiquement sur mes projets.

Réduire la taille des réponses avec _fields

Par défaut, l’API REST renvoie TOUTES les données d’un post — y compris le contenu complet, les meta, les liens HATEOAS… Pour une liste d’articles, c’est beaucoup trop. Utilisez le paramètre _fields pour ne récupérer que ce dont vous avez besoin :

// Au lieu de ça (lourd) :
/wp-json/wp/v2/posts

// Faites ça (léger) :
/wp-json/wp/v2/posts?_fields=id,title,excerpt,featured_media,date

Sur un site avec beaucoup de contenu, cette simple optimisation peut diviser la taille des réponses par 5 ou 10. Ça se ressent directement sur le temps de chargement.

Mettre en cache les réponses API

Le cache est votre meilleur ami. Si vos données ne changent pas toutes les secondes, inutile de requêter la base de données à chaque appel API :

  • Transient API WordPress : pour mettre en cache les résultats de vos endpoints personnalisés directement dans WordPress
  • Cache HTTP : configurez les headers Cache-Control et ETag pour que le navigateur ou le CDN cache les réponses
  • Object cache : avec Redis ou Memcached pour des performances optimales côté serveur

Un bon hébergement WordPress avec Redis intégré fait une différence énorme sur les temps de réponse de l’API.

Exposer les champs ACF via l’API

Si vous utilisez ACF Pro (Advanced Custom Fields) — et si vous travaillez sérieusement avec WordPress, vous devriez — les champs personnalisés ne sont pas exposés par défaut dans l’API REST. Voici comment les rendre accessibles :

// Dans les réglages ACF Pro
// Groupe de champs > Réglages > Afficher dans l'API REST → Oui

// Ou programmatiquement :
add_filter('acf/settings/rest_api_format', function() {
    return 'standard';
});

// Les champs ACF apparaissent ensuite dans la clé "acf" de la réponse API
// GET /wp-json/wp/v2/posts/42
// → { ..., "acf": { "mon_champ": "valeur", "mon_image": { ... } } }

C’est une fonctionnalité que j’utilise systématiquement. Ça permet de construire des interfaces riches côté front tout en gardant la flexibilité d’ACF côté admin.

L’API REST vs WPGraphQL : que choisir ? 🤔

On me pose souvent la question : « Et WPGraphQL, c’est pas mieux que l’API REST ? » La réponse dépend de votre contexte.

L’API REST est native dans WordPress, stable, bien documentée, et couvre 90% des besoins. Elle est parfaite pour les intégrations simples, les scripts d’automatisation et les cas d’usage où vous savez exactement quelles données vous voulez récupérer.

WPGraphQL est un plugin qui ajoute une couche GraphQL à WordPress. Son avantage : vous pouvez récupérer exactement les données dont vous avez besoin en une seule requête, avec des relations imbriquées. Par exemple, un article avec son auteur, ses catégories, et les 3 articles similaires — tout ça en une seule requête au lieu de 4.

Mon avis après avoir utilisé les deux :

  • API REST : parfait pour les intégrations, l’automatisation, les sites classiques, et les développeurs qui veulent rester dans l’écosystème natif WordPress
  • WPGraphQL : intéressant pour les projets headless complexes avec beaucoup de données relationnelles, surtout si le front est en Next.js ou Gatsby

Dans la majorité de mes projets, l’API REST native suffit largement. Je ne rajoute WPGraphQL que quand la complexité des requêtes le justifie vraiment.

Les erreurs courantes à éviter avec l’API REST 😅

Après des années à travailler avec l’API REST WordPress, voici les erreurs que je vois (et que j’ai faites) le plus souvent :

1. Ne pas gérer la pagination

L’API REST renvoie maximum 100 résultats par page (10 par défaut). Si vous avez 500 articles et que vous faites un simple GET sans pagination, vous n’en récupérerez que 10. Utilisez les paramètres per_page et page, et vérifiez les headers X-WP-Total et X-WP-TotalPages dans la réponse.

2. Stocker les credentials en dur dans le front-end

J’ai vu ça plus d’une fois : un Application Password en clair dans le code JavaScript envoyé au navigateur. N’importe qui peut ouvrir les DevTools et le récupérer. Les credentials doivent rester côté serveur, toujours.

3. Oublier le permission_callback sur les endpoints custom

Depuis WordPress 5.5, si vous ne définissez pas de permission_callback, WordPress affiche un warning. Et à raison : un endpoint sans contrôle d’accès est une faille de sécurité potentielle. Même si votre endpoint ne renvoie que des données publiques, ajoutez explicitement 'permission_callback' => '__return_true'.

4. Faire trop de requêtes séquentielles

Récupérer la liste des articles, puis pour chacun récupérer l’auteur, puis les catégories, puis l’image à la une… C’est le syndrome « N+1 queries » version API. Utilisez le paramètre _embed pour inclure les données liées directement dans la réponse :

// Une seule requête avec toutes les données embarquées
/wp-json/wp/v2/posts?_embed&_fields=id,title,_embedded

Quand faire appel à un développeur pour l’API REST ? 🤝

L’API REST WordPress est puissante, mais elle nécessite des compétences techniques solides pour être exploitée correctement. Si vous avez besoin de :

  • Connecter votre WordPress à une application mobile ou un service externe
  • Créer des endpoints personnalisés pour des besoins métier spécifiques
  • Mettre en place une architecture headless performante
  • Automatiser des workflows complexes via l’API
  • Sécuriser et optimiser votre API REST existante

C’est exactement le type de missions que je réalise en tant que développeur freelance WordPress. Je travaille en full remote partout en France — que vous soyez dans le Nord, à Paris, ou à Marseille, on collabore à distance sans problème. Le premier contact se fait via mon formulaire de contact, on échange sur votre besoin, et je vous propose une solution adaptée.

L’API REST est un sujet technique qui demande de l’expérience pour éviter les pièges de sécurité et de performance. Mieux vaut investir dans un développement propre dès le départ que de patcher des problèmes ensuite 🎯

FAQ — API REST WordPress

Qu'est-ce que l'API REST WordPress ?

L'API REST WordPress est une interface de programmation intégrée nativement depuis la version 4.7. Elle permet à n'importe quelle application externe (mobile, JavaScript, script Python, etc.) de communiquer avec votre site WordPress via des requêtes HTTP standard pour lire, créer, modifier ou supprimer du contenu.

L'API REST WordPress est-elle sécurisée ?

Oui, à condition de la configurer correctement. Les endpoints en écriture nécessitent une authentification (Application Passwords, JWT ou OAuth). Il est recommandé de restreindre les endpoints sensibles, de configurer le CORS proprement et de mettre en place du rate limiting pour prévenir les abus.

Quelle est la différence entre l'API REST et WPGraphQL ?

L'API REST est native dans WordPress et utilise des endpoints fixes avec des requêtes HTTP classiques. WPGraphQL est un plugin qui permet de récupérer exactement les données souhaitées en une seule requête avec des relations imbriquées. L'API REST convient pour la majorité des projets ; WPGraphQL est plus adapté aux architectures headless complexes.

Peut-on utiliser l'API REST avec WooCommerce ?

Absolument ! WooCommerce dispose de sa propre API REST (endpoints /wc/v3/) qui permet de gérer les produits, commandes, clients et coupons. C'est idéal pour connecter votre boutique à des outils de gestion, des applications mobiles ou des dashboards personnalisés.

Combien coûte le développement d'une intégration API REST WordPress ?

Le coût dépend de la complexité du projet. Une intégration simple peut prendre quelques jours, tandis qu'une architecture headless complète peut nécessiter plusieurs semaines. En tant que développeur freelance WordPress, je propose un tarif adapté à chaque projet après évaluation du besoin.

Besoin d'un Développeur Web Freelance ?

Vous avez une question ? Un projet web ? Ce sera avec plaisir d'examiner votre demande.

Contactez-moi !