keyboard_arrow_up

Antisèche Drupal GraphQL

Rédigé par Sylvain Lavielle
Développeur web freelance expert Drupal sur Toulouse

Le 24/09/2019

Pour composer rapidement une requête GraphQL en utilisant le module Drupal GraphQL, Le modèle suivant peut servir de base :

query {

  # Query
  nodeQuery (
    # Paging settings here ...
    filter: {
      conditions:[
        # Filter conditions here ...
      ]
    }
    sort: [{
      # Sorting statements here ...
    }]
  )

  # Results
  {
    count
    entities { 
      # Entity values here ...
      # Fragments value here ...
    }
  } 
}

On pourra ensuite y ajouter au besoin les différentes variantes déclinées dans la suite de l'article.

Requête

Pagination des résultats

# Paging settings here ...
limit: 100
offset: 0

Conditionsbook

Conditions basiques

# Conditions here ...
{field: "type", value: "article", operator: EQUAL}
{field: "nid", value: "1", operator: EQUAL}

Tester les valeurs d'une entité référencée

# Conditions here ...
{field: "field_node_ref.entity.nid", value: "135", operator: EQUAL}

Ordonnancement

# Sorting statements here ...
field: "created"
direction: DESC

Résultats

Valeur de l'entité

Les valeurs que l'on peut exploiter à ce niveau sont communes à toutes les entités Drupal. Elle sont donc très génériques. Pour des valeurs plus spécifiques il faut utiliser les fragments

# entity values here ...
entityLabel # Title
entityId # entity id

Fragmentsbook

Pour les entités fieldable telles que le nodes, les champs sont dépendants du type de node. Il est donc nécessaire d'utiliser les fragments pour y accéder. Dans l'exemple ci-dessous NodeArticle fait référence au type de node "article". Pour les autres types de node, Il suffit d'adapter.

Exemple pour une image simple

# Fragments value here
... on NodeArticle {
  fieldImage {
    title
    alt
    width
    height
    url # Raw image url
  } 
}

Exemple pour une image avec style d'image

# Fragments value here
... on NodeArticle {
  fieldImage {
    title
    alt
    derivative(style: THUMBNAIL) {
      url
      width
      height
    }
  } 
}

Exemple pour une image dans une entité media

# Fragments value here
... on NodeArticle {
  fieldMediaImage {
    entity {
      ... on MediaImage {
        fieldImage {
          url
          width
          height
          alt
          title
        }
      }
    }
  }
}

Exemple pour un champ entity reference sur une taxonomie

# Fragments value here
... on NodeArticle {
  fieldTags {
    entity {
      ...on TaxonomyTerm {
        name
        tid
      }
    }
  }
}

 

 

Sujets abordés dans cet article