Apprendre à utiliser GraphQL avec AEM – Exemples de contenu et de requêtes learn-graphql-with-aem-sample-content-queries

Apprenez à utiliser GraphQL avec AEM pour pourvoir diffuser du contenu en mode découplé en explorant des exemples de contenu et de requêtes.

Pour prendre en main les requêtes GraphQL et leur fonctionnement avec les fragments de contenu AEM, il peut être utile de consulter quelques exemples pratiques.

Pour obtenir de l’aide à ce sujet, voir les éléments suivants :

GraphQL - Exemples de requêtes utilisant la structure de fragment de contenu type graphql-sample-queries-sample-content-fragment-structure

Consultez ces exemples de requêtes pour obtenir un aperçu de la création de requêtes, ainsi que des exemples de résultats.

NOTE
Selon votre instance, vous pouvez accéder directement à l’interface GraphiQL incluse dans l’API GraphQL d’AEM pour soumettre et tester des requêtes.
Vous pouvez accéder à l’éditeur de requêtes à partir de :
  • Outils > Général > Éditeur de requêtes GraphQL
  • directement ; par exemple, http://localhost:4502/aem/graphiql.html
NOTE
Les exemples de requêtes sont basés sur l’exemple de structure de fragment de contenu à utiliser avec GraphQL

Exemple de requête - Tous les schémas et types de données disponibles sample-all-schemes-datatypes

Renvoie tous les types pour tous les schémas disponibles.

Exemple de requête

{
  __schema {
    types {
      name
      description
    }
  }
}

Exemple de résultat

{
  "data": {
    "__schema": {
      "types": [
        {
          "name": "AdventureModel",
          "description": null
        },
        {
          "name": "AdventureModelArrayFilter",
          "description": null
        },
        {
          "name": "AdventureModelFilter",
          "description": null
        },
        {
          "name": "AdventureModelResult",
          "description": null
        },
        {
          "name": "AdventureModelResults",
          "description": null
        },
        {
          "name": "AllFragmentModels",
          "description": null
        },
        {
          "name": "ArchiveRef",
          "description": null
        },
        {
          "name": "ArrayMode",
          "description": null
        },
        {
          "name": "ArticleModel",
          "description": null
        },

...more results...

        {
          "name": "__EnumValue",
          "description": null
        },
        {
          "name": "__Field",
          "description": null
        },
        {
          "name": "__InputValue",
          "description": null
        },
        {
          "name": "__Schema",
          "description": "A GraphQL Introspection defines the capabilities of a GraphQL server. It exposes all available types and directives on the server, the entry points for query, mutation, and subscription operations."
        },
        {
          "name": "__Type",
          "description": null
        },
        {
          "name": "__TypeKind",
          "description": "An enum describing what kind of type a given __Type is"
        }
      ]
    }
  }
}

Exemple de requête - Toutes les informations sur toutes les villes sample-all-information-all-cities

Pour récupérer toutes les informations sur toutes les villes, vous pouvez utiliser la requête de base suivante :
Exemple de requête

{
  cityList {
    items
  }
}

À l’exécution, le système développe automatiquement la requête pour inclure tous les champs :

{
  cityList {
    items {
      _path
      name
      country
      population
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "_path": "/content/dam/sample-content-fragments/cities/basel",
          "name": "Basel",
          "country": "Switzerland",
          "population": 172258
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/berlin",
          "name": "Berlin",
          "country": "Germany",
          "population": 3669491
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/bucharest",
          "name": "Bucharest",
          "country": "Romania",
          "population": 1821000
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/san-francisco",
          "name": "San Francisco",
          "country": "USA",
          "population": 883306
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/san-jose",
          "name": "San Jose",
          "country": "USA",
          "population": 1026350
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/stuttgart",
          "name": "Stuttgart",
          "country": "Germany",
          "population": 634830
        },
        {
          "_path": "/content/dam/sample-content-fragments/cities/zurich",
          "name": "Zurich",
          "country": "Switzerland",
          "population": 415367
        }
      ]
    }
  }
}

Exemple de requête - Noms de toutes les villes sample-names-all-cities

Requête simple pour renvoyer le name de toutes les entrées dans le schéma city.

Exemple de requête

query {
  cityList {
    items {
      name
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "Basel"
        },
        {
          "name": "Berlin"
        },
        {
          "name": "Bucharest"
        },
        {
          "name": "San Francisco"
        },
        {
          "name": "San Jose"
        },
        {
          "name": "Stuttgart"
        },
        {
          "name": "Zurich"
        }
      ]
    }
  }
}

Exemple de requête – Un fragment de ville unique et spécifique sample-single-specific-city-fragment

Requête qui renvoie les détails d’une entrée de fragment unique vers un emplacement spécifique dans le référentiel.

Exemple de requête

{
  cityByPath (_path: "/content/dam/sample-content-fragments/cities/berlin") {
    item {
      _path
      name
      country
      population
     categories
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityByPath": {
      "item": {
        "_path": "/content/dam/sample-content-fragments/cities/berlin",
        "name": "Berlin",
        "country": "Germany",
        "population": 3669491,
        "categories": [
          "city:capital",
          "city:emea"
        ]
      }
    }
  }
}

Exemple de requête – Toutes les villes avec une variante nommée sample-cities-named-variation

Si vous créez une variante, appelée « Centre de Berlin » (berlin_centre), pour Berlin en tant que city, vous pouvez utiliser une requête afin de renvoyer des détails sur la variation.

Exemple de requête

{
  cityList (variation: "berlin_center") {
    items {
      _path
      name
      country
      population
      categories
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "_path": "/content/dam/sample-content-fragments/cities/berlin",
          "name": "Berlin",
          "country": "Germany",
          "population": 3669491,
          "categories": [
            "city:capital",
            "city:emea"
          ]
        }
      ]
    }
  }
}

Exemple de requête : noms de toutes les villes balisées en tant que coupures municipales sample-names-all-cities-tagged-city-breaks

Si vous :

  • créez différentes balises, nommées Tourism : Business, City Break, Holiday
  • et que vous les affectez à la variation principale de diverses instances City,

vous pouvez alors utiliser une requête pour renvoyer les détails de name et de tags de toutes les entrées balisées comme des Escapades en ville dans le schéma city.

Exemple de requête

query {
  cityList(
    includeVariations: true,
    filter: {_tags: {_expressions: [{value: "tourism:city-break", _operator: CONTAINS}]}}
  ){
    items {
      name,
      _tags
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "Berlin",
          "_tags": [
            "tourism:city-break",
            "tourism:business"
          ]
        },
        {
          "name": "Zurich",
          "_tags": [
            "tourism:city-break",
            "tourism:business"
          ]
        }
      ]
    }
  }
}

Exemple de requête - Détails complets relatifs au PDG et aux employés d’une entreprise sample-full-details-company-ceos-employees

Grâce à la structure des fragments imbriqués, cette requête renvoie tous les détails relatifs au PDG d’une entreprise et à tous ses employés.

Exemple de requête

query {
  companyList {
    items {
      name
      ceo {
        _path
        name
        firstName
        awards {
        id
          title
        }
      }
      employees {
       name
        firstName
       awards {
         id
          title
        }
      }
    }
  }
}

Exemples de résultats

{
  "data": {
    "companyList": {
      "items": [
        {
          "name": "Apple Inc.",
          "ceo": {
            "_path": "/content/dam/sample-content-fragments/persons/steve-jobs",
            "name": "Jobs",
            "firstName": "Steve",
            "awards": []
          },
          "employees": [
            {
              "name": "Marsh",
              "firstName": "Duke",
              "awards": []
            },
            {
              "name": "Caulfield",
              "firstName": "Max",
              "awards": [
                {
                  "id": "GB",
                  "title": "Gameblitz"
                }
              ]
            }
          ]
        },
        {
          "name": "Little Pony, Inc.",
          "ceo": {
            "_path": "/content/dam/sample-content-fragments/persons/adam-smith",
            "name": "Smith",
            "firstName": "Adam",
            "awards": []
          },
          "employees": [
            {
              "name": "Croft",
              "firstName": "Lara",
              "awards": [
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            },
            {
              "name": "Slade",
              "firstName": "Cutter",
              "awards": [
                {
                  "id": "GB",
                  "title": "Gameblitz"
                },
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            }
          ]
        },
        {
          "name": "NextStep Inc.",
          "ceo": {
            "_path": "/content/dam/sample-content-fragments/persons/steve-jobs",
            "name": "Jobs",
            "firstName": "Steve",
            "awards": []
          },
          "employees": [
            {
              "name": "Smith",
              "firstName": "Joe",
              "awards": []
            },
            {
              "name": "Lincoln",
              "firstName": "Abraham",
              "awards": []
            }
          ]
        }
      ]
    }
  }
}

Exemple de Requête - Toutes les personnes qui portent le nom « Jobs » ou « Smith » sample-all-persons-jobs-smith

Une requête qui filtre toutes les persons qui portent le nom Jobs ou Smith.

Exemple de requête

query {
  personList(filter: {
    name: {
      _logOp: OR
      _expressions: [
        {
          value: "Jobs"
        },
        {
          value: "Smith"
        }
      ]
    }
  }) {
    items {
      name
      firstName
    }
  }
}

Exemples de résultats

{
  "data": {
    "personList": {
      "items": [
        {
          "name": "Smith",
          "firstName": "Adam"
        },
        {
          "name": "Smith",
          "firstName": "Joe"
        },
        {
          "name": "Jobs",
          "firstName": "Steve"
        }
      ]
    }
  }
}

Exemple de requête - Toutes les personnes qui ne portent pas le nom « Jobs » sample-all-persons-not-jobs

Une requête qui filtre toutes les persons qui portent le nom Jobs ou Smith.

Exemple de requête

query {
  personList(filter: {
    name: {
      _expressions: [
        {
          value: "Jobs"
          _operator: EQUALS_NOT
        }
      ]
    }
  }) {
    items {
      name
      firstName
    }
  }
}

Exemples de résultats

{
  "data": {
    "personList": {
      "items": [
        {
          "name": "Lincoln",
          "firstName": "Abraham"
        },
        {
          "name": "Smith",
          "firstName": "Adam"
        },
        {
          "name": "Slade",
          "firstName": "Cutter"
        },
        {
          "name": "Marsh",
          "firstName": "Duke"
        },
        {
          "name": "Smith",
          "firstName": "Joe"
        },
        {
          "name": "Croft",
          "firstName": "Lara"
        },
        {
          "name": "Caulfield",
          "firstName": "Max"
        }
      ]
    }
  }
}

Exemple de requête - Toutes les aventures dont _path commence par un préfixe spécifique sample-wknd-all-adventures-cycling-path-filter

Toutes les adventures_path commence par un préfixe spécifique (/content/dam/wknd/en/adventures/cycling).

Exemple de requête

query {
  adventureList(
    filter: {
      _path: {
        _expressions: [
        {
          value: "/content/dam/wknd/en/adventures/cycling"
         _operator: STARTS_WITH
        }]
       }
    })
    {
    items {
      _path
    }
  }
}

Exemples de résultats

{
  "data": {
    "adventureList": {
      "items": [
        {
          "_path": "/content/dam/wknd/en/adventures/cycling-southern-utah/cycling-southern-utah"
        },
        {
          "_path": "/content/dam/wknd/en/adventures/cycling-tuscany/cycling-tuscany"
        }
      ]
    }
  }
}

Exemple de requête - Toutes les villes situées en Allemagne ou en Suisse et dont la population se situe entre 400 000 et 999 999 sample-all-cities-d-ch-population

Ici, le filtrage concerne une combinaison de champs. Un opérateur AND (implicite) est utilisé pour sélectionner la plage population, tandis qu’un opérateur OR (explicite) est utilisé pour sélectionner les villes requises.

Exemple de requête

query {
  cityList(filter: {
    population: {
      _expressions: [
        {
          value: 400000
          _operator: GREATER_EQUAL
        }, {
          value: 1000000
          _operator: LOWER
        }
      ]
    },
    country: {
      _logOp: OR
      _expressions: [
        {
          value: "Germany"
        }, {
          value: "Switzerland"
        }
      ]
    }
  }) {
    items {
      name
      population
      country
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "Stuttgart",
          "population": 634830,
          "country": "Germany"
        },
        {
          "name": "Zurich",
          "population": 415367,
          "country": "Switzerland"
        }
      ]
    }
  }
}

Exemple de requête - Toutes les villes dont le nom contient SAN, indépendamment de la casse sample-all-cities-san-ignore-case

Cette requête interroge toutes les villes dont le nom contient SAN, indépendamment de la casse.

Exemple de requête

query {
  cityList(filter: {
    name: {
      _expressions: [
        {
          value: "SAN"
          _operator: CONTAINS
          _ignoreCase: true
        }
      ]
    }
  }) {
    items {
      name
      population
      country
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA"
        },
        {
          "name": "San Jose",
          "population": 1026350,
          "country": "USA"
        }
      ]
    }
  }
}

Exemple de requête - Filtrage sur un tableau avec un élément qui doit apparaître au moins une fois sample-array-item-occur-at-least-once

Cette requête effectue un filtrage sur un tableau avec un élément (city:na) qui doit se produire au moins une fois.

Exemple de requête

query {
  cityList(filter: {
    categories: {
      _expressions: [
        {
          value: "city:na"
          _apply: AT_LEAST_ONCE
        }
      ]
    }
  }) {
    items {
      name
      population
      country
      categories
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA",
          "categories": [
            "city:beach",
            "city:na"
          ]
        },
        {
          "name": "San Jose",
          "population": 1026350,
          "country": "USA",
          "categories": [
            "city:na"
          ]
        }
      ]
    }
  }
}

Exemple de requête - Filtrage sur une valeur de tableau exacte sample-array-exact-value

Cette requête effectue un filtrage sur une valeur de tableau exacte.

Exemple de requête

query {
  cityList(filter: {
    categories: {
      _expressions: [
        {
          values: [
            "city:beach",
            "city:na"
          ]
        }
      ]
    }
  }) {
    items {
      name
      population
      country
      categories
    }
  }
}

Exemples de résultats

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA",
          "categories": [
            "city:beach",
            "city:na"
          ]
        }
      ]
    }
  }
}

Exemple de requête pour les fragments de contenu imbriqués - Toutes les entreprises dont au moins un employé porte le nom « Smith » sample-companies-employee-smith

Cette requête illustre le filtrage pour toute person portant le name « Smith », qui renvoie des informations provenant de deux fragments imbriqués – company et employee.

Exemple de requête

query {
  companyList(filter: {
    employees: {
      _match: {
        name: {
          _expressions: [
            {
              value: "Smith"
            }
          ]
        }
      }
    }
  }) {
    items {
      name
      ceo {
        name
        firstName
      }
      employees {
        name
        firstName
      }
    }
  }
}

Exemples de résultats

{
  "data": {
    "companyList": {
      "items": [
        {
          "name": "NextStep Inc.",
          "ceo": {
            "name": "Jobs",
            "firstName": "Steve"
          },
          "employees": [
            {
              "name": "Smith",
              "firstName": "Joe"
            },
            {
              "name": "Lincoln",
              "firstName": "Abraham"
            }
          ]
        }
      ]
    }
  }
}

Exemple de requête pour les fragments de contenu imbriqués - Toutes les entreprises dont tous les employés ont remporté le prix « Gamestar » sample-all-companies-employee-gamestar-award

Cette requête illustre le filtrage de trois fragments imbriqués : company, employee et award.

Exemple de requête

query {
  companyList(filter: {
    employees: {
      _apply: ALL
      _match: {
        awards: {
          _match: {
            id: {
              _expressions: [
                {
                  value: "GS"
                  _operator:EQUALS
                }
              ]
            }
          }
        }
      }
    }
  }) {
    items {
      name
      ceo {
        name
        firstName
      }
      employees {
        name
        firstName
        awards {
          id
          title
        }
      }
    }
  }
}

Exemples de résultats

{
  "data": {
    "companyList": {
      "items": [
        {
          "name": "Little Pony, Inc.",
          "ceo": {
            "name": "Smith",
            "firstName": "Adam"
          },
          "employees": [
            {
              "name": "Croft",
              "firstName": "Lara",
              "awards": [
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            },
            {
              "name": "Slade",
              "firstName": "Cutter",
              "awards": [
                {
                  "id": "GB",
                  "title": "Gameblitz"
                },
                {
                  "id": "GS",
                  "title": "Gamestar"
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

Exemple de requête pour les métadonnées – Liste des métadonnées des prix intitulés GB sample-metadata-awards-gb

Cette requête illustre le filtrage de trois fragments imbriqués : company, employee et award.

Exemple de requête

query {
  awardList(filter: {
      id: {
        _expressions: [
          {
            value:"GB"
          }
        ]
    }
  }) {
    items {
      _metadata {
        stringMetadata {
          name,
          value
        }
      }
      id
      title
    }
  }
}

Exemples de résultats

{
  "data": {
    "awardList": {
      "items": [
        {
          "_metadata": {
            "stringMetadata": [
              {
                "name": "title",
                "value": "Gameblitz Award"
              },
              {
                "name": "description",
                "value": ""
              }
            ]
          },
          "id": "GB",
          "title": "Gameblitz"
        }
      ]
    }
  }
}

Exemples de requêtes utilisant le projet WKND sample-queries-using-wknd-project

Ces exemples de requêtes sont basés sur le projet WKND. Il possède les caractéristiques suivantes :

  • les modèles de fragments de contenu disponibles sous :
    http://<hostname>:<port>/libs/dam/cfm/models/console/content/models.html/conf/wknd

  • les fragments de contenu (et autres contenus) disponibles sous :
    http://<hostname>:<port>/assets.html/content/dam/wknd/en
    http://<hostname>:<port>/assets.html/content/dam/wknd-shared/en

NOTE
Les résultats pouvant être volumineux, ils ne sont pas reproduits ici.

Exemple de requête pour tous les fragments de contenu d’un modèle donné avec les propriétés spécifiées sample-wknd-all-model-properties

Cet exemple de requête interroge :

  • à la recherche de tous les fragments de contenu de type article ;
  • avec le _path et les propriétés du authorFragment.

Exemple de requête

{
  articleList {
    items {
      _path
      authorFragment {
        _path
        firstName
        lastName
        birthDay
      }
    }
 }
}

Exemple de requête de métadonnées sample-wknd-metadata

Cette requête interroge :

  • à la recherche de tous les fragments de contenu de type adventure ;
  • metadata

Exemple de requête

{
  adventureList {
    items {
      _path,
      _metadata {
        stringMetadata {
          name,
          value
        }
        stringArrayMetadata {
          name,
          value
        }
        intMetadata {
          name,
          value
        }
        intArrayMetadata {
          name,
          value
        }
        floatMetadata {
          name,
          value
        }
        floatArrayMetadata {
          name,
          value
        }
        booleanMetadata {
          name,
          value
        }
        booleanArrayMetadata {
          name,
          value
        }
        calendarMetadata {
          name,
          value
        }
        calendarArrayMetadata {
          name,
          value
        }
      }
    }
  }
}

Exemple de requête pour un fragment de contenu unique d’un modèle donné sample-wknd-single-content-fragment-of-given-model

Cet exemple de requête interroge :

  • à la recherche d’un fragment de contenu unique de type article avec un chemin spécifique ;

    • à l’intérieur de ce fragment, tous les formats de contenu :

      • HTML
      • Texte (Markdown)
      • Texte brut
      • JSON

Exemple de requête

{
  articleByPath(_path: "/content/dam/wknd-shared/en/magazine/alaska-adventure/alaskan-adventures") {
    item {
        _path
        authorFragment {
          _path
          firstName
          lastName
          birthDay
        }
        main {
          html
          markdown
          plaintext
          json
        }
    }
  }
}

Exemple de requête pour un modèle de fragment de contenu à partir d’un modèle sample-wknd-content-fragment-model-from-model

Cet exemple de requête interroge :

  • à la recherche d’un seul fragment de contenu ;
    • les détails du modèle de fragment de contenu sous-jacent.

Exemple de requête

{
  adventureByPath(_path: "/content/dam/wknd-shared/en/magazine/western-australia/western-australia-by-camper-van") {
    item {
      _path
      title
      _model {
        _path
        title
      }
    }
  }
}

Exemple de requête pour un fragment de contenu imbriqué - Type de modèle unique sample-wknd-nested-fragment-single-model

Cette requête interroge :

  • à la recherche d’un fragment de contenu unique de type article avec un chemin spécifique ;
    • à l’intérieur de ce fragment, le chemin d’accès et l’auteur ou autrice du fragment référencé (imbriqué)
NOTE
Le champ referencearticle a le type de données fragment-reference.

Exemple de requête

{
  adventureByPath(_path: "/content/dam/wknd-shared/en/magazine/western-australia/western-australia-by-camper-van") {
    item {
      _path
      title
      _model {
        _path
        title
      }
    }
  }
}

Exemple de requête pour un fragment de contenu imbriqué - Type de modèle multiple sample-wknd-nested-fragment-multiple-model

Type de modèle référencé unique

Cette requête interroge :

  • à la recherche de différents fragments de contenu de type bookmark ;
    • avec des références de fragments à d’autres fragments du type de modèle spécifique Article.
NOTE
Le champ fragments présente le type de données fragment-reference, avec le modèle Article sélectionné. La requête renvoie fragments sous la forme d’un tableau de [Article].
{
  bookmarkList {
    items {
        fragments {
          _path
          author
        }
     }
  }
}

Types de modèle référencés multiples

Cette requête interroge :

  • à la recherche de différents fragments de contenu de type bookmark ;
    • avec des références de fragments à d’autres fragments de types de modèles spécifiques Article et Adventure.
NOTE
Le champ fragments présente le type de données fragment-reference, avec les modèles Article, Adventure sélectionnés. La requête renvoie fragments sous la forme d’un tableau de [AllFragmentModels], qui est déréférencé avec le type d’union.
{
  bookmarkList {
    items {
        fragments {
          ... on ArticleModel {
            _path
            author
          }
          ... on AdventureModel {
            _path
            adventureTitle
          }
        }
     }
  }
}

Exemple de requête pour un fragment de contenu d’un modèle spécifique avec des références de contenu sample-wknd-fragment-specific-model-content-reference

Cette requête possède deux versions :

  1. Pour renvoyer toutes les références au contenu.
  2. Pour renvoyer les références de contenu spécifiques de type attachments

Ces requêtes interrogent :

  • à la recherche de différents fragments de contenu de type bookmark ;
    • avec des références de contenu à d’autres fragments.

Exemple de requête pour plusieurs fragments de contenu avec des références prérécupérées sample-wknd-multiple-fragments-prefetched-references

La requête suivante renvoie toutes les références de contenu en utilisant _references :

{
  bookmarkList {
     _references {
         ... on ImageRef {
          _path
          type
          height
        }
        ... on MultimediaRef {
          _path
          type
          size
        }
        ... on DocumentRef {
          _path
          type
          author
        }
        ... on ArchiveRef {
          _path
          type
          format
        }
    }
    items {
        _path
    }
  }
}

Exemple de requête pour plusieurs fragments de contenu avec pièces jointes sample-wknd-multiple-fragments-attachments

La requête suivante renvoie toutes les attachments, un champ spécifique (sous-groupe) de type content-reference :

NOTE
Le champ attachments présente le type de données content-reference, avec différents formulaires sélectionnés.
{
  bookmarkList {
    items {
      attachments {
        ... on PageRef {
          _path
          type
        }
        ... on ImageRef {
          _path
          width
        }
        ... on MultimediaRef {
          _path
          size
        }
        ... on DocumentRef {
          _path
          author
        }
        ... on ArchiveRef {
          _path
          format
        }
      }
    }
  }
}

Exemple de requête pour un fragment de contenu unique avec référence en ligne RTE sample-wknd-single-fragment-rte-inline-reference

Cette requête interroge :

  • à la recherche d’un fragment de contenu unique de type bookmark avec un chemin spécifique ;
    • à l’intérieur de cela, les références intégrées RTE.
NOTE
Les références en ligne RTE sont alimentées dans _references.

Exemple de requête

{
  bookmarkByPath(_path: "/content/dam/wknd/en/bookmarks/skitouring") {
    item {
      _path
      description {
        json
      }
    }
    _references {
      ... on ArticleModel {
        _path
      }
      ... on AdventureModel {
        _path
      }
      ... on ImageRef {
        _path
      }
      ... on MultimediaRef {
        _path
      }
      ... on DocumentRef {
        _path
      }
      ... on ArchiveRef {
        _path
      }
    }
  }
}

Exemple de requête pour une variation de fragment de contenu unique d’un modèle donné sample-wknd-single-fragment-given-model

Cette requête interroge :

  • à la recherche d’un fragment de contenu unique de type author avec un chemin spécifique ;
    • à l’intérieur de ce fragment, les données sont liées à la variation : another

Exemple de requête

{
  authorByPath(_path: "/content/dam/wknd-shared/en/contributors/ian-provo", variation: "another") {
    item {
        _path
        _variation
        firstName
        lastName
        birthDay
    }
  }
}

Exemple de requête pour une variante nommée de plusieurs fragments de contenu d’un modèle donné sample-wknd-variation-multiple-fragment-given-model

Cette requête interroge :

  • à la recherche de fragments de contenu de type author avec une variation spécifique : another
NOTE
Cette requête permet d’afficher la version de secours pour les fragments de contenu qui n’ont pas de Variation du nom spécifié.

Exemple de requête

{
  authorList(variation: "another") {
    items {
        _path
        _variation
        firstName
        lastName
        birthDay
    }
  }
}

Exemple de requête pour plusieurs fragments de contenu et leurs variations dans un modèle donné sample-wknd-multiple-fragment-variations-given-model

Cette requête interroge :

  • les fragments de contenu de type article et toutes les variations.

Exemple de requête

query {
  articleList(
    includeVariations: true  ){
    items {
      _variation
      _path
      _tags
      _metadata {
        stringArrayMetadata {
          name
          value
        }
      }
    }
  }
}

Exemple de requête pour les variations de fragments de contenu dans un modèle donné auxquelles est associée une balise spécifique. sample-wknd-fragment-variations-given-model-specific-tag

Cette requête interroge :

  • les fragments de contenu de type article avec une ou plusieurs variations comportant la balise WKND : Activity / Hiking.

Exemple de requête

{
  articleList(
    includeVariations: true,
    filter: {_tags: {_expressions: [{value: "wknd:activity/hiking", _operator: CONTAINS}]}}
  ){
    items {
      _variation
      _path
      _tags
      _metadata {
        stringArrayMetadata {
          name
          value
        }
      }
    }
  }
}

Exemple de requête pour plusieurs fragments de contenu d’un paramètre régional donné sample-wknd-multiple-fragments-given-locale

Cette requête interroge :

  • à la recherche de fragments de contenu de type article dans le paramètre régional fr

Exemple de requête

{
  articleList(_locale: "fr") {
    items {
      _path
      authorFragment {
        _path
        firstName
        lastName
        birthDay
      }
      main {
        html
        markdown
        plaintext
        json
      }
    }
  }
}

Exemple de requête de liste utilisant offset et limit sample-list-offset-limit

Cette requête interroge :

  • pour la page de résultats contenant jusqu’à cinq articles, en commençant par le cinquième article de la liste de résultats complète.

Exemple de requête

{
   articleList(offset: 5, limit: 5) {
    items {
      authorFragment {
        _path
        firstName
        lastName
        birthDay
      }
      _path
    }
  }
}

Exemple de requête de pagination utilisant first et after sample-pagination-first-after

Cette requête interroge :

  • pour la page de résultats contenant jusqu’à cinq aventures, en commençant par l’élément de curseur donné de la liste de résultats complète.

Exemple de requête

{
    adventurePaginated(first: 5, after: "ODg1MmMyMmEtZTAzMy00MTNjLThiMzMtZGQyMzY5ZTNjN2M1") {
        edges {
          cursor
          node {
            title
          }
        }
        pageInfo {
          endCursor
          hasNextPage
        }
    }
}

Exemple de requête avec filtrage par identifiant _tags et excluant des variations sample-filtering-tag-not-variations

Cette requête interroge :

  • pour les fragments de contenu de type vehicle comportant la balise big-block
  • excluant des variations

Exemple de requête

query {
  vehicleList(
    filter: {
    _tags: {
      _expressions: [
        {
          value: "vehicles:big-block"
          _operator: CONTAINS
        }
      ]
    }
  }) {
    items {
      _variation
      _path
      type
      name
      model
      fuel
      _tags
    }
  }
}

Exemple de requête avec filtrage par identifiant _tags et incluant des variations sample-filtering-tag-with-variations

Cette requête interroge :

  • pour les fragments de contenu de type vehicle comportant la balise big-block
  • incluant des variations

Exemple de requête

{
  enginePaginated(after: "SjkKNmVkODFmMGQtNTQyYy00NmQ4LTljMzktMjhlNzQwZTY1YWI2Cmo5", first: 9 ,includeVariations:true, sort: "name",
    filter: {
    _tags: {
      _expressions: [
        {
          value: "vehicles:big-block"
          _operator: CONTAINS
        }
      ]
    }
  }) {
    edges{
    node {
        _variation
        _path
        name
        type
        size
        _tags
        _metadata {
          stringArrayMetadata {
            name
            value
          }
        }
    }
      cursor
    }
  }
}

Exemple de structure de fragment de contenu (utilisée avec GraphQL) content-fragment-structure-graphql

Les exemples de requêtes sont basés sur la structure suivante, qui utilise :

Exemples de modèles de fragments de contenu (schémas) sample-content-fragment-models-schemas

Pour les exemples de requêtes, nous utiliserons les modèles de contenu suivants et leurs relations mutuelles (références ->) :

Entreprise model-company

Les champs de base définissant l’entreprise sont les suivants :

Nom du champ
Type de données
Référence
Nom de l’entreprise
Texte monoligne
PDG
Référence du fragment (unique)
Personne
Employés
Référence du fragment (champ multiple)
Personne

Personne model-person

Champs définissant une personne, qui peut également être un employé :

Nom du champ
Type de données
Référence
Nom
Texte monoligne
Prénom
Texte monoligne
Distinctions
Référence du fragment (champ multiple)
Distinction

Distinction model-award

Les champs définissant une distinction sont les suivants :

Nom du champ
Type de données
Référence
Raccourci/ID
Texte monoligne
Titre
Texte monoligne

Ville model-city

Les champs permettant de définir une ville sont les suivants :

Nom du champ
Type de données
Référence
Nom
Texte monoligne
Pays
Texte monoligne
Population
Nombre
Catégories
Balises

Exemples de fragments de contenu sample-content-fragments

Les fragments suivants sont utilisés pour le modèle approprié.

Entreprise fragment-company

Nom de l’entreprise
PDG
Employés
Apple
Steve Jobs
Duke Marsh
Max Caulfield
Little Pony Inc.
Adam Smith
Lara Croft
Cutter Slade
NextStep Inc.
Steve Jobs
Joe Smith
Abe Lincoln

Personne fragment-person

Nom
Prénom
Distinctions
Lincoln
Abe
Smith
Adam
Slade
Cutter
Gameblitz
Gamestar
Marsh
Duke
Smith
Joe
Croft
Lara
Gamestar
Caulfield
Max
Gameblitz
Jobs
Steve

Distinction fragment-award

Raccourci/ID
Titre
GB
Gameblitz
GS
Gamestar
OSC
Oscar

Ville fragment-city

Nom
Pays
Population
Catégories
Bâle
Suisse
172258
city:emea
Berlin
Allemagne
3669491
city:capital
city:emea
Bucarest
Roumanie
1821000
city:capital
city:emea
San Francisco
États-Unis
883306
city:beach
city:na
San Jose
États-Unis
102635
city:na
Stuttgart
Allemagne
634830
city:emea
Zurich
Suisse
415367
city:capital
city:emea
recommendation-more-help
fbcff2a9-b6fe-4574-b04a-21e75df764ab