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.
-
Gå till Verktyg > Allmänt > GraphQL från AEM startskärm.
-
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
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. -
Nu bör en GraphQL-slutpunkt vara aktiverad i din miljö.
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.
-
Gå till Verktyg > Allmänt > GraphQL Query Editor från AEM startskärmen.
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. -
Kontrollera att slutpunkten är inställd på Min projektslutpunkt i det övre högra hörnet.
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.
-
Klistra in följande fråga i huvudpanelen (ersätter kommentarlistan):
code language-graphql query allTeams { teamList { items { _path title } } }
-
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:
-
Placera markören under texten
title
och ange CTRL+Space för att utlösa kodtips. Lägg tillshortname
ochdescription
i frågan. -
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
ochdescription
.shortname
är en enkel egenskap ochdescription
är ett textfält med flera rader och med GraphQL API kan vi välja olika format för resultat somhtml
,markdown
,json
ellerplaintext
.
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.
-
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.
-
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
. -
Ange följande på panelen Frågevariabler:
code language-json {"name": "John Doe"}
-
Kör frågan. Endast Personer innehållsfragment returneras med värdet
John Doe
.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.
-
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. InbyggtImageRef
-objekt används därför. Detta gör att vi kan begära ytterligare data om bilden som ska refereras, somwidth
ochheight
.
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.
-
Ange följande fråga i GraphiQL-redigeraren:
code language-graphql query personByPath($path: String!) { personByPath(_path: $path) { item { fullName occupation } } }
-
Ange följande för frågevariabler:
code language-json {"path": "/content/dam/my-project/en/alison-smith"}
-
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.
-
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.
-
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.
-
Tryck sedan på ellipserna … bredvid den beständiga frågan och tryck på Kopiera URL för att kopiera sökvägen till Urklipp.
-
Ö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 -
Å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 } } } } }
-
Spara frågan som:
person-by-name
. -
Du bör spara två beständiga frågor:
Publish GraphQL Endpoint & Persisted Queries
Publicera GraphQL Endpoint
& Persisted Queries
vid granskning och verifiering
-
Gå till Verktyg > Allmänt > GraphQL från AEM startskärm.
-
Tryck på kryssrutan bredvid Min projektslutpunkt och tryck på Publish
-
Gå till Verktyg > Allmänt > GraphQL Query Editor från AEM startskärmen.
-
Tryck på all-teams-frågan från panelen Beständiga frågor och tryck sedan på Publish
-
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.