Découvrez comment utiliser GraphQL avec des AEM pour diffuser du contenu sans interface en explorant des exemples de contenu et de requêtes.
Il est préférable de lire cette page à la lumière des sections suivantes :
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 fragments 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 à la variable Interface GraphiQL incluse avec l’API GraphQL AEM pour envoyer et tester des requêtes.
Par exemple : http://localhost:4502/content/graphiql.html
Les exemples de requêtes sont basés sur l’exemple de structure de fragment de contenu à utiliser avec GraphQL
Cet exemple de requête 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"
}
]
}
}
}
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
}
}
Lors de l’exécution, le système développe automatiquement la requête afin d’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
}
]
}
}
}
Cet exemple de requête est 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"
}
]
}
}
}
Cet exemple de requête est une requête permettant de 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 nommée "Centre de Berlin" (berlin_centre
), pour la variable city
Berlin, vous pouvez 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": []
}
]
}
]
}
}
}
Cet exemple de requête filtre tous 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"
}
]
}
}
}
Cet exemple de requête filtre tous 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, une combinaison de champs est filtrée. 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 comporte les éléments suivants :
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
Comme les résultats peuvent être exhaustifs, ils ne sont pas reproduits ici.
Cet exemple de requête interroge :
article
;path
et author
.Exemple de requête
{
articleList {
items {
_path
author
}
}
}
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/en/magazine/alaska-adventure/alaskan-adventures") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Cet exemple de requête interroge :
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 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
possède le type de données fragment-reference
, avec le modèle Article
sélectionné. Requête : 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. Requête : 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 toutes les attachments
: 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 :
article
avec 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 interroge :
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 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
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, utilisez les modèles de contenu suivants et 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 sur 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 sur une seule ligne | |
Prénom | Texte sur 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 sur une seule ligne | |
Titre | Texte sur 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 sur une seule ligne | |
Pays | Texte sur 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 |