Apprenez à utiliser GraphQL avec AEM afin de pouvoir diffuser du contenu sans problème en explorant des exemples de contenu et de requêtes.
Lisez cette page avec ce qui suit :
Pour commencer à utiliser les requêtes GraphQL et leur utilisation avec les fragments de contenu AEM, vous pouvez 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 fragment de contenu (modèles de fragments de contenu et fragments de contenu associés).
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.
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 :
http://localhost:4502/aem/graphiql.html
Les exemples de requêtes sont basés sur l’exemple de structure de fragment de contenu à utiliser avec GraphQL
Renvoie tous 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"
}
]
}
}
}
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
}
]
}
}
}
Une requête simple pour renvoyer la variable name
de toutes les entrées dans la variable city
schéma.
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"
}
]
}
}
}
Requête pour renvoyer les détails d’une entrée de fragment unique à 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"
]
}
}
}
}
Si vous créez une variation appelée "Centre de Berlin" (berlin_centre
), pour la variable city
Berlin, vous pouvez alors utiliser une requête pour renvoyer les détails de 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"
]
}
]
}
}
}
Si vous :
Tourism
: Business
, City Break
, Holiday
City
instancesvous 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"
]
}
]
}
}
}
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": []
}
]
}
]
}
}
}
Une requête qui filtre toutes les persons
pour tous ceux 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"
}
]
}
}
}
Une requête qui filtre toutes les persons
pour tous ceux 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"
}
]
}
}
}
_path
commence par un préfixe spécifiqueToutes les adventures
où _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"
}
]
}
}
}
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 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
Comme les résultats peuvent être exhaustifs, ils ne sont pas reproduits ici.
Cet exemple de requête interroge :
article
;_path
et les propriétés du authorFragment
.Exemple de requête
{
articleList {
items {
_path
authorFragment {
_path
firstName
lastName
birthDay
}
}
}
}
Cette requête interroge :
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 interroge :
article
avec un chemin spécifique ;
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
}
}
}
}
Cet exemple de requête interroge :
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
}
}
}
}
Cette requête interroge :
article
avec un chemin spécifique ;
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
}
}
}
}
Cette requête interroge :
bookmark
;
Article
.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
}
}
}
}
Cette requête interroge :
bookmark
;
Article
et Adventure
.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
}
}
}
}
}
Cette requête possède deux versions :
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
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
}
}
}
}
}
Cette requête interroge :
bookmark
avec un chemin spécifique ;
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
}
}
}
}
Cette requête interroge :
author
avec un chemin spécifique ;
another
Exemple de requête
{
authorByPath(_path: "/content/dam/wknd-shared/en/contributors/ian-provo", variation: "another") {
item {
_path
_variation
firstName
lastName
birthDay
}
}
}
Cette requête interroge :
author
avec une variation spécifique : another
Cette requête présente les abandons 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
}
}
}
Cette requête interroge :
article
et toutes les variations.Exemple de requête
query {
articleList(
includeVariations: true ){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Cette requête interroge :
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
}
}
}
}
}
Cette requête interroge :
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
}
}
}
}
Cette requête interroge :
Exemple de requête
{
articleList(offset: 5, limit: 5) {
items {
authorFragment {
_path
firstName
lastName
birthDay
}
_path
}
}
}
Cette requête interroge :
Exemple de requête
{
adventurePaginated(first: 5, after: "ODg1MmMyMmEtZTAzMy00MTNjLThiMzMtZGQyMzY5ZTNjN2M1") {
edges {
cursor
node {
title
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
Cette requête interroge :
vehicle
comportant la balise big-block
Exemple de requête
query {
vehicleList(
filter: {
_tags: {
_expressions: [
{
value: "vehicles:big-block"
_operator: CONTAINS
}
]
}
}) {
items {
_variation
_path
type
name
model
fuel
_tags
}
}
}
Cette requête interroge :
vehicle
comportant la balise big-block
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
}
}
}
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, vous utilisez les modèles de contenu suivants, ainsi que leurs interrelations (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 | Texte d’une seule ligne | |
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 | Texte d’une seule ligne | |
Prénom | Texte d’une seule ligne | |
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 | Texte d’une seule ligne | |
Titre | Texte d’une seule ligne |
Les champs permettant de définir une ville sont les suivants :
Nom du champ | Type de données | Référence |
---|---|---|
Nom | Texte d’une seule ligne | |
Pays | Texte d’une seule ligne | |
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 | city:capital city:emea |