GraphQL API's verkennen explore-graphql-apis
De GraphQL API van AEM biedt een krachtige querytaal om gegevens van Content Fragments toegankelijk te maken voor downstreamtoepassingen. De modellen van het Fragment van de inhoud bepalen het gegevensschema dat door de Fragmenten van de Inhoud wordt gebruikt. Wanneer een Content Fragment Model wordt gemaakt of bijgewerkt, wordt het schema vertaald en toegevoegd aan de "grafiek" die de GraphQL API vormt.
In dit hoofdstuk, onderzoeken sommige gemeenschappelijke vragen van GraphQL om inhoud te verzamelen gebruikend winde genoemd GraphiQL. Met GraphiQL IDE kunt u snel de geretourneerde query's en gegevens testen en verfijnen. Het biedt ook eenvoudige toegang tot de documentatie, waardoor u gemakkelijk kunt leren en begrijpen welke methoden beschikbaar zijn.
Vereisten prerequisites
Dit is een meerdelig leerprogramma en het wordt verondersteld dat de stappen die in worden geschetst de Begeleidende Fragmenten van de Inhoudzijn voltooid.
Doelstellingen objectives
- Leer om het hulpmiddel te gebruiken GraphiQL om een vraag te construeren gebruikend de syntaxis van GraphQL.
- Leer hoe u een lijst met inhoudsfragmenten en één inhoudsfragment kunt opvragen.
- Leer hoe u specifieke gegevenskenmerken kunt filteren en aanvragen.
- Leer hoe u een query uitvoert op meerdere modellen van inhoudsfragmenten
- Leer hoe je GraphQL query kunt voortzetten.
GraphQL-eindpunt inschakelen enable-graphql-endpoint
Een eindpunt van GraphQL moet worden gevormd om GraphQL API vragen voor de Fragments van de Inhoud toe te laten.
-
Van het AEM scherm van het Begin, navigeer aan Hulpmiddelen > Algemeen > GraphQL.
-
Tik creeer in de hoger-juiste hoek, in de resulterende dialoog ga de volgende waarden in:
- Naam*: Mijn Eindpunt van het Project.
- Het schema van GraphQL van het gebruik door… * wordt verstrekt: Mijn Project
Tik creeer om het eindpunt te bewaren.
De GraphQL eindpunten die op een projectconfiguratie worden gecreeerd laten slechts vragen tegen modellen toe die tot dat project behoren. In dit geval, kunnen de enige vragen tegen de Persoon en modellen van het Team worden gebruikt.
note note NOTE Een Globaal eindpunt kan ook worden gecreeerd om vragen tegen modellen over veelvoudige configuraties toe te laten. Dit moet met voorzichtigheid worden gebruikt aangezien het het milieu voor extra veiligheidskwetsbaarheid kan openen, en aan algemene ingewikkeldheid bij het beheren van AEM kan toevoegen. -
Er moet nu één GraphQL-eindpunt worden weergegeven dat op uw omgeving is ingeschakeld.
GraphiQL IDE gebruiken
Het GraphiQLhulpmiddel laat ontwikkelaars toe om vragen tegen inhoud op het huidige AEM milieu tot stand te brengen en te testen. Het hulpmiddel GraphiQL laat ook gebruikers toe om voort te zetten of vragen te bewaren die door cliënttoepassingen in een productie het plaatsen moeten worden gebruikt.
Verken vervolgens de kracht van het AEM van GraphQL API met behulp van de ingebouwde GraphiQL IDE.
-
Van het AEM scherm van het Begin, navigeer aan Hulpmiddelen > Algemeen > de Redacteur van de Vraag van GraphQL.
note note NOTE In, kunnen de oudere versies van AEM GrahiQL winde niet worden ingebouwd. Het kan manueel na deze instructiesworden geïnstalleerd. -
In de hoger-juiste hoek, zorg ervoor dat het Eindpunt aan Mijn Eindpunt van het Project wordt geplaatst.
Dit zal werkingsgebied alle vragen aan modellen die in het Mijn project van het Project worden gecreeerd.
Een query uitvoeren op een lijst met inhoudsfragmenten query-list-cf
Een algemene vereiste is om te zoeken naar meerdere inhoudsfragmenten.
-
Plak de volgende query in het hoofdvenster (vervang de lijst met opmerkingen):
code language-graphql query allTeams { teamList { items { _path title } } }
-
Druk de knoop van het Spel in het hoogste menu om de vraag uit te voeren. De resultaten van de inhoudsfragmenten uit het vorige hoofdstuk worden weergegeven:
-
Plaats de curseur onder de
title
tekst en ga CTRL+Space in om coderingstips teweeg te brengen. Voegshortname
endescription
toe aan de query. -
Voer opnieuw de vraag uit door de Spel knoop te drukken en u zou moeten zien dat de resultaten de extra eigenschappen van
shortname
endescription
omvatten.shortname
is een eenvoudige eigenschap endescription
is een tekstveld met meerdere regels en met de GraphQL API kunnen we verschillende indelingen kiezen voor de resultaten zoalshtml
,markdown
,json
ofplaintext
.
Query voor geneste fragmenten
Daarna, experiment met het vragen wint genestelde fragmenten terug, herinner eraan dat het Team modelverwijzingen het Person model.
-
Werk de query bij om de eigenschap
teamMembers
op te nemen. Rappel dat dit a gebied van de Verwijzing van het 0} Fragment {aan het Model van de Persoon is. Eigenschappen van het Person-model kunnen worden geretourneerd:code language-graphql query allTeams { teamList { items { _path title shortName description { plaintext } teamMembers { fullName occupation } } } }
JSON-reactie:
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" ] } ] } ] } } }
De mogelijkheid om te zoeken op geneste fragmenten is een krachtige functie van de AEM GraphQL API. In dit eenvoudige voorbeeld is het nesten slechts twee niveaus diep. Maar het is mogelijk om fragmenten nog verder te nesten. Bijvoorbeeld, als er een 1} model van het Adres {verbonden aan a Persoon was zou het mogelijk zijn om gegevens van alle drie modellen in één enkele vraag terug te keren.
Een lijst met inhoudsfragmenten filteren filter-list-cf
Daarna, kijken hoe het mogelijk is om de resultaten aan een ondergroep van Inhoudsfragmenten te filtreren die op een bezitswaarde worden gebaseerd.
-
Ga de volgende vraag in GraphiQL UI in:
code language-graphql query personByName($name:String!){ personList( filter:{ fullName:{ _expressions:[{ value:$name _operator:EQUALS }] } } ){ items{ _path fullName occupation } } }
De bovenstaande query voert een zoekopdracht uit tegen alle Person-fragmenten in het systeem. Het toegevoegde filter aan het begin van de query voert een vergelijking uit op het veld
name
en de variabele tekenreeks$name
. -
In het paneel van de Variabelen van de Vraag ga het volgende in:
code language-json {"name": "John Doe"}
-
Voer de vraag uit, wordt het verwacht dat slechts het Fragment van de Inhoud van de Personen met een waarde van
John Doe
is teruggekeerd.Er zijn vele andere opties voor het filtreren en het creëren van complexe vragen, zie Lerend om GraphQL met AEM te gebruiken - de Inhoud en Vragen van de Steekproef.
-
Verbeter bovenstaande query om profielafbeelding op te halen
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
is een inhoudsverwijzing en wordt verwacht dat het een afbeelding is; daarom wordt een ingebouwdImageRef
-object gebruikt. Op deze manier kunnen we aanvullende gegevens opvragen over de afbeelding waarnaar wordt verwezen, zoals dewidth
enheight
.
Een query uitvoeren op één inhoudsfragment query-single-cf
Het is ook mogelijk rechtstreeks een query uit te voeren op één inhoudsfragment. Inhoud in AEM wordt hiërarchisch opgeslagen en de unieke id voor een fragment is gebaseerd op het pad van het fragment.
-
Ga de volgende vraag in de redacteur GraphiQL in:
code language-graphql query personByPath($path: String!) { personByPath(_path: $path) { item { fullName occupation } } }
-
Ga het volgende voor de Variabelen van de Vraag in:
code language-json {"path": "/content/dam/my-project/en/alison-smith"}
-
Voer de vraag uit en neem waar dat het enige resultaat is teruggekeerd.
Zoekopdrachten behouden persist-queries
Zodra een ontwikkelaar met de vraag en resultaatgegevens tevreden is die van de vraag zijn teruggekeerd, moet de volgende stap de vraag opslaan of voortzetten aan AEM. De Verlengde vragenzijn het aangewezen mechanisme om GraphQL API aan cliënttoepassingen bloot te stellen. Zodra een vraag is voortgeduurd, kan het worden gevraagd gebruikend een verzoek van de GET en in het voorgeheugen ondergebracht bij de lagen van Dispatcher en CDN. De prestaties van de gepresteerde vragen zijn veel beter. Naast prestatievoordelen zorgen permanente query's ervoor dat extra gegevens niet per ongeluk aan clienttoepassingen worden blootgesteld. Meer details over Verblijfsde vragen kunnen hierworden gevonden.
Daarna, persisteert twee eenvoudige vragen, worden zij gebruikt in het volgende hoofdstuk.
-
Ga de volgende vraag in GrahiQL winde in:
code language-graphql query allTeams { teamList { items { _path title shortName description { plaintext } teamMembers { fullName occupation } } } }
Controleer of de query werkt.
-
De volgende tikken sparen als en gaan
all-teams
als Naam van de Vraag in.De vraag zou onder Verlengde Vragen in het linkerspoor moeten worden getoond.
-
Tik daarna de ellipsen … naast de blijvende vraag en tik Exemplaar URL om de weg aan uw klembord te kopiëren.
-
Open een nieuw tabblad en plak het gekopieerde pad in uw browser:
code language-plain https://$YOUR-AEMasCS-INSTANCEID$.adobeaemcloud.com/graphql/execute.json/my-project/all-teams
Het moet er ongeveer zo uitzien als het bovenstaande pad. U moet zien dat de JSON-resultaten van de geretourneerde query.
De bovenstaande URL opsplitsen:
table 0-row-2 1-row-2 2-row-2 3-row-2 Naam Beschrijving /graphql/execute.json
Blijvend zoekeindpunt /my-project
Projectconfiguratie voor /conf/my-project
/all-teams
Naam van de voortgezette query -
Terugkeer naar GrahiQL winde en gebruik de plus knoop + om de NIEUWE vraag voort te zetten
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 } } } } }
-
Sla de query op als:
person-by-name
. -
Er moeten twee doorlopende query's worden opgeslagen:
Publish GraphQL Endpoint & Persisted Queries
Publiceer na revisie en verificatie de GraphQL Endpoint
& Persisted Queries
-
Van het AEM scherm van het Begin, navigeer aan Hulpmiddelen > Algemeen > GraphQL.
-
Tik checkbox naast Mijn Eindpunt van het Project en tik Publish
-
Van het AEM scherm van het Begin, navigeer aan Hulpmiddelen > Algemeen > de Redacteur van de Vraag van GraphQL
-
Tik alle-teams vraag van het Persisted paneel van Vragen en ontvang Publish
-
Bovenste stap herhalen voor
person-by-name
-query
Oplossingsbestanden solution-files
Download de inhoud, de modellen, en de voortgezette vragen die in de laatste drie hoofdstukken worden gecreeerd: basis-tutorial-solution.content.zip
Aanvullende bronnen
Leer meer over de vragen van GraphQL bij het Leren om GraphQL met AEM te gebruiken - de Inhoud van de Steekproef en Vragen.
Gefeliciteerd! congratulations
U hebt verschillende GraphQL-query's gemaakt en uitgevoerd.
Volgende stappen next-steps
In het volgende hoofdstuk, bouwt Reageren app, verkent u hoe een externe toepassing AEM GraphQL endpoints kan vragen en deze twee voortgeduurde vragen gebruiken. Er is ook een aantal standaardfoutafhandeling geïntroduceerd tijdens het uitvoeren van GraphQL-query's.
GraphiQL installeren (optioneel) install-graphiql
In, moeten sommige versies van AEM (6.X.X) het hulpmiddel van winde GraphiQL manueel worden geïnstalleerd, gebruik de instructies van hier.