Lär dig hur du använder GraphQL med AEM för att leverera innehåll utan problem genom att utforska exempelinnehåll och frågor.
Den här sidan ska läsas tillsammans med:
Om du vill komma igång med GraphQL-frågor och hur de fungerar med AEM innehållsfragment kan det vara bra att se några praktiska exempel.
Mer information finns i:
Och några exempelfrågor om GraphQL, baserat på fragmentstrukturen för exempelinnehåll (modeller för innehållsfragment och relaterade innehållsfragment).
I de här exempelfrågorna finns illustrationer av hur du skapar frågor, tillsammans med exempelresultat.
Beroende på din instans kan du komma åt GraphiQL-gränssnittet ingår i AEM GraphQL API för att skicka och testa frågor.
Till exempel: http://localhost:4502/content/graphiql.html
Exempelfrågorna baseras på Exempel på struktur för innehållsfragment som kan användas med GraphQL
Den här exempelfrågan returnerar alla types
för alla tillgängliga scheman.
Exempelfråga
{
__schema {
types {
name
description
}
}
}
Provresultat
{
"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"
}
]
}
}
}
Om du vill hämta all information om alla städer kan du använda den grundläggande frågan:
Exempelfråga
{
cityList {
items
}
}
Vid körning utökas frågan automatiskt så att den omfattar alla fält:
{
cityList {
items {
_path
name
country
population
}
}
}
Exempelresultat
{
"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
}
]
}
}
}
Den här exempelfrågan är en enkel fråga som returnerar name
av alla poster i city
schema.
Exempelfråga
query {
cityList {
items {
name
}
}
}
Exempelresultat
{
"data": {
"cityList": {
"items": [
{
"name": "Basel"
},
{
"name": "Berlin"
},
{
"name": "Bucharest"
},
{
"name": "San Francisco"
},
{
"name": "San Jose"
},
{
"name": "Stuttgart"
},
{
"name": "Zurich"
}
]
}
}
}
Den här exempelfrågan är en fråga som returnerar information om en enskild fragmentpost på en viss plats i databasen.
Exempelfråga
{
cityByPath (_path: "/content/dam/sample-content-fragments/cities/berlin") {
item {
_path
name
country
population
categories
}
}
}
Exempelresultat
{
"data": {
"cityByPath": {
"item": {
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
}
}
}
Om du skapar en variant som heter "Berlin Center" (berlin_centre
), för city
I Berlin kan du använda en fråga för att returnera information om variationen.
Exempelfråga
{
cityList (variation: "berlin_center") {
items {
_path
name
country
population
categories
}
}
}
Exempelresultat
{
"data": {
"cityList": {
"items": [
{
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
]
}
}
}
Om du:
Tourism
: Business
, City Break
, Holiday
City
instanserSedan kan du använda en fråga för att returnera information om name
och tags
av alla poster som är taggade som Citybrytningar i city
schema.
Exempelfråga
query {
cityList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "tourism:city-break", _operator: CONTAINS}]}}
){
items {
name,
_tags
}
}
}
Exempelresultat
{
"data": {
"cityList": {
"items": [
{
"name": "Berlin",
"_tags": [
"tourism:city-break",
"tourism:business"
]
},
{
"name": "Zurich",
"_tags": [
"tourism:city-break",
"tourism:business"
]
}
]
}
}
}
Med hjälp av strukturen för kapslade fragment returnerar den här frågan alla detaljer för ett företags VD och alla dess anställda.
Exempelfråga
query {
companyList {
items {
name
ceo {
_path
name
firstName
awards {
id
title
}
}
employees {
name
firstName
awards {
id
title
}
}
}
}
}
Exempelresultat
{
"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": []
}
]
}
]
}
}
}
Det här exempelfrågan filtrerar alla persons
för alla som har ett namn Jobs
eller Smith
.
Exempelfråga
query {
personList(filter: {
name: {
_logOp: OR
_expressions: [
{
value: "Jobs"
},
{
value: "Smith"
}
]
}
}) {
items {
name
firstName
}
}
}
Exempelresultat
{
"data": {
"personList": {
"items": [
{
"name": "Smith",
"firstName": "Adam"
},
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Jobs",
"firstName": "Steve"
}
]
}
}
}
Det här exempelfrågan filtrerar alla persons
för alla som har ett namn Jobs
eller Smith
.
Exempelfråga
query {
personList(filter: {
name: {
_expressions: [
{
value: "Jobs"
_operator: EQUALS_NOT
}
]
}
}) {
items {
name
firstName
}
}
}
Exempelresultat
{
"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
börjar med ett visst prefixAlla adventures
där _path
börjar med ett visst prefix (/content/dam/wknd/en/adventures/cycling
).
Exempelfråga
query {
adventureList(
filter: {
_path: {
_expressions: [
{
value: "/content/dam/wknd/en/adventures/cycling"
_operator: STARTS_WITH
}]
}
})
{
items {
_path
}
}
}
Exempelresultat
{
"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"
}
]
}
}
}
Här filtreras en kombination av fält. An AND
(implicit) används för att välja population
omfång, medan OR
(explicit) används för att välja önskade städer.
Exempelfråga
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
}
}
}
Exempelresultat
{
"data": {
"cityList": {
"items": [
{
"name": "Stuttgart",
"population": 634830,
"country": "Germany"
},
{
"name": "Zurich",
"population": 415367,
"country": "Switzerland"
}
]
}
}
}
Den här frågan frågar efter alla städer som har SAN
i namnet, oavsett skiftläge.
Exempelfråga
query {
cityList(filter: {
name: {
_expressions: [
{
value: "SAN"
_operator: CONTAINS
_ignoreCase: true
}
]
}
}) {
items {
name
population
country
}
}
}
Exempelresultat
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA"
},
{
"name": "San Jose",
"population": 1026350,
"country": "USA"
}
]
}
}
}
Den här frågan filtrerar en array med ett objekt (city:na
) som måste inträffa minst en gång.
Exempelfråga
query {
cityList(filter: {
categories: {
_expressions: [
{
value: "city:na"
_apply: AT_LEAST_ONCE
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Exempelresultat
{
"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"
]
}
]
}
}
}
Den här frågan filtrerar på ett exakt arrayvärde.
Exempelfråga
query {
cityList(filter: {
categories: {
_expressions: [
{
values: [
"city:beach",
"city:na"
]
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Exempelresultat
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA",
"categories": [
"city:beach",
"city:na"
]
}
]
}
}
}
Den här frågan visar filtrering för alla person
av name
"Smith", returnera information från två kapslade fragment - company
och employee
.
Exempelfråga
query {
companyList(filter: {
employees: {
_match: {
name: {
_expressions: [
{
value: "Smith"
}
]
}
}
}
}) {
items {
name
ceo {
name
firstName
}
employees {
name
firstName
}
}
}
}
Exempelresultat
{
"data": {
"companyList": {
"items": [
{
"name": "NextStep Inc.",
"ceo": {
"name": "Jobs",
"firstName": "Steve"
},
"employees": [
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Lincoln",
"firstName": "Abraham"
}
]
}
]
}
}
}
Den här frågan visar filtrering över tre kapslade fragment - company
, employee
och award
.
Exempelfråga
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
}
}
}
}
}
Exempelresultat
{
"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"
}
]
}
]
}
]
}
}
}
Den här frågan visar filtrering över tre kapslade fragment - company
, employee
och award
.
Exempelfråga
query {
awardList(filter: {
id: {
_expressions: [
{
value:"GB"
}
]
}
}) {
items {
_metadata {
stringMetadata {
name,
value
}
}
id
title
}
}
}
Exempelresultat
{
"data": {
"awardList": {
"items": [
{
"_metadata": {
"stringMetadata": [
{
"name": "title",
"value": "Gameblitz Award"
},
{
"name": "description",
"value": ""
}
]
},
"id": "GB",
"title": "Gameblitz"
}
]
}
}
}
Dessa exempelfrågor är baserade på WKND-projektet. Den har följande:
Content Fragment Models available under:
http://<hostname>:<port>/libs/dam/cfm/models/console/content/models.html/conf/wknd
Innehållsfragment (och annat innehåll) tillgängliga under:
http://<hostname>:<port>/assets.html/content/dam/wknd/en
Eftersom resultaten kan bli omfattande återges de inte här.
Detta exempel på frågor intervjuar:
article
path
och author
egenskaper.Exempelfråga
{
articleList {
items {
_path
author
}
}
}
Den här frågan förhör:
adventure
Exempelfråga
{
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
}
}
}
}
}
Detta exempel på frågor intervjuar:
article
vid en viss sökväg
Exempelfråga
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Detta exempel på frågor intervjuar:
Exempelfråga
{
adventureByPath(_path: "/content/dam/wknd/en/adventures/riverside-camping-australia/riverside-camping-australia") {
item {
_path
adventureTitle
_model {
_path
title
}
}
}
}
Den här frågan förhör:
article
vid en viss sökväg
Fältet referencearticle
har datatypen fragment-reference
.
Exempelfråga
{
adventureByPath(_path: "/content/dam/wknd-shared/en/magazine/western-australia/western-australia-by-camper-van") {
item {
_path
title
_model {
_path
title
}
}
}
}
Den här frågan förhör:
bookmark
Article
Fältet fragments
har datatypen fragment-reference
, med modellen Article
markerat. Frågeleveranser fragments
som en array med [Article]
.
{
bookmarkList {
items {
fragments {
_path
author
}
}
}
}
Den här frågan förhör:
bookmark
Article
och Adventure
Fältet fragments
har datatypen fragment-reference
, med modellerna Article
, Adventure
markerat. Frågeleveranser fragments
som en array med [AllFragmentModels]
, som är avrefererad med unionstyp.
{
bookmarkList {
items {
fragments {
... on ArticleModel {
_path
author
}
... on AdventureModel {
_path
adventureTitle
}
}
}
}
}
Det finns två varianter av den här frågan:
attachments
.De här frågorna förhör:
bookmark
Följande fråga returnerar alla innehållsreferenser genom att använda _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
}
}
}
Följande fråga returnerar alla attachments
- ett specifikt fält (undergrupp) av typen content-reference
:
Fältet attachments
har datatypen content-reference
, med olika formulär markerade.
{
bookmarkList {
items {
attachments {
... on PageRef {
_path
type
}
... on ImageRef {
_path
width
}
... on MultimediaRef {
_path
size
}
... on DocumentRef {
_path
author
}
... on ArchiveRef {
_path
format
}
}
}
}
}
Den här frågan förhör:
bookmark
vid en viss sökväg
De textbundna RTE-referenserna är hydratiserade i _references
.
Exempelfråga
{
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
}
}
}
}
Den här frågan förhör:
article
vid en viss sökväg
variation1
Exempelfråga
{
articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures", variation: "variation1") {
item {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Den här frågan förhör:
article
med en specifik variation: variation1
Exempelfråga
{
articleList (variation: "variation1") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Den här frågan förhör:
article
och alla variationerExempelfråga
query {
articleList(
includeVariations: true ){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Den här frågan förhör:
article
med en eller flera variationer som har taggen WKND : Activity / Hiking
Exempelfråga
{
articleList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "wknd:activity/hiking", _operator: CONTAINS}]}}
){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Den här frågan förhör:
article
inom fr
localeExempelfråga
{
articleList (_locale: "fr") {
items {
_path
author
main {
html
markdown
plaintext
json
}
}
}
}
Exempelfrågorna baseras på följande struktur som använder:
en eller flera, Exempel på modeller för innehållsfragment - grundvalen för GraphQL-scheman
Exempel på innehållsfragment baserat på ovanstående modeller
Använd följande innehållsmodeller och deras inbördes relationer (referenser ->) för exempelfrågorna:
Företag
-> Person
-> Utmärkelse
De grundläggande fälten som definierar företaget är:
Fältnamn | Datatyp | Referens |
---|---|---|
Företag | Enkelradig text | |
VD | Fragmentreferens (enkel) | Person |
Anställda | Fragmentreferens (multifält) | Person |
Fälten som definierar en person, som också kan vara en medarbetare:
Fältnamn | Datatyp | Referens |
---|---|---|
Namn | Enkelradig text | |
Förnamn | Enkelradig text | |
Utmärkelser | Fragmentreferens (multifält) | Utmärkelse |
Fälten som definierar en utmärkelse är:
Fältnamn | Datatyp | Referens |
---|---|---|
Genväg/ID | Enkelradig text | |
Titel | Enkelradig text |
Fälten för att definiera en stad är:
Fältnamn | Datatyp | Referens |
---|---|---|
Namn | Enkelradig text | |
Land | Enkelradig text | |
Population | Siffra | |
Kategorier | Taggar |
Följande fragment används för rätt modell.
Företag | VD | Anställda |
---|---|---|
Apple | Steve Jobs | Duke Marsh Max. textfält |
Little Pony Inc. | Adam Smith | Lara Croft Cutter Slade |
NextStep Inc. | Steve Jobs | Joe Smith Abe Lincoln |
Namn | Förnamn | Utmärkelser |
---|---|---|
Lincoln | Adobe | |
Smith | Adam | |
Slade | Rensare | Gameblitz Gamestar |
Marmor | Duke | |
Smith | Joe | |
Beskär | Lara | Gamestar |
Caulfield | Max | Gameblitz |
Jobb | Steve |
Genväg/ID | Titel |
---|---|
GB | Gameblitz |
GS | Gamestar |
OSC | Oscar |
Namn | Land | Population | Kategorier |
---|---|---|---|
Basel | Schweiz | 172258 | stad:emea |
Berlin | Tyskland | 3669491 | stad:huvudstad stad:emea |
Bucharest | Rumänien | 1821000 | stad:huvudstad stad:emea |
San Francisco | USA | 883306 | stad:strand stad:na |
San Jose | USA | 102635 | stad:na |
Stuttgart | Tyskland | 634830 | stad:emea |
Zürich | Schweiz | 415367 | stad:huvudstad stad:emea |