Aprenda a utilizar GraphQL con AEM para ofrecer contenido sin encabezado explorando contenido y consultas de muestra.
Lea esta página junto con lo siguiente:
Para empezar a utilizar las consultas de GraphQL y ver cómo funcionan con fragmentos de contenido de AEM, resulta útil ver algunos ejemplos prácticos.
Para ayudarle con esto, consulte lo siguiente:
Y algunas consultas de muestra de GraphQL, en función de la estructura de fragmento de contenido de muestra (modelos de fragmentos de contenido y fragmentos de contenido relacionados).
Vea estas consultas de muestra para ver de forma ilustrada la creación de consultas, junto con resultados de muestra.
Según la instancia, puede acceder directamente a la interfaz de GraphQL incluida con la API de GraphQL de AEM para enviar y probar consultas.
Puede acceder al editor de consultas desde:
http://localhost:4502/aem/graphiql.html
Las consultas de muestra se basan en la Estructura de fragmentos de contenido de muestra para usar con GraphQL
Devuelve todos los types
para todos los esquemas disponibles.
Consulta de muestra
{
__schema {
types {
name
description
}
}
}
Resultado de muestra
{
"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"
}
]
}
}
}
Para recuperar toda la información acerca de todas las ciudades, puede utilizar la consulta básica:
Consulta de muestra
{
cityList {
items
}
}
Cuando se ejecuta, el sistema expande automáticamente la consulta para incluir todos los campos:
{
cityList {
items {
_path
name
country
population
}
}
}
Resultados de muestra
{
"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
}
]
}
}
}
Esta es una consulta directa para devolver el name
de todas las entradas del esquema city
.
Consulta de muestra
query {
cityList {
items {
name
}
}
}
Resultados de muestra
{
"data": {
"cityList": {
"items": [
{
"name": "Basel"
},
{
"name": "Berlin"
},
{
"name": "Bucharest"
},
{
"name": "San Francisco"
},
{
"name": "San Jose"
},
{
"name": "Stuttgart"
},
{
"name": "Zurich"
}
]
}
}
}
Esta es una consulta para devolver los detalles de una sola entrada de fragmento en una ubicación específica del repositorio.
Consulta de muestra
{
cityByPath (_path: "/content/dam/sample-content-fragments/cities/berlin") {
item {
_path
name
country
population
categories
}
}
}
Resultados de muestra
{
"data": {
"cityByPath": {
"item": {
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
}
}
}
Si crea una nueva variación, denominada “Centro de Berlín” (berlin_centre
), para el city
de Berlín, puede utilizar una consulta para devolver detalles de la variación.
Consulta de muestra
{
cityList (variation: "berlin_center") {
items {
_path
name
country
population
categories
}
}
}
Resultados de muestra
{
"data": {
"cityList": {
"items": [
{
"_path": "/content/dam/sample-content-fragments/cities/berlin",
"name": "Berlin",
"country": "Germany",
"population": 3669491,
"categories": [
"city:capital",
"city:emea"
]
}
]
}
}
}
Si:
Tourism
: Business
, City Break
y Holiday
City
Entonces puede utilizar una consulta para devolver detalles de la name
y tags
de todas las entradas etiquetadas como City Breaks en el city
esquema.
Consulta de muestra
query {
cityList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "tourism:city-break", _operator: CONTAINS}]}}
){
items {
name,
_tags
}
}
}
Resultados de muestra
{
"data": {
"cityList": {
"items": [
{
"name": "Berlin",
"_tags": [
"tourism:city-break",
"tourism:business"
]
},
{
"name": "Zurich",
"_tags": [
"tourism:city-break",
"tourism:business"
]
}
]
}
}
}
Utilizando la estructura de los fragmentos anidados, esta consulta devuelve todos los detalles del CEO de una compañía y de todos sus empleados.
Consulta de muestra
query {
companyList {
items {
name
ceo {
_path
name
firstName
awards {
id
title
}
}
employees {
name
firstName
awards {
id
title
}
}
}
}
}
Resultados de muestra
{
"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": []
}
]
}
]
}
}
}
Una consulta que filtra todas las persons
al buscar cualquiera que tenga el apellido Jobs
o Smith
.
Consulta de muestra
query {
personList(filter: {
name: {
_logOp: OR
_expressions: [
{
value: "Jobs"
},
{
value: "Smith"
}
]
}
}) {
items {
name
firstName
}
}
}
Resultados de muestra
{
"data": {
"personList": {
"items": [
{
"name": "Smith",
"firstName": "Adam"
},
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Jobs",
"firstName": "Steve"
}
]
}
}
}
Una consulta que filtra todas las persons
al buscar cualquiera que tenga el apellido Jobs
o Smith
.
Consulta de muestra
query {
personList(filter: {
name: {
_expressions: [
{
value: "Jobs"
_operator: EQUALS_NOT
}
]
}
}) {
items {
name
firstName
}
}
}
Resultados de muestra
{
"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
comienza con un prefijo específicoTodas las adventures
en que la _path
comienza con un prefijo específico (/content/dam/wknd/en/adventures/cycling
).
Consulta de muestra
query {
adventureList(
filter: {
_path: {
_expressions: [
{
value: "/content/dam/wknd/en/adventures/cycling"
_operator: STARTS_WITH
}]
}
})
{
items {
_path
}
}
}
Resultados de muestra
{
"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"
}
]
}
}
}
Aquí se filtra una combinación de campos. Un AND
(implícito) se utiliza para seleccionar el rango de population
, mientras que un OR
(explícito) se utiliza para seleccionar las ciudades requeridas.
Consulta de muestra
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
}
}
}
Resultados de muestra
{
"data": {
"cityList": {
"items": [
{
"name": "Stuttgart",
"population": 634830,
"country": "Germany"
},
{
"name": "Zurich",
"population": 415367,
"country": "Switzerland"
}
]
}
}
}
Esta consulta busca todas las ciudades que tienen SAN
en el nombre, sin importar las mayúsculas.
Consulta de muestra
query {
cityList(filter: {
name: {
_expressions: [
{
value: "SAN"
_operator: CONTAINS
_ignoreCase: true
}
]
}
}) {
items {
name
population
country
}
}
}
Resultados de muestra
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA"
},
{
"name": "San Jose",
"population": 1026350,
"country": "USA"
}
]
}
}
}
Esta consulta filtra una matriz con un elemento (city:na
) que debe producirse al menos una vez.
Consulta de muestra
query {
cityList(filter: {
categories: {
_expressions: [
{
value: "city:na"
_apply: AT_LEAST_ONCE
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Resultados de muestra
{
"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"
]
}
]
}
}
}
Esta consulta filtra un valor de matriz exacto.
Consulta de muestra
query {
cityList(filter: {
categories: {
_expressions: [
{
values: [
"city:beach",
"city:na"
]
}
]
}
}) {
items {
name
population
country
categories
}
}
}
Resultados de muestra
{
"data": {
"cityList": {
"items": [
{
"name": "San Francisco",
"population": 883306,
"country": "USA",
"categories": [
"city:beach",
"city:na"
]
}
]
}
}
}
Esta consulta ilustra el filtrado para cualquier person
de name
“Smith”, que devuelve información de entre dos fragmentos anidados: company
y employee
.
Consulta de muestra
query {
companyList(filter: {
employees: {
_match: {
name: {
_expressions: [
{
value: "Smith"
}
]
}
}
}
}) {
items {
name
ceo {
name
firstName
}
employees {
name
firstName
}
}
}
}
Resultados de muestra
{
"data": {
"companyList": {
"items": [
{
"name": "NextStep Inc.",
"ceo": {
"name": "Jobs",
"firstName": "Steve"
},
"employees": [
{
"name": "Smith",
"firstName": "Joe"
},
{
"name": "Lincoln",
"firstName": "Abraham"
}
]
}
]
}
}
}
Esta consulta ilustra el filtrado entre tres fragmentos anidados: company
, employee
y award
.
Consulta de muestra
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
}
}
}
}
}
Resultados de muestra
{
"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"
}
]
}
]
}
]
}
}
}
Esta consulta ilustra el filtrado entre tres fragmentos anidados: company
, employee
y award
.
Consulta de muestra
query {
awardList(filter: {
id: {
_expressions: [
{
value:"GB"
}
]
}
}) {
items {
_metadata {
stringMetadata {
name,
value
}
}
id
title
}
}
}
Resultados de muestra
{
"data": {
"awardList": {
"items": [
{
"_metadata": {
"stringMetadata": [
{
"name": "title",
"value": "Gameblitz Award"
},
{
"name": "description",
"value": ""
}
]
},
"id": "GB",
"title": "Gameblitz"
}
]
}
}
}
Estas consultas de muestra se basan en el proyecto WKND. Cuenta con lo siguiente:
Modelos de fragmentos de contenido disponibles en:
http://<hostname>:<port>/libs/dam/cfm/models/console/content/models.html/conf/wknd
Fragmentos de contenido (y otro contenido) disponibles en:
http://<hostname>:<port>/assets.html/content/dam/wknd/en
http://<hostname>:<port>/assets.html/content/dam/wknd-shared/en
Como los resultados pueden ser extensos, no se reproducen aquí.
Esta consulta de muestra busca lo siguiente:
article
_path
y propiedades de authorFragment
.Consulta de muestra
{
articleList {
items {
_path
authorFragment {
_path
firstName
lastName
birthDay
}
}
}
}
Esta consulta busca lo siguiente:
adventure
Consulta de muestra
{
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
}
}
}
}
}
Esta consulta de muestra busca lo siguiente:
article
en una ruta específica
Consulta de muestra
{
articleByPath(_path: "/content/dam/wknd-shared/en/magazine/alaska-adventure/alaskan-adventures") {
item {
_path
authorFragment {
_path
firstName
lastName
birthDay
}
main {
html
markdown
plaintext
json
}
}
}
}
Esta consulta de muestra busca lo siguiente:
Consulta de muestra
{
adventureByPath(_path: "/content/dam/wknd-shared/en/magazine/western-australia/western-australia-by-camper-van") {
item {
_path
title
_model {
_path
title
}
}
}
}
Esta consulta busca lo siguiente:
article
en una ruta específica
El campo referencearticle
tiene el tipo de datos fragment-reference
.
Consulta de muestra
{
adventureByPath(_path: "/content/dam/wknd-shared/en/magazine/western-australia/western-australia-by-camper-van") {
item {
_path
title
_model {
_path
title
}
}
}
}
Esta consulta busca lo siguiente:
bookmark
Article
El campo fragments
tiene el Tipo de datos fragment-reference
, con el modelo Article
seleccionado. Entregas de consultas fragments
como una matriz de [Article]
.
{
bookmarkList {
items {
fragments {
_path
author
}
}
}
}
Esta consulta busca lo siguiente:
bookmark
Article
y Adventure
El campo fragments
tiene el tipo de datos fragment-reference
, con los modelos Article
y Adventure
seleccionados. Entregas de consultas fragments
como una matriz de [AllFragmentModels]
, a la que se hace referencia con el tipo de unión.
{
bookmarkList {
items {
fragments {
... on ArticleModel {
_path
author
}
... on AdventureModel {
_path
adventureTitle
}
}
}
}
}
Hay dos tipos de consulta:
attachments
.Estas consultas buscan:
bookmark
La siguiente consulta devuelve todas las referencias de contenido utilizando _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 siguiente consulta devuelve todos los attachments
, un campo específico (subgrupo) del tipo content-reference
:
El campo attachments
tiene el tipo de datos content-reference
, con varios formularios seleccionados.
{
bookmarkList {
items {
attachments {
... on PageRef {
_path
type
}
... on ImageRef {
_path
width
}
... on MultimediaRef {
_path
size
}
... on DocumentRef {
_path
author
}
... on ArchiveRef {
_path
format
}
}
}
}
}
Esta consulta busca lo siguiente:
bookmark
en una ruta específica
Las referencias en línea RTE se hidratan en _references
.
Consulta de muestra
{
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
}
}
}
}
Esta consulta busca lo siguiente:
author
en una ruta específica
another
Consulta de muestra
{
authorByPath(_path: "/content/dam/wknd-shared/en/contributors/ian-provo", variation: "another") {
item {
_path
_variation
firstName
lastName
birthDay
}
}
}
Esta consulta busca lo siguiente:
author
con una variación específica: another
Esta consulta demuestra la alternativa para los fragmentos de contenido que no tienen una variación del nombre especificado.
Consulta de muestra
{
authorList(variation: "another") {
items {
_path
_variation
firstName
lastName
birthDay
}
}
}
Esta consulta busca lo siguiente:
article
y todas las variacionesConsulta de muestra
query {
articleList(
includeVariations: true ){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Esta consulta busca lo siguiente:
article
con una o más variaciones que tiene la etiqueta WKND : Activity / Hiking
Consulta de muestra
{
articleList(
includeVariations: true,
filter: {_tags: {_expressions: [{value: "wknd:activity/hiking", _operator: CONTAINS}]}}
){
items {
_variation
_path
_tags
_metadata {
stringArrayMetadata {
name
value
}
}
}
}
}
Esta consulta busca lo siguiente:
article
dentro de la configuración regional fr
Consulta de muestra
{
articleList(_locale: "fr") {
items {
_path
authorFragment {
_path
firstName
lastName
birthDay
}
main {
html
markdown
plaintext
json
}
}
}
}
Esta consulta busca lo siguiente:
Consulta de muestra
{
articleList(offset: 5, limit: 5) {
items {
authorFragment {
_path
firstName
lastName
birthDay
}
_path
}
}
}
Esta consulta busca lo siguiente:
Consulta de muestra
{
adventurePaginated(first: 5, after: "ODg1MmMyMmEtZTAzMy00MTNjLThiMzMtZGQyMzY5ZTNjN2M1") {
edges {
cursor
node {
title
}
}
pageInfo {
endCursor
hasNextPage
}
}
}
Esta consulta busca lo siguiente:
vehicle
tener la etiqueta big-block
Consulta de muestra
query {
vehicleList(
filter: {
_tags: {
_expressions: [
{
value: "vehicles:big-block"
_operator: CONTAINS
}
]
}
}) {
items {
_variation
_path
type
name
model
fuel
_tags
}
}
}
Esta consulta busca lo siguiente:
vehicle
tener la etiqueta big-block
Consulta de muestra
{
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
}
}
}
Las consultas de muestra se basan en la siguiente estructura, que utiliza:
Uno o más Modelos de fragmentos de contenido de muestra forman la base de los esquemas de GraphQL
Fragmentos de contenido de muestra basados en los modelos anteriores
Para las consultas de muestra, se utilizan los siguientes modelos de contenido y sus interrelaciones (referencias ->):
Los campos básicos que definen a la compañía son los siguientes:
Nombre del campo | Tipo de datos | Referencia |
---|---|---|
Nombre de la compañía | Texto de una sola línea | |
CEO | Referencia de fragmento (único) | Persona |
Empleados | Referencia de fragmento (multicampo) | Persona |
Los campos que definen a una persona, que también puede ser un empleado:
Nombre del campo | Tipo de datos | Referencia |
---|---|---|
Nombre | Texto de una sola línea | |
Nombre | Texto de una sola línea | |
Premios | Referencia de fragmento (multicampo) | Premio |
Los campos que definen un premio son los siguientes:
Nombre del campo | Tipo de datos | Referencia |
---|---|---|
Método abreviado/ID | Texto de una sola línea | |
Título | Texto de una sola línea |
Los campos para definir una ciudad son los siguientes:
Nombre del campo | Tipo de datos | Referencia |
---|---|---|
Nombre | Texto de una sola línea | |
País | Texto de una sola línea | |
Población | Número | |
Categorías | Etiquetas |
Los siguientes fragmentos se utilizan para el modelo adecuado.
Nombre de la compañía | CEO | Empleados |
---|---|---|
Apple | Steve Jobs | Duke Marsh Max Caulfield |
Little Pony Inc. | Adam Smith | Lara Croft Cutter Slade |
NextStep Inc. | Steve Jobs | Joe Smith Abe Lincoln |
Nombre | Nombre | Premios |
---|---|---|
Lincoln | Abe | |
Smith | Adam | |
Enclavado | Cutter | Gameblitz Gamestar |
Marsh | Duke | |
Smith | Joe | |
Croft | Lara | Gamestar |
Caulfield | Max | Gameblitz |
Trabajos | Steve |
Método abreviado/ID | Título |
---|---|
GB | Gameblitz |
GS | Gamestar |
OSC | Oscar |
Nombre | País | Población | Categorías |
---|---|---|---|
Basilea | Suiza | 172258 | city:emea |
Berlín | Alemania | 3669491 | city:capital city:emea |
Bucarest | Rumanía | 1821000 | city:capital city:emea |
San Francisco | EE. UU. | 883306 | city:beach city:na |
San José | EE. UU. | 102635 | city:na |
Stuttgart | Alemania | 634830 | city:emea |
Zúrich | Suiza | 415367 | city:capital city:emea |