Aprenda a utilizar los fragmentos de contenido en Adobe Experience Manager (AEM) con la API de AEM GraphQL para la entrega de contenido sin encabezado.
La API de GraphQL de AEM que se utiliza con fragmentos de contenido se basa principalmente en la API estándar de código abierto de GraphQL.
El uso de la API de GraphQL en AEM permite la entrega eficiente de fragmentos de contenido a clientes JavaScript en implementaciones de CMS sin encabezado:
GraphQL se utiliza actualmente en dos escenarios (independientes) en Adobe Experience Manager (AEM):
GraphQL es:
“…un idioma de consulta para API y un tiempo de ejecución para cumplir esas consultas con los datos existentes. GraphQL proporciona una descripción completa y comprensible de los datos de su API, ofrece a los clientes la posibilidad de preguntar exactamente lo que necesitan y nada más, facilita la evolución de las API con el paso del tiempo y habilita potentes herramientas para desarrolladores”.
Consulte GraphQL.org
“…una especificación abierta para una capa de API flexible. Coloque GraphQL sobre los back-ends existentes para crear productos más rápido que nunca…”.
Consulte Exploración de GraphQL.
“…una especificación y lenguaje de consulta de datos desarrollado internamente por Facebook en 2012, antes de pasar a ser de código abierto público en 2015. Proporciona una alternativa a las arquitecturas basadas en REST con el propósito de aumentar la productividad del desarrollador y minimizar las cantidades de datos transferidos. Cientos de organizaciones de todos los tamaños utilizan GraphQL en producción…”
Consulte Fundamentos de GraphQL.
Para obtener más información acerca de la API de GraphQL, consulte las siguientes secciones (entre muchos otros recursos):
En graphql.org:
En graphql.com:
La implementación de GraphQL para AEM se basa en la biblioteca Java estándar de GraphQL. Consulte:
GraphQL utiliza lo siguiente:
La ruta en AEM que responde a las consultas de GraphQL y proporciona acceso a los esquemas de GraphQL.
Consulte Activación del punto de conexión de GraphQL para obtener más información.
Consulte la Introducción a GraphQL (GraphQL.org) para obtener información detallada, incluidas las Prácticas recomendadas.
Con GraphQL puede realizar consultas para devolver lo siguiente:
Una entrada única
También puede realizar:
Puede probar y depurar consultas de GraphQL usando el IDE de GraphiQL.
El punto de conexión es la ruta utilizada para acceder a GraphQL para AEM. Al utilizar esta ruta, usted (o su aplicación) puede hacer lo siguiente:
Hay dos tipos de puntos de conexión en AEM:
El editor de fragmentos de contenido puede permitir que un fragmento de contenido de una configuración de Sites haga referencia a un fragmento de contenido de otra configuración de Sites (a través de políticas).
En tal caso, no todo el contenido se podrá recuperar mediante un punto de conexión específico de configuración de Sites.
El autor del contenido debe controlar este escenario; por ejemplo, puede resultar útil considerar la posibilidad de colocar los modelos de fragmento de contenido compartido en la configuración de Sites global.
La ruta del repositorio del punto de conexión global de GraphQL para AEM es la siguiente:
/content/cq:graphql/global/endpoint
Para lo cual su aplicación puede utilizar la siguiente ruta en la dirección URL de la solicitud:
/content/_cq_graphql/global/endpoint.json
Para habilitar un punto de conexión para GraphQL para AEM, debe hacer lo siguiente:
Para habilitar un punto de conexión de GraphQL, primero debe tener una configuración adecuada. Consulte Fragmentos de contenido: explorador de configuración.
Si no se ha habilitado el uso de modelos de fragmentos de contenido, la opción Crear no estará disponible.
Para habilitar el punto de conexión correspondiente:
Vaya a Herramientas, Assets y, a continuación, seleccione GraphQL.
Seleccione Crear.
El diálogo Crear nuevo punto de conexión de GraphQL se abrirá. Aquí puede especificar lo siguiente:
La siguiente advertencia se muestra en el cuadro de diálogo:
Confirme con Crear.
El diálogo Pasos siguientes proporciona un vínculo directo a la consola de seguridad para que pueda cerciorarse de que el punto de conexión recién creado tenga los permisos adecuados.
El punto de conexión es accesible para todos. Esto puede suponer un problema de seguridad, especialmente en las instancias de publicación, ya que las consultas de GraphQL pueden imponer una carga pesada en el servidor.
Puede configurar ACL, según su caso de uso, en el punto de conexión.
Seleccione el nuevo punto de conexión y Publicación para que esté totalmente disponible en todos los entornos.
El punto de conexión es accesible para todos.
En instancias de publicación esto puede suponer un problema de seguridad, ya que las consultas de GraphQL pueden imponer una carga pesada en el servidor.
Debe configurar ACL adecuados para su caso de uso en el punto de conexión.
Implementación de la norma GraphiQL está disponible para usar con AEM GraphQL. Esto puede instalarse con AEM.
GraphiQL está enlazado al punto de conexión global (y no funciona con otros puntos de conexión para configuraciones de sitios específicas).
Esta interfaz le permite introducir y probar directamente consultas.
Por ejemplo:
http://localhost:4502/content/graphiql.html
Esto proporciona funciones como resaltado de sintaxis, autocompletado o autosugerencia, junto con un historial y documentación en línea:
La interfaz de usuario de GraphiQL se puede instalar en AEM con un paquete dedicado: el Paquete de contenido de GraphiQL v0.0.6 (2021.3) paquete.
El paquete disponible es totalmente compatible con AEM 6.5.10.0 y AEM as a Cloud Service.
Los casos de uso pueden depender del tipo de entorno AEM:
Entorno de publicación; se usa para:
Entorno de creación; se usa para:
Los permisos son los necesarios para acceder a Assets.
GraphQL es una API muy tipificada, lo que significa que los datos deben estar claramente estructurados y organizados por tipo.
La especificación de GraphQL proporciona una serie de directrices sobre cómo crear una API robusta para buscar datos en una instancia determinada. Para ello, un cliente debe recuperar el Esquema, que contiene todos los tipos necesarios para una consulta.
Para los fragmentos de contenido, los esquemas (estructura y tipos) de GraphQL se basan en Modelos de fragmentos de contenido habilitados y sus tipos de datos.
Todos los esquemas de GraphQL (derivados de los modelos de fragmentos de contenido que se han habilitado) se pueden leer a través del punto de conexión de GraphQL.
Esto significa que debe asegurarse de que no hay datos confidenciales disponibles, ya que podrían filtrarse de esta manera; por ejemplo, esto incluye información que podría estar presente como nombres de campo en la definición del modelo.
Por ejemplo, si un usuario crea un modelo de fragmentos de contenido denominado Article
, luego AEM genera el objeto article
, que es de un tipo ArticleModel
. Los campos dentro de este tipo corresponden a los campos y tipos de datos definidos en el modelo.
Un modelo de fragmento de contenido:
El esquema correspondiente de GraphQL (salida de la documentación automática de GraphiQL):
Esto muestra que el tipo generado ArticleModel
contiene varios campos.
Tres de ellos han sido controlados por el usuario: author
, main
y referencearticle
.
Los demás campos los añadió automáticamente AEM y representan métodos útiles para proporcionar información acerca de un determinado fragmento de contenido; en este ejemplo, _path
, _metadata
, _variations
. Estos campos de ayuda se marcan con un _
que los precede para distinguir entre lo que ha definido el usuario y lo que se ha generado automáticamente.
Después de que un usuario cree un fragmento de contenido basado en el modelo de artículo, se puede buscar a través de GraphQL. Para ver ejemplos, consulte las Consultas de muestra (basadas en una estructura de fragmentos de contenido de muestra para usar con GraphQL).
En GraphQL para AEM, el esquema es flexible. Esto significa que se genera automáticamente cada vez que se crea, actualiza o elimina un modelo de fragmento de contenido. Las cachés del esquema de datos también se refrescan al actualizar el modelo de fragmento de contenido.
El servicio Sites de GraphQL escucha (en segundo plano) cualquier modificación realizada en un modelo de fragmento de contenido. Cuando se detectan actualizaciones, solo se regenera esa parte del esquema. Esta optimización ahorra tiempo y proporciona estabilidad.
Por ejemplo, si:
Instala un paquete que contenga Content-Fragment-Model-1
y Content-Fragment-Model-2
:
Model-1
y Model-2
.A continuación, modifique Content-Fragment-Model-2
:
Solo el tipo de GraphQL Model-2
se actualizará.
Mientras que Model-1
seguirá siendo el mismo.
Esto es importante tenerlo en cuenta en caso de que desee realizar actualizaciones masivas en los modelos de fragmento de contenido a través de la API de REST o de otro modo.
El esquema se sirve a través del mismo punto de conexión que las consultas de GraphQL, y el cliente gestiona el hecho de que se llama al esquema con la extensión GQLschema
. Por ejemplo, realizar una solicitud GET
simple en /content/cq:graphql/global/endpoint.GQLschema
resultará en la salida del esquema con el tipo contenido: text/x-graphql-schema;charset=iso-8859-1
.
Cuando los fragmentos de contenido están anidados, puede ocurrir que se publique un modelo de fragmento de contenido principal, pero no un modelo al que se hace referencia.
La IU de AEM evita que esto ocurra, pero si la publicación se realiza mediante programación o con paquetes de contenido, puede ocurrir.
Cuando esto sucede, AEM genera un esquema incompleto del modelo de fragmento del contenido principal. Esto significa que la referencia de fragmento, que depende del modelo no publicado, se elimina del esquema.
Dentro del esquema hay campos individuales, de dos categorías básicas:
Campos que genera usted.
Una selección de Tipos de campo se utiliza para crear campos en función de cómo configure el modelo de fragmento de contenido. Los nombres de campo se toman del campo Nombre de propiedad del Tipo de datos.
GraphQL para AEM también genera una serie de campos de ayuda.
Se utilizan para identificar un fragmento de contenido o para obtener más información acerca de uno.
GraphQL para AEM admite una lista de tipos. Se representan todos los tipos de datos del modelo de fragmento de contenido compatibles y los tipos de GraphQL correspondientes:
Modelo de fragmento de contenido: tipo de datos | Tipo de GraphQL | Descripción |
---|---|---|
Texto de línea única | Cadena, [Cadena] | Se utiliza para cadenas simples como nombres de autor, nombres de ubicación, etc. |
Texto multilínea | Cadena | Se utiliza para generar texto como el cuerpo de un artículo |
Número | Flotante, [Flotante] | Se utiliza para mostrar números de coma flotante y números regulares |
Booleano | Booleano | Se utiliza para mostrar casillas de verificación → instrucciones simples verdaderas/falsas |
Fecha y hora | Calendario | Se utiliza para mostrar la fecha y la hora en formato ISO 8086. Según el tipo seleccionado, hay tres variantes disponibles para usar en AEM GraphQL: onlyDate , onlyTime , dateTime |
Lista desglosada | Cadena | Se utiliza para mostrar una opción de una lista de opciones definidas en la creación del modelo |
Etiquetas | [Cadena] | Se utiliza para mostrar una lista de cadenas que representan las etiquetas utilizadas en AEM |
Referencia de contenido | Cadena | Se utiliza para mostrar la ruta hacia otro recurso en AEM |
Referencia al fragmento | Un tipo de modelo | Se utiliza para hacer referencia a otro fragmento de contenido de un tipo de modelo determinado, definido cuando se creó el modelo |
Además de los tipos de datos de los campos generados por el usuario, GraphQL para AEM también genera una serie de campos de ayuda para ayudar a identificar un fragmento de contenido o para proporcionar información adicional acerca de un fragmento de contenido.
El campo de ruta se utiliza como identificador en GraphQL. Representa la ruta del recurso de fragmento de contenido dentro del repositorio de AEM. Lo hemos elegido como identificador de un fragmento de contenido, por los motivos siguientes:
El siguiente código muestra las rutas de todos los fragmentos de contenido creados en función del modelo de fragmento de contenido Person
.
{
personList {
items {
_path
}
}
}
Para recuperar un solo fragmento de contenido de un tipo específico, también debe determinar primero su ruta. por ejemplo:
{
personByPath(_path: "/content/dam/path/to/fragment/john-doe") {
item {
_path
firstName
name
}
}
}
Consulte Consulta de muestra: un solo fragmento de ciudad específico.
A través de GraphQL, AEM también expone los metadatos de un fragmento de contenido. Los metadatos son la información que describe un fragmento de contenido, como su título, la ruta de la miniatura, la descripción de un fragmento de contenido o la fecha en que se creó, entre otros.
Dado que los metadatos se generan mediante el Editor de esquemas y, como tales, no tienen una estructura específica, el tipo de GraphQL TypedMetaData
se ha implementado para exponer los metadatos de un fragmento de contenido. TypedMetaData
expone la información agrupada por los siguientes tipos escalares:
Campo |
---|
stringMetadata:[StringMetadata]! |
stringArrayMetadata:[StringArrayMetadata]! |
intMetadata:[IntMetadata]! |
intArrayMetadata:[IntArrayMetadata]! |
floatMetadata:[FloatMetadata]! |
floatArrayMetadata:[FloatArrayMetadata]! |
booleanMetadata:[BooleanMetadata]! |
booleanArrayMetadata:[booleanArrayMetadata]! |
calendarMetadata:[CalendarMetadata]! |
calendarArrayMetadata:[CalendarArrayMetadata]! |
Cada tipo escalar representa un único par nombre-valor o una matriz de pares nombre-valor, donde el valor de ese par es del tipo en el que se agrupó.
Por ejemplo, si desea recuperar el título de un fragmento de contenido, sabemos que esta propiedad es de cadena, por lo que consultaremos todos los metadatos de cadena:
Para consultar metadatos:
{
personByPath(_path: "/content/dam/path/to/fragment/john-doe") {
item {
_path
_metadata {
stringMetadata {
name
value
}
}
}
}
}
Puede ver todos los tipos de metadatos de GraphQL si ve el esquema de GraphQL generado. Todos los tipos de modelo tienen el mismo TypedMetaData
.
Diferencia entre metadatos normales y de matriz
Tenga en cuenta que StringMetadata
y StringArrayMetadata
hacen referencia a lo que se almacena en el repositorio, no a cómo se recuperan.
Por ejemplo, llamando al campo stringMetadata
, recibirá una matriz de todos los metadatos almacenados en el repositorio como String
, y si llama a stringArrayMetadata
recibirá una matriz de todos los metadatos almacenados en el repositorio como String[]
.
Consulte Consulta de muestra para metadatos: enumera los metadatos de los premios titulados GB.
El campo _variations
se ha implementado para simplificar la consulta de las variaciones que tiene un fragmento de contenido. Por ejemplo:
{
personByPath(_path: "/content/dam/path/to/fragment/john-doe") {
item {
_variations
}
}
}
Consulte Consulta de muestra: todas las ciudades con una variación con nombre.
Si la variación dada no existe para un fragmento de contenido, la variación maestra se devolverá como predeterminada (reserva).
GraphQL permite colocar variables en la consulta. Para obtener más información, consulte la Documentación de GraphQL para variables.
Por ejemplo, para obtener todos los fragmentos de contenido del tipo Article
que tienen una variación específica, puede especificar la variable variation
en GraphiQL.
### query
query GetArticlesByVariation($variation: String!) {
articleList(variation: $variation) {
items {
_path
author
}
}
}
### in query variables
{
"variation": "uk"
}
En GraphQL existe la posibilidad de cambiar la consulta en función de variables, denominadas Directivas de GraphQL.
Por ejemplo, puede incluir el campo adventurePrice
en una consulta para todos los AdventureModels
, en función de una variable includePrice
.
### query
query GetAdventureByType($includePrice: Boolean!) {
adventureList {
items {
adventureTitle
adventurePrice @include(if: $includePrice)
}
}
}
### in query variables
{
"includePrice": true
}
También puede utilizar el filtrado en las consultas de GraphQL para devolver datos específicos.
El filtrado utiliza una sintaxis basada en operadores lógicos y expresiones.
Por ejemplo, la siguiente consulta (básica) filtra todas las personas que tienen un apellido Jobs
o Smith
:
query {
personList(filter: {
name: {
_logOp: OR
_expressions: [
{
value: "Jobs"
},
{
value: "Smith"
}
]
}
}) {
items {
name
firstName
}
}
}
Para ver más ejemplos, consulte lo siguiente:
detalles de GraphQL para extensiones de AEM
Ejemplos de consultas que utilizan este contenido y estructura de muestra
El funcionamiento básico de las consultas con GraphQL para AEM se adhiere a la especificación estándar de GraphQL. Para las consultas de GraphQL con AEM hay algunas extensiones:
Si necesita un solo resultado:
Si espera una lista de resultados:
List
al nombre del modelo; por ejemplo, cityList
Si desea utilizar un OR lógico:
_logOp: OR
El AND lógico también existe, pero (a menudo) está implícito
Puede consultar los nombres de campo que se correspondan con los campos del modelo de fragmento de contenido
Además de los campos del modelo, hay algunos campos generados por el sistema (precedidos de guiones bajos):
Para el contenido:
_locale
: para revelar el idioma; basado en el Administrador de idiomas
_metadata
: para mostrar los metadatos del fragmento
_model
: permitir la consulta de un modelo de fragmento de contenido (ruta y título)
_path
: la ruta al fragmento de contenido dentro del repositorio
_reference
: para revelar referencias, incluyendo referencias en línea en el Editor de texto enriquecido
_variation
: para mostrar variaciones específicas dentro del fragmento de contenido
Si la variación dada no existe para un fragmento de contenido, la variación maestra se devolverá como predeterminada (reserva).
Y operaciones:
_operator
: aplicar operadores específicos; EQUALS
, EQUALS_NOT
, GREATER_EQUAL
, LOWER
, CONTAINS
, STARTS_WITH
_apply
: para aplicar condiciones específicas; por ejemplo, AT_LEAST_ONCE
_ignoreCase
: para ignorar el caso al consultar
Se admiten los tipos de unión de GraphQL:
Alternativa cuando se consultan fragmentos anidados:
Después de preparar una consulta con una solicitud de POST, esta se puede ejecutar con una solicitud de GET que se puede almacenar en caché mediante cachés HTTP o una CDN.
Esto es necesario, ya que las consultas de POST generalmente no se almacenan en caché y si se utiliza la GET con la consulta como parámetro, existe un riesgo significativo de que el parámetro sea demasiado grande para los servicios HTTP e intermediarios.
Las consultas persistentes siempre deben utilizar el punto de conexión relacionado con la configuración de Sites adecuada, para que puedan usar una o ambas:
Consulte Habilitar la funcionalidad de fragmento de contenido en el explorador de configuración para obtener más información.
Las Consultas de persistencia de GraphQL deben estar habilitadas, para la configuración de Sites adecuada.
Por ejemplo, si hay una consulta en particular llamada my-query
, que utiliza un modelo my-model
desde la configuración de Sites my-conf
:
my-conf
específico, y luego la consulta se guardará de la siguiente manera:/conf/my-conf/settings/graphql/persistentQueries/my-query
global
, pero la consulta se guardará de la siguiente manera:/conf/global/settings/graphql/persistentQueries/my-query
Estas son dos consultas distintas: se guardan en rutas diferentes.
Simplemente, utilizan el mismo modelo, pero a través de puntos de conexión diferentes.
Estos son los pasos necesarios para mantener una consulta determinada:
Prepare la consulta colocándola en la nueva URL de punto de conexión /graphql/persist.json/<config>/<persisted-label>
.
Por ejemplo, cree una consulta persistente:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query" \
-d \
'{
articleList {
items{
_path
author
main {
json
}
}
}
}'
En este punto, compruebe la respuesta.
Por ejemplo, compruebe si se ha realizado correctamente:
{
"action": "create",
"configurationName": "wknd",
"name": "plain-article-query",
"shortPath": "/wknd/plain-article-query",
"path": "/conf/wknd/settings/graphql/persistentQueries/plain-article-query"
}
A continuación, puede reproducir la consulta persistente obteniendo la dirección URL /graphql/execute.json/<shortPath>
.
Por ejemplo, utilice la consulta persistente:
$ curl -X GET \
http://localhost:4502/graphql/execute.json/wknd/plain-article-query
Actualice una consulta persistente usando POST en una ruta de consulta ya existente.
Por ejemplo, utilice la consulta persistente:
$ curl -X POST \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query" \
-d \
'{
articleList {
items{
_path
author
main {
json
}
referencearticle {
_path
}
}
}
}'
Cree una consulta sin formato ajustada.
Por ejemplo:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query-wrapped" \
-d \
'{ "query": "{articleList { items { _path author main { json } referencearticle { _path } } } }"}'
Cree una consulta sencilla ajustada con control de caché.
Por ejemplo:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query-max-age" \
-d \
'{ "query": "{articleList { items { _path author main { json } referencearticle { _path } } } }", "cache-control": { "max-age": 300 }}'
Cree una consulta persistente con parámetros:
Por ejemplo:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query-parameters" \
-d \
'query GetAsGraphqlModelTestByPath($apath: String!, $withReference: Boolean = true) {
articleByPath(_path: $apath) {
item {
_path
author
main {
plaintext
}
referencearticle @include(if: $withReference) {
_path
}
}
}
}'
Ejecución de una consulta con parámetros.
Por ejemplo:
$ curl -X POST \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/execute.json/wknd/plain-article-query-parameters;apath=%2fcontent2fdam2fwknd2fen2fmagazine2falaska-adventure2falaskan-adventures;withReference=false"
$ curl -X GET \
"http://localhost:4502/graphql/execute.json/wknd/plain-article-query-parameters;apath=%2fcontent2fdam2fwknd2fen2fmagazine2falaska-adventure2falaskan-adventures;withReference=false"
Para ejecutar la consulta en la publicación, es necesario replicar el árbol persistente relacionado
Uso de un POST para la replicación:
$curl -X POST http://localhost:4502/bin/replicate.json \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-F path=/conf/wknd/settings/graphql/persistentQueries/plain-article-query \
-F cmd=activate
Uso de un paquete:
/conf/wknd/settings/graphql/persistentQueries
).Uso de la herramienta de replicación/distribución.
/conf/wknd/settings/graphql/persistentQueries
).Uso de un flujo de trabajo (mediante la configuración del lanzador de flujos de trabajo):
Una vez que la configuración de la consulta está en la publicación, se aplican los mismos principios, solo con el extremo de publicación.
Para el acceso anónimo, el sistema supone que la ACL permite que “todos” tengan acceso a la configuración de la consulta.
Si no es así, no podrá ejecutarse.
Debe codificarse cualquier punto y coma (“;”) en las direcciones URL.
Por ejemplo, como en la solicitud para ejecutar una consulta persistente:
curl -X GET \ "http://localhost:4502/graphql/execute.json/wknd/plain-article-query-parameters%3bapath=%2fcontent2fdam2fwknd2fen2fmagazine2falaska-adventure2falaskan-adventures;withReference=false"
Para acceder al punto de conexión de GraphQL desde un sitio web externo, debe configurar lo siguiente:
Para obtener una descripción detallada de la política de uso compartido de recursos CORS en AEM, consulte Comprender el Intercambio de Recursos de Origen Cruzado (CORS).
Para acceder al extremo de GraphQL, se debe configurar una directiva CORS en el repositorio Git del cliente. Para ello, añada un archivo de configuración OSGi CORS apropiado para los puntos de conexión deseados.
Esta configuración debe especificar un origen de sitio web de confianza alloworigin
o alloworiginregexp
para los que debe concederse acceso.
Por ejemplo, para conceder acceso al punto de conexión de GraphQL y punto de conexión de consultas persistentes para https://my.domain
, puede utilizar:
{
"supportscredentials":true,
"supportedmethods":[
"GET",
"HEAD",
"POST"
],
"exposedheaders":[
""
],
"alloworigin":[
"https://my.domain"
],
"maxage:Integer":1800,
"alloworiginregexp":[
""
],
"supportedheaders":[
"Origin",
"Accept",
"X-Requested-With",
"Content-Type",
"Access-Control-Request-Method",
"Access-Control-Request-Headers"
],
"allowedpaths":[
"/content/_cq_graphql/global/endpoint.json",
"/graphql/execute.json/.*"
]
}
Si ha configurado una ruta de vanidad para el punto de conexión, también puede utilizarla en allowedpaths
.
Además de la configuración de CORS, se debe configurar un filtro de referente para permitir el acceso desde hosts de terceros.
Para ello, agregue un archivo de configuración de OSGi Referrer Filter apropiado que:
allow.hosts
o allow.hosts.regexp
,Por ejemplo, para conceder acceso a solicitudes con el referente my.domain
puede:
{
"allow.empty":false,
"allow.hosts":[
"my.domain"
],
"allow.hosts.regexp":[
""
],
"filter.methods":[
"POST",
"PUT",
"DELETE",
"COPY",
"MOVE"
],
"exclude.agents.regexp":[
""
]
}
Sigue siendo responsabilidad del cliente:
Todos los esquemas GraphQL (derivados de los modelos de fragmento de contenido que se han habilitado) se pueden leer a través del punto de conexión de GraphQL.
Esto significa que debe asegurarse de que no hay datos confidenciales disponibles, ya que podrían filtrarse de esta manera; por ejemplo, esto incluye información que podría estar presente como nombres de campo en la definición del modelo.
Consulte Autenticación para consultas de GraphQL de AEM remotas en fragmentos de contenido.
Preguntas que han surgido:
P: “¿En qué se diferencia la API de GraphQL para AEM de la API Generador de consultas?”
¿Busca un tutorial práctico? Consulte el tutorial completo Introducción a AEM Headless y GraphQL, que ilustra cómo crear y exponer contenido mediante las API de GraphQL de AEM y consumido por una aplicación externa, en un escenario de CMS sin encabezado.