Imparare a utilizzare GraphQL con AEM - Contenuto di esempio e query

ATTENZIONE

L'API AEM GraphQL per la distribuzione dei frammenti di contenuto è disponibile su richiesta.

Per abilitare l'API per il AEM come programma di Cloud Service, contattate il supporto di Adobe.

Per iniziare a utilizzare le query GraphQL e come funzionano con AEM frammenti di contenuto, è possibile vedere alcuni esempi pratici.

Per assistenza, consulta:

GraphQL per AEM - Alcune estensioni

Il funzionamento di base delle query con GraphQL per AEM aderire alla specifica GraphQL standard. Per le query GraphQL con AEM esistono alcune estensioni:

  • Se si richiede un singolo risultato:

    • utilizzare il nome del modello; città esempio
  • Se si prevede un elenco di risultati:

    • aggiungere "List" al nome del modello; ad esempio, cityList
  • Se si desidera utilizzare un OR logico:

    • utilizzare " _logOp: OR"
  • Esiste anche un AND logico, ma è (spesso) implicito

  • È possibile eseguire query sui nomi dei campi corrispondenti ai campi all'interno del modello di frammento di contenuto

  • Oltre ai campi del modello, sono presenti alcuni campi generati dal sistema (preceduti dal carattere di sottolineatura):

    • Per il contenuto:

      • _locale : rivelare la lingua; basato su Language Manager

      • _metadata : visualizzazione dei metadati per il frammento

      • _path : percorso del frammento di contenuto all'interno dell'archivio

      • _references : rivelare i riferimenti; inclusione di riferimenti in linea nell'Editor Rich Text

      • _variations : per visualizzare specifiche varianti all’interno del frammento di contenuto

    • E operazioni:

      • _operator : applicare operatori specifici; EQUALS, EQUALS_NOT, GREATER_EQUAL, LOWER, CONTAINS,

      • _apply : applicare condizioni specifiche; ad esempio, AT_LEAST_ONCE

      • _ignoreCase : per ignorare il caso durante la query

  • I tipi di unione GraphQL sono supportati:

    • use ...on

Una struttura di frammento di contenuto di esempio da utilizzare con GraphQL

Per un semplice esempio è necessario:

Modelli di frammenti di contenuto di esempio (schemi)

Per le query di esempio, verranno utilizzati i seguenti modelli di contenuto e le relative interrelazioni (riferimenti ->):

Azienda

I campi di base che definiscono la società sono:

Nome campo Tipo di dati Riferimento
Nome società Testo su riga singola
Direttore Generale Riferimento frammento (singolo) Person
Dipendenti Riferimento frammento (campo multiplo) Person

Person

Campi che definiscono una persona, che può anche essere un dipendente:

Nome campo Tipo di dati Riferimento
Nome Testo su riga singola
Nome Testo su riga singola
Awards Riferimento frammento (campo multiplo) Award

Premio

I campi che definiscono un premio sono:

Nome campo Tipo di dati Riferimento
Collegamento/ID Testo su riga singola
Titolo Testo su riga singola

Città

I campi per la definizione di una città sono:

Nome campo Tipo di dati Riferimento
Nome Testo su riga singola
Paese Testo su riga singola
Popolazione Numero
Categorie Tag

Frammenti di contenuto di esempio

Per il modello appropriato vengono utilizzati i seguenti frammenti.

Azienda

Nome società Direttore Generale Dipendenti
Apple Steve Jobs Duke Marsh
Max Caulfield
Little Pony Inc. Adam Smith Lara Croft
Sfera di taglio
NextStep Inc. Steve Jobs Joe Smith
Abe Lincoln

Persona

Nome Nome Awards
Lincoln Abe
Smith Adam
Slade Cutter Gameblitz
Gamestar
Palude Duke
Smith Joe
Croft Lara Gamestar
Caulfield Max Gameblitz
Processi Steve

Premio

Collegamento/ID Titolo
GB Gameblitz
GS Gamestar
OSC Oscar

Città

Nome Paese Popolazione Categorie
Basilea Svizzera 172258 città:emea
Berlino Germania 3669491 città:capitale
città:emea
Bucarest Romania 1821000 città:capitale
città:emea
San Francisco USA 883306 città:spiaggia
città:na
San Jose USA 102635 città:na
Stoccarda Germania 634830 città:emea
Zurigo Svizzera 415367 città:capitale
città:emea

GraphQL - Query di esempio con struttura frammento di contenuto di esempio

Consultate le query di esempio per le illustrazioni delle query di creazione, insieme ai risultati di esempio.

NOTA

A seconda dell'istanza in uso è possibile accedere direttamente all'interfaccia Graph i QL inclusa con AEM GraphQL API per l'invio e il test delle query.

Esempio: http://localhost:4502/content/graphiql.html

Query di esempio - Tutti gli schemi e i tipi di dati disponibili

Questo restituirà tutti i tipi per tutti gli schemi disponibili.

Query di esempio

{
  __schema {
    types {
      name
      description
    }
  }
}

Risultato campione

{
  "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"
        }
      ]
    }
  }
}

Query di esempio - Dettagli completi sull'amministratore delegato e sui dipendenti di una società

Utilizzando la struttura dei frammenti nidificati, questa query restituisce i dettagli completi dell'amministratore delegato di una società e di tutti i relativi dipendenti.

Query di esempio

query {
  companyList {
    items {
      name
      ceo {
        _path
        name
        firstName
        awards {
        id
          title
        }
      }
      employees {
       name
        firstName
       awards {
         id
          title
        }
      }
    }
  }
}

Risultati di esempio

{
  "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": []
            }
          ]
        }
      ]
    }
  }
}

Query di esempio - Tutte le informazioni su tutte le città

Per recuperare tutte le informazioni su tutte le città, è possibile utilizzare la query di base:
Query di esempio

{
  cityList {
    items
  }
}

Una volta eseguita, il sistema espanderà automaticamente la query per includere tutti i campi:

{
  cityList {
    items {
      _path
      name
      country
      population
    }
  }
}

Risultati di esempio

{
  "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
        }
      ]
    }
  }
}

Query di esempio - Nomi di tutte le città

Si tratta di una semplice query per restituire la namedi tutte le voci nello schema cityschema.

Query di esempio

query {
  cityList {
    items {
      name
    }
  }
}

Risultati di esempio

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "Basel"
        },
        {
          "name": "Berlin"
        },
        {
          "name": "Bucharest"
        },
        {
          "name": "San Francisco"
        },
        {
          "name": "San Jose"
        },
        {
          "name": "Stuttgart"
        },
        {
          "name": "Zurich"
        }
      ]
    }
  }
}

Query di esempio - Un singolo frammento di città

Si tratta di una query per restituire i dettagli di una singola voce di frammento in una posizione specifica nell'archivio.

Query di esempio

{
  cityByPath (_path: "/content/dam/sample-content-fragments/cities/berlin") {
    item {
      _path
      name
      country
      population
     categories
    }
  }
}

Risultati di esempio

{
  "data": {
    "cityByPath": {
      "item": {
        "_path": "/content/dam/sample-content-fragments/cities/berlin",
        "name": "Berlin",
        "country": "Germany",
        "population": 3669491,
        "categories": [
          "city:capital",
          "city:emea"
        ]
      }
    }
  }
}

Query di esempio - Tutte le città con una variante denominata

Se si crea una nuova variante, denominata "Berlin Center" (berlin_centre), per city Berlino, è possibile utilizzare una query per restituire i dettagli della variante.

Query di esempio

{
  cityList (variation: "berlin_center") {
    items {
      _path
      name
      country
      population
      categories
    }
  }
}

Risultati di esempio

{
  "data": {
    "cityList": {
      "items": [
        {
          "_path": "/content/dam/sample-content-fragments/cities/berlin",
          "name": "Berlin",
          "country": "Germany",
          "population": 3669491,
          "categories": [
            "city:capital",
            "city:emea"
          ]
        }
      ]
    }
  }
}

Query di esempio - Tutte le persone con un nome "Processi" o "Smith"

Questo filtrerà tutti i persons per tutti quelli che hanno il nome Jobso Smith.

Query di esempio

query {
  personList(filter: {
    name: {
      _logOp: OR
      _expressions: [
        {
          value: "Jobs"
        },
        {
          value: "Smith"
        }
      ]
    }
  }) {
    items {
      name
      firstName
    }
  }
}

Risultati di esempio

{
  "data": {
    "personList": {
      "items": [
        {
          "name": "Smith",
          "firstName": "Adam"
        },
        {
          "name": "Smith",
          "firstName": "Joe"
        },
        {
          "name": "Jobs",
          "firstName": "Steve"
        }
      ]
    }
  }
}

Query di esempio - Tutte le persone che non hanno un nome "Processi"

Questo filtrerà tutti i persons per tutti quelli che hanno il nome Jobso Smith.

Query di esempio

query {
  personList(filter: {
    name: {
      _expressions: [
        {
          value: "Jobs"
          _operator: EQUALS_NOT
        }
      ]
    }
  }) {
    items {
      name
      firstName
    }
  }
}

Risultati di esempio

{
  "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"
        }
      ]
    }
  }
}

Query di esempio - Tutte le città situate in Germania o Svizzera con una popolazione compresa tra 400000 e 999999

Qui viene filtrata una combinazione di campi. Per selezionare l'intervallo AND (implicito) viene utilizzato un population, mentre viene utilizzato un OR (esplicito) per selezionare le città richieste.

Query di esempio

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
    }
  }
}

Risultati di esempio

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "Stuttgart",
          "population": 634830,
          "country": "Germany"
        },
        {
          "name": "Zurich",
          "population": 415367,
          "country": "Switzerland"
        }
      ]
    }
  }
}

Query di esempio - Tutte le città con SAN nel nome, indipendentemente dal caso

Questa query interroga tutte le città che hanno SAN nel nome, indipendentemente dal caso.

Query di esempio

query {
  cityList(filter: {
    name: {
      _expressions: [
        {
          value: "SAN"
          _operator: CONTAINS
          _ignoreCase: true
        }
      ]
    }
  }) {
    items {
      name
      population
      country
    }
  }
}

Risultati di esempio

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA"
        },
        {
          "name": "San Jose",
          "population": 1026350,
          "country": "USA"
        }
      ]
    }
  }
}

Query di esempio - Filtro su una matrice con un elemento che deve verificarsi almeno una volta

Questa query filtra su una matrice con un elemento (city:na) che deve verificarsi almeno una volta.

Query di esempio

query {
  cityList(filter: {
    categories: {
      _expressions: [
        {
          value: "city:na"
          _apply: AT_LEAST_ONCE
        }
      ]
    }
  }) {
    items {
      name
      population
      country
      categories
    }
  }
}

Risultati di esempio

{
  "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"
          ]
        }
      ]
    }
  }
}

Query di esempio - Filtro su un valore di matrice esatto

Questa query filtra un valore di matrice esatto.

Query di esempio

query {
  cityList(filter: {
    categories: {
      _expressions: [
        {
          values: [
            "city:beach",
            "city:na"
          ]
        }
      ]
    }
  }) {
    items {
      name
      population
      country
      categories
    }
  }
}

Risultati di esempio

{
  "data": {
    "cityList": {
      "items": [
        {
          "name": "San Francisco",
          "population": 883306,
          "country": "USA",
          "categories": [
            "city:beach",
            "city:na"
          ]
        }
      ]
    }
  }
}

Query di esempio per i frammenti di contenuto nidificato - Tutte le società con almeno un dipendente con il nome "Smith"

Questa query illustra il filtraggio per qualsiasi person di name "Smith", restituendo informazioni da due frammenti nidificati: company e employee.

Query di esempio

query {
  companyList(filter: {
    employees: {
      _match: {
        name: {
          _expressions: [
            {
              value: "Smith"
            }
          ]
        }
      }
    }
  }) {
    items {
      name
      ceo {
        name
        firstName
      }
      employees {
        name
        firstName
      }
    }
  }
}

Risultati di esempio

{
  "data": {
    "companyList": {
      "items": [
        {
          "name": "NextStep Inc.",
          "ceo": {
            "name": "Jobs",
            "firstName": "Steve"
          },
          "employees": [
            {
              "name": "Smith",
              "firstName": "Joe"
            },
            {
              "name": "Lincoln",
              "firstName": "Abraham"
            }
          ]
        }
      ]
    }
  }
}

Query di esempio per i frammenti di contenuto nidificato - Tutte le società in cui tutti i dipendenti hanno vinto il premio "Gamestar"

Questa query illustra il filtraggio tra tre frammenti nidificati: company, employee e award.

Query di esempio

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
        }
      }
    }
  }
}

Risultati di esempio

{
  "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"
                }
              ]
            }
          ]
        }
      ]
    }
  }
}

Query di esempio per metadati - Elenca i metadati per i premi denominati GB

Questa query illustra il filtraggio tra tre frammenti nidificati: company, employee e award.

Query di esempio

query {
  awardList(filter: {
      id: {
        _expressions: [
          {
            value:"GB"
          }
        ]
    }
  }) {
    items {
      _metadata {
        stringMetadata {
          name,
          value
        }
      }
      id
      title
    }
  }
}

Risultati di esempio

{
  "data": {
    "awardList": {
      "items": [
        {
          "_metadata": {
            "stringMetadata": [
              {
                "name": "title",
                "value": "Gameblitz Award"
              },
              {
                "name": "description",
                "value": ""
              }
            ]
          },
          "id": "GB",
          "title": "Gameblitz"
        }
      ]
    }
  }
}

Query di esempio con il progetto WKND

Queste query di esempio si basano sul progetto WKND.

NOTA

Poiché i risultati possono essere estesi, non sono riportati qui.

Query di esempio per tutti i frammenti di contenuto di un determinato modello con le proprietà specificate

Questa query di esempio interroga:

  • per tutti i frammenti di contenuto di tipo article
  • con le proprietà pathe author.

Query di esempio

{
  articleList {
    items {
      _path
      author
    }
  }
}

Query di esempio per metadati

Questa query interroga:

  • per tutti i frammenti di contenuto di tipo adventure
  • metadata

Query di esempio

{
  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
        }
      }
    }
  }
}

Query di esempio per un singolo frammento di contenuto di un dato modello

Questa query di esempio interroga:

  • per un singolo frammento di contenuto di un dato modello
  • per tutti i formati di contenuto:
    • HTML
    • Markdown
    • Testo normale
    • JSON

Query di esempio

{
  articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures") {
    item {
        _path
        author
        main {
          html
          markdown
          plaintext
          json
        }
    }
  }
}

Query di esempio per un frammento di contenuto nidificato - Tipo di modello singolo

Query di esempio

{
  articleByPath (_path: "/content/dam/wknd/en/magazine/skitouring/skitouring") {
    item {
        _path
        author
        referencearticle {
          _path
          author
      }
    }
  }
}

Query di esempio per un frammento di contenuto nidificato - Tipo di modello multiplo

{
  bookmarkList {
    items {
        fragments {
          ... on ArticleModel {
            _path
            author
          }
          ... on AdventureModel {
            _path
            adventureTitle
          }
        }
     }
  }
}

Query di esempio per un frammento di contenuto di un modello specifico con riferimento a contenuto

{
  bookmarkList {
    items {
      attachments {
        ... on PageRef {
          _path
          type
        }
        ... on ImageRef {
          _path
          width
        }
        ... on MultimediaRef {
          _path
          size
        }
        ... on DocumentRef {
          _path
          author
        }
        ... on ArchiveRef {
          _path
          format
        }
      }
    }
  }
}

Query di esempio per più frammenti di contenuto con riferimenti preacquisiti

{
  bookmarkList {
    _references {
       ... on ImageRef {
        _path
        type
        height
      }
      ... on MultimediaRef {
        _path
        type
        size
      }
      ... on DocumentRef {
        _path
        type
        author
      }
      ... on ArchiveRef {
        _path
        type
        format
      }
    }
  }
}

Query di esempio per una singola variante di frammento di contenuto di un dato modello

Query di esempio

{
  articleByPath (_path: "/content/dam/wknd/en/magazine/alaska-adventure/alaskan-adventures", variation: "variation1") {
    item {
      _path
      author
      main {
        html
        markdown
        plaintext
        json
      }
    }
  }
}

Query di esempio per più frammenti di contenuto di una determinata lingua

Query di esempio

{ 
  articleList (_locale: "fr") {
    items {
      _path
      author
      main {
        html
        markdown
        plaintext
        json
      }
    }
  }
}

Query di esempio per un singolo frammento di contenuto con riferimento in linea RTE

Query di esempio

{
  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
      }
    }
  }
}

Query di esempio per una variante denominata di più frammenti di contenuto di un dato modello

Query di esempio

{
  articleList (variation: "variation1") {
    items {
      _path
      author
      main {
        html
        markdown
        plaintext
        json
      }
    }
  }
}

In questa pagina