Cette page doit être lue avec :
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 :
Un certain nombre d’exemples de requêtes GraphQL, basés sur l’exemple de structure de fragments de contenu (modèles de fragments de contenu et fragments de contenu associés).
Le fonctionnement de base des requêtes avec GraphQL pour AEM est conforme à la spécification GraphQL standard. Pour les requêtes GraphQL avec AEM, il existe quelques extensions :
Si vous avez besoin d’un seul résultat :
Si vous prévoyez une liste de résultats :
List
au nom du modèle ; par exemple, cityList
Si vous souhaitez utiliser un OU logique :
_logOp: OR
L’opérateur logique ET existe également, mais est (souvent) implicite
Vous pouvez appliquer des requêtes aux noms de champ qui correspondent aux champs du modèle de fragment de contenu.
Outre les champs de votre modèle, il existe certains champs générés par le système (précédés d’un trait de soulignement) :
Pour le contenu :
_locale
: pour afficher la langue ; basé sur Language Manager
_metadata
: pour afficher les métadonnées de votre fragment
_model
: autoriser l’interrogation d’un modèle de fragment de contenu (chemin et titre)
_path
: chemin d’accès à votre fragment de contenu dans le référentiel
_reference
: pour afficher les références ; y compris les références intégrées dans l’éditeur de texte enrichi
_variation
: pour afficher des variantes spécifiques dans votre fragment de contenu
Et les opérations :
_operator
: appliquer des opérateurs spécifiques ; EQUALS
, EQUALS_NOT
, GREATER_EQUAL
, LOWER
, CONTAINS
_apply
: pour appliquer des conditions spécifiques ; par exemple AT_LEAST_ONCE
_ignoreCase
: pour ignorer la casse lors de l’application de la requête
Les types d’union GraphQL sont pris en charge :
Consultez ces exemples de requêtes pour obtenir des illustrations de requêtes de création, ainsi que des exemples de résultats.
Selon votre instance, vous pouvez accéder directement à l’interface Graph i QL incluse avec l’API AEM GraphQL pour envoyer et tester des requêtes.
Par exemple : http://localhost:4502/content/graphiql.html
Les exemples de requêtes sont basés sur la structure d’exemple de fragment de contenu à utiliser avec GraphQL
Toutes les types
seront renvoyées 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"
}
]
}
}
}
Pour récupérer toutes les informations sur toutes les villes, vous pouvez utiliser la requête de base :
Exemple de requête
{
cityList {
items
}
}
Une fois l’exécution effectuée, 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
}
]
}
}
}
Il s’agit d’une requête simple pour renvoyer l’élément 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"
}
]
}
}
}
Il s’agit d’une requête de renvoi des détails d’une entrée de fragment unique à un emplacement spécifique du 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"
]
}
}
}
}
Si vous créez une nouvelle 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 variante.
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"
]
}
]
}
}
}
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": []
}
]
}
]
}
}
}
Elle 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"
}
]
}
}
}
Elle 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"
}
]
}
}
}
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"
}
]
}
}
}
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"
}
]
}
}
}
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"
]
}
]
}
}
}
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"
]
}
]
}
}
}
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"
}
]
}
]
}
}
}
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"
}
]
}
]
}
]
}
}
}
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"
}
]
}
}
}
Ces exemples de requêtes sont basés sur le projet WKND. Il s'agit :
Modèles de fragments de contenu disponibles sous :
http://<hostname>:<port>/libs/dam/cfm/models/console/content/models.html/conf/wknd
Fragments de contenu (et autres contenus) disponibles sous :
http://<hostname>:<port>/assets.html/content/dam/wknd/en
Les résultats pouvant être volumineux, ils ne sont pas reproduits ici.
Cet exemple de requête applique une interrogation :
article
path
et author
.Exemple de requête
{
articleList {
items {
_path
author
}
}
}
Cette requête applique une interrogation :
adventure
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
}
}
}
}
}
Cet exemple de requête applique une interrogation :
article
à un chemin spécifique
Exemple de requête
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Cet exemple de requête applique une interrogation :
Exemple de requête
{
adventureByPath(_path: "/content/dam/wknd/en/adventures/riverside-camping-australia/riverside-camping-australia") {
item {
_path
adventureTitle
_model {
_path
title
}
}
}
}
Cette requête applique une interrogation :
article
à un chemin spécifique
Le champ referencearticle
a le type de données fragment-reference
.
Exemple de requête
{
articleByPath (_path: "/content/dam/wknd/en/magazine/skitouring/skitouring") {
item {
_path
author
referencearticle {
_path
author
}
}
}
}
Cette requête applique une interrogation :
bookmark
article
et adventure
Le champ fragments
a le type de données fragment-reference
, avec les modèles Article
, Adventure
sélectionnés.
{
bookmarkList {
items {
fragments {
... on ArticleModel {
_path
author
}
... on AdventureModel {
_path
adventureTitle
}
}
}
}
}
Cette requête présente deux saveurs :
attachments
.Ces requêtes interrogent :
bookmark
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
}
}
}
La requête suivante renvoie tous les attachments
- un champ spécifique (sous-groupe) de type content-reference
:
Le champ attachments
a 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
}
}
}
}
}
Cette requête applique une interrogation :
bookmark
à un chemin spécifique
Les références en ligne RTE sont hydraté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
}
}
}
}
Cette requête applique une interrogation :
article
à un chemin spécifique
variation1
Exemple de requête
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures", variation: "variation1") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Cette requête applique une interrogation :
article
avec une variation spécifique : variation1
Exemple de requête
{
articleList (variation: "variation1") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Cette requête applique une interrogation :
article
dans le paramètre régional fr
Exemple de requête
{
articleList (_locale: "fr") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Les exemples de requêtes sont basés sur la structure suivante, qui utilise :
Un ou plusieurs exemples de modèles de fragments de contenu constituent la base des schémas GraphQL
Exemples de fragments de contenu basés sur les modèles ci-dessus
Pour les exemples de requêtes, nous utiliserons les modèles de contenu suivants et leurs relations mutuelles (références ->) :
Entreprise
-> Personne
-> Distinction
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 | Une seule ligne de texte | |
PDG | Référence du fragment (unique) | Personne |
Employés | Référence du fragment (champ multiple) | Personne |
Champs définissant une personne, qui peut également être un employé :
Nom du champ | Type de données | Référence |
---|---|---|
Nom | Une seule ligne de texte | |
Prénom | Une seule ligne de texte | |
Distinctions | Référence du fragment (champ multiple) | Distinction |
Les champs définissant une distinction sont les suivants :
Nom du champ | Type de données | Référence |
---|---|---|
Raccourci/ID | Une seule ligne de texte | |
Titre | Une seule ligne de texte |
Les champs permettant de définir une ville sont les suivants :
Nom du champ | Type de données | Référence |
---|---|---|
Nom | Une seule ligne de texte | |
Pays | Une seule ligne de texte | |
Population | Nombre | |
Catégories | Balises |
Les fragments suivants sont utilisés pour le modèle approprié.
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 |
Nom | Prénom | Distinctions |
---|---|---|
Lincoln | Abe | |
Smith | Adam | |
Slade | Cutter | Gameblitz Gamestar |
Marsh | Duke | |
Smith | Joe | |
Croft | Lara | Gamestar |
Caulfield | Max | Gameblitz |
Jobs | Steve |
Raccourci/ID | Titre |
---|---|
GB | Gameblitz |
GS | Gamestar |
OSC | Oscar |
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 | ville:capital ville:emea |