Utforska GraphQL API:er explore-graphql-apis

GraphQL-API:t för AEM innehåller ett kraftfullt frågespråk för att visa data från innehållsfragment för program längre fram i kedjan. Modeller för innehållsfragment definierar det dataschema som används av innehållsfragment. När en innehållsfragmentmodell skapas eller uppdateras, översätts och läggs schemat till i det diagram som utgör GraphQL-API:t.

I det här kapitlet tittar vi på några vanliga GraphQL-frågor för att samla in innehåll med en IDE som heter GraphiQL. Med GraphiQL IDE kan du snabbt testa och finjustera frågor och data som returneras. Den ger också enkel åtkomst till dokumentationen, vilket gör det enkelt att lära sig och förstå vilka metoder som är tillgängliga.

Förutsättningar prerequisites

Det här är en självstudiekurs i flera delar och det antas att stegen som beskrivs i Skapa innehållsfragment har slutförts.

Mål objectives

  • Lär dig att använda GraphiQL-verktyget för att skapa en fråga med GraphQL-syntax.
  • Lär dig hur du hämtar en lista med innehållsfragment och ett enda innehållsfragment.
  • Lär dig hur du filtrerar och begär specifika dataattribut.
  • Lär dig hur du sammanfogar en fråga med flera innehållsfragmentmodeller
  • Lär dig hur du behåller GraphQL-frågan.

Aktivera GraphQL Endpoint enable-graphql-endpoint

En GraphQL-slutpunkt måste konfigureras för att aktivera GraphQL API-frågor för innehållsfragment.

  1. Gå till Verktyg > Allmänt > GraphQL från AEM startskärm.

    Navigera till GraphQL-slutpunkt

  2. Tryck på Skapa i det övre högra hörnet i den resulterande dialogrutan och ange följande värden:

    • Namn*: Min projektslutpunkt.
    • Använd GraphQL-schema från … *: Mitt projekt

    Skapa GraphQL-slutpunkt

    Tryck på Skapa för att spara slutpunkten.

    GraphQL-slutpunkter som skapats baserat på en projektkonfiguration aktiverar bara frågor mot modeller som tillhör det projektet. I det här fallet kan de enda frågorna mot modellerna Person och Team användas.

    note note
    NOTE
    En global slutpunkt kan också skapas för att aktivera frågor mot modeller över flera konfigurationer. Detta bör användas med försiktighet eftersom det kan öppna miljön för ytterligare säkerhetsproblem och göra hanteringen av AEM mer komplex.
  3. Nu bör en GraphQL-slutpunkt vara aktiverad i din miljö.

    Aktiverade grafikslutpunkter

Använda GraphiQL IDE

Med verktyget GraphiQL kan utvecklare skapa och testa frågor mot innehåll i den aktuella AEM. Med GraphiQL-verktyget kan användare även spara-frågor som ska användas av klientprogram i en produktionsinställning.

Utforska sedan kraften i att AEM GraphQL API med den inbyggda GraphiQL IDE.

  1. Gå till Verktyg > Allmänt > GraphQL Query Editor från AEM startskärmen.

    Navigera till GraphiQL IDE

    note note
    NOTE
    I kan det hända att de äldre versionerna av GraphiQL IDE inte är inbyggda. Den kan installeras manuellt enligt dessa instruktioner.
  2. Kontrollera att slutpunkten är inställd på Min projektslutpunkt i det övre högra hörnet.

    Ange GraphQL-slutpunkt

Detta omfattar alla frågor till modeller som skapats i projektet Mitt projekt.

Fråga en lista med innehållsfragment query-list-cf

Ett vanligt krav är att fråga efter flera innehållsfragment.

  1. Klistra in följande fråga i huvudpanelen (ersätter kommentarlistan):

    code language-graphql
    query allTeams {
      teamList {
        items {
          _path
          title
        }
      }
    }
    
  2. Tryck på knappen Spela upp på den översta menyn för att köra frågan. Du bör se resultatet av innehållsfragmenten från det föregående kapitlet:

    Resultat av personlista

  3. Placera markören under texten title och ange CTRL+Space för att utlösa kodtips. Lägg till shortname och description i frågan.

    Uppdatera fråga med kodtips

  4. Kör frågan igen genom att trycka på knappen Spela upp så ser du att resultatet innehåller de extra egenskaperna för shortname och description.

    gennamn och beskrivningsresultat

    shortname är en enkel egenskap och description är ett textfält med flera rader och med GraphQL API kan vi välja olika format för resultat som html, markdown, json eller plaintext.

Fråga efter kapslade fragment

Experimentera sedan med frågor om att hämta kapslade fragment. Kom ihåg att Team-modellen refererar till Person-modellen.

  1. Uppdatera frågan så att den innehåller egenskapen teamMembers. Kom ihåg att detta är ett fragmentreferensfält till personmodellen. Personmodellens egenskaper kan returneras:

    code language-graphql
    query allTeams {
        teamList {
            items {
                _path
                title
                shortName
                description {
                    plaintext
                }
                teamMembers {
                    fullName
                    occupation
                }
            }
        }
    }
    

    JSON-svar:

    code language-json
    {
        "data": {
            "teamList": {
            "items": [
                {
                "_path": "/content/dam/my-project/en/team-alpha",
                "title": "Team Alpha",
                "shortName": "team-alpha",
                "description": {
                    "plaintext": "This is a description of Team Alpha!"
                },
                "teamMembers": [
                    {
                    "fullName": "John Doe",
                    "occupation": [
                        "Artist",
                        "Influencer"
                    ]
                    },
                    {
                    "fullName": "Alison Smith",
                    "occupation": [
                        "Photographer"
                    ]
                    }
                  ]
            }
            ]
            }
        }
    }
    

    Möjligheten att fråga mot kapslade fragment är en kraftfull funktion i AEM GraphQL API. I det här enkla exemplet är kapslingen bara två nivåer djup. Det går dock att kapsla fragment ännu mer. Om det till exempel finns en Address-modell som är associerad med en Person kan data returneras från alla tre modellerna i en enda fråga.

Filtrera en lista med innehållsfragment filter-list-cf

Sedan ska vi titta på hur det går att filtrera resultatet till en delmängd av Content Fragments baserat på ett egenskapsvärde.

  1. Ange följande fråga i användargränssnittet för GraphiQL:

    code language-graphql
    query personByName($name:String!){
      personList(
        filter:{
          fullName:{
            _expressions:[{
              value:$name
              _operator:EQUALS
            }]
          }
        }
      ){
        items{
          _path
          fullName
          occupation
        }
      }
    }
    

    Ovanstående fråga utför en sökning mot alla personfragment i systemet. Det tillagda filtret i början av frågan utför en jämförelse av fältet name och variabelsträngen $name.

  2. Ange följande på panelen Frågevariabler:

    code language-json
    {"name": "John Doe"}
    
  3. Kör frågan. Endast Personer innehållsfragment returneras med värdet John Doe.

    Använd frågevariabler för att filtrera

    Det finns många andra alternativ för att filtrera och skapa komplexa frågor, se Lära dig att använda GraphQL med AEM - Exempelinnehåll och frågor.

  4. Förbättra ovanstående fråga för att hämta profilbild

    code language-graphql
    query personByName($name:String!){
      personList(
        filter:{
          fullName:{
            _expressions:[{
              value:$name
              _operator:EQUALS
            }]
          }
        }
      ){
        items{
          _path
          fullName
          occupation
          profilePicture{
            ... on ImageRef{
              _path
              _authorUrl
              _publishUrl
              height
              width
    
            }
          }
        }
      }
    }
    

    profilePicture är en innehållsreferens och förväntas vara en bild. Inbyggt ImageRef-objekt används därför. Detta gör att vi kan begära ytterligare data om bilden som ska refereras, som width och height.

Fråga ett enstaka innehållsfragment query-single-cf

Det går också att ställa frågor direkt till ett enda innehållsfragment. Innehåll i AEM lagras hierarkiskt och den unika identifieraren för ett fragment baseras på fragmentets sökväg.

  1. Ange följande fråga i GraphiQL-redigeraren:

    code language-graphql
    query personByPath($path: String!) {
        personByPath(_path: $path) {
            item {
            fullName
            occupation
            }
        }
    }
    
  2. Ange följande för frågevariabler:

    code language-json
    {"path": "/content/dam/my-project/en/alison-smith"}
    
  3. Kör frågan och observera att det enskilda resultatet returneras.

Beständiga frågor persist-queries

När en utvecklare är nöjd med de fråga- och resultatdata som returneras från frågan är nästa steg att lagra eller behålla frågan som ska AEM. Beständiga frågor är den bästa metoden för att exponera GraphQL-API:t för klientprogram. När en fråga har sparats kan den begäras med hjälp av en GET-begäran och cachas i Dispatcher- och CDN-lagren. Prestandan för de beständiga frågorna är mycket bättre. Förutom prestandafördelar säkerställer beständiga frågor att extra data inte oavsiktligt exponeras för klientprogram. Mer information om Beständiga frågor finns här.

Behåll sedan två enkla frågor. De används i nästa kapitel.

  1. Ange följande fråga i GraphiQL IDE:

    code language-graphql
    query allTeams {
        teamList {
            items {
                _path
                title
                shortName
                description {
                    plaintext
                }
                teamMembers {
                    fullName
                    occupation
                }
            }
        }
    }
    

    Kontrollera att frågan fungerar.

  2. Tryck sedan på Spara som och ange all-teams som frågenamn.

    Frågan ska visas under Beständiga frågor i den vänstra listen.

    Alla team - beständig fråga

  3. Tryck sedan på ellipserna bredvid den beständiga frågan och tryck på Kopiera URL för att kopiera sökvägen till Urklipp.

    Kopiera URL för beständig fråga

  4. Öppna en ny flik och klistra in den kopierade sökvägen i webbläsaren:

    code language-plain
    https://$YOUR-AEMasCS-INSTANCEID$.adobeaemcloud.com/graphql/execute.json/my-project/all-teams
    

    Det bör se ut ungefär som banan ovan. Du bör se att JSON-resultatet av frågan returneras.

    Bryter ned URL:en ovan:

    table 0-row-2 1-row-2 2-row-2 3-row-2
    Namn Beskrivning
    /graphql/execute.json Beständig frågeslutpunkt
    /my-project Projektkonfiguration för /conf/my-project
    /all-teams Namnet på den beständiga frågan
  5. Återgå till GraphiQL IDE och använd plusknappen + för att behålla den NYA frågan

    code language-graphql
    query personByName($name: String!) {
      personList(
        filter: {
          fullName:{
            _expressions: [{
              value: $name
              _operator:EQUALS
            }]
          }
        }){
        items {
          _path
          fullName
          occupation
          biographyText {
            json
          }
          profilePicture {
            ... on ImageRef {
              _path
              _authorUrl
              _publishUrl
              width
              height
            }
          }
        }
      }
    }
    
  6. Spara frågan som: person-by-name.

  7. Du bör spara två beständiga frågor:

    Slutliga beständiga frågor

Publish GraphQL Endpoint & Persisted Queries

Publicera GraphQL Endpoint & Persisted Queries vid granskning och verifiering

  1. Gå till Verktyg > Allmänt > GraphQL från AEM startskärm.

  2. Tryck på kryssrutan bredvid Min projektslutpunkt och tryck på Publish

    Publish GraphQL Endpoint

  3. Gå till Verktyg > Allmänt > GraphQL Query Editor från AEM startskärmen.

  4. Tryck på all-teams-frågan från panelen Beständiga frågor och tryck sedan på Publish

    Publish beständiga frågor

  5. Upprepa steget ovan för frågan person-by-name

Lösningsfiler solution-files

Hämta innehåll, modeller och beständiga frågor som skapats i de tre senaste kapitlen: basic-tutorial-solution.content.zip

Ytterligare resurser

Läs mer om GraphQL-frågor på Lär dig använda GraphQL med AEM - exempelinnehåll och frågor.

Grattis! congratulations

Grattis! Du har skapat och kört flera GraphQL-frågor!

Nästa steg next-steps

I nästa kapitel, Build React app, utforskar du hur ett externt program kan fråga AEM GraphQL-slutpunkter och använda dessa två beständiga frågor. En del grundläggande felhantering introduceras också under körningen av GraphQL-frågor.

Installera GraphiQL-verktyget (valfritt) install-graphiql

I vissa versioner av AEM (6.X.X) måste GraphiQL IDE-verktyget installeras manuellt. Använd instruktionerna här.

recommendation-more-help
e25b6834-e87f-4ff3-ba56-4cd16cdfdec4