lumnik. / scénarios Tous les scénarios · English

Drupal: tout le site lu par JSON:API en une ligne

Objectif Lire tous les articles d'un site Drupal par son module JSON:API, sans écrire la pagination.

Drupal 11 expose ses contenus par JSON:API, un module de son cœur. La page suivante est dans links.next, que Drupal écrit comme un objet {"href": …}. lumnik a un preset pour ce standard:

manifests/lab-docker-compose.yml
# A company's Drupal site: its articles are read through Drupal's core JSON:API module.name: lumnik-drupal-siteservices:  drupal:    build: ../run/drupal    ports: ["127.0.0.1:${DRUPAL_PORT:-9260}:80"]   # this machine only: the admin password is the lab's
manifests/10-articles.yaml
apiVersion: connectors.lumnik.io/v1kind: Connectormetadata:  name: scenario-drupal-a  connector_type: rest-generic  scopes: [marketing]spec:  base_url: http://host.docker.internal:9260/jsonapi  endpoints:    - id: articles      path: /node/article?page[limit]=10&fields[node--article]=title,created,changed      method: GET      pagination: { kind: json-api }      target:        kind: hybrid        table: ext.scenario_drupal_a        unique_key: $.id        promote:          - { name: title, path: $.attributes.title, type: text }          - { name: created_at, path: $.attributes.created, type: timestamptz }          - { name: changed_at, path: $.attributes.changed, type: timestamptz }
hub
45 articles
Article 9
2026-10-30 20:52:51+00
Article 8
2026-10-30 20:52:51+00
Article 7
2026-10-30 20:52:51+00

preuves: replay.log, page-1.json, requests.txt, count.txt, newest.txt · transform v1

Limites

  • Le hub lit ce que l'API publie: un contenu non publié n'est pas lu sans compte.
  • Drupal ne publie pas de total par défaut: aucun témoin ne compare le compte lu au compte réel.
  • Avant icreated/lumnik#1638, le preset json-api échouait sur un lien objet; le rejeu de cette page tourne sur un hub corrigé.
  • Site Drupal de démonstration, articles synthétiques.

Site web · Drupal

Les contenus du site sont dans Drupal.

Il faut les lire, tous, sans développement.

Site Drupal de démonstration

Le problème

Chaque API pagine à sa façon.

  • Écrire la pagination à la main, c'est une source d'erreurs.
  • Drupal suit un standard: JSON:API.

Ce qui n'est pas modifié

Drupal reste tel quel.

  • Le module JSON:API de son cœur, activé.
  • Aucun module ajouté, aucun code.

Ce qu'il a fallu écrire

pagination: { kind: json-api }

On nomme le standard.

Un connecteur de 23 lignes.

Le rouge

Le rejeu a trouvé un défaut.

  • Drupal écrit le lien suivant comme un objet.
  • Le preset ne le suivait pas: corrigé (icreated/lumnik#1638).

Le vert

45 articles, 5 pages.

  • Chaque page suivante lue dans links.next.
  • Chaque article rangé sous son identifiant Drupal.

La limite

Le hub lit ce que l'API publie.

  • Un contenu non publié n'est pas lu sans compte.
  • Drupal ne publie pas de total: aucun témoin du compte.

Essayer

Le scénario se rejoue en local.

Un vrai Drupal 11, chaque étape publiée avec sa sortie.

Ce scénario tourne sur lumnik Open, gratuit et open source.

Essayer lumnik Open →