GraphQL API AEM voor gebruik met inhoudsfragmenten

Leer hoe u inhoudsfragmenten in Adobe Experience Manager (AEM) kunt gebruiken met de AEM GraphQL API voor het leveren van inhoud zonder kop.

AEM GraphQL API die wordt gebruikt met Content Fragments is sterk gebaseerd op de standaard, open-source GraphQL API.

Door de GraphQL API in AEM te gebruiken, kunt u inhoudsfragmenten efficiënt aan JavaScript-clients leveren in CMS-implementaties zonder kop:

  • Herhalende API-aanvragen voorkomen, zoals REST,
  • ervoor zorgen dat de levering beperkt blijft tot de specifieke eisen;
  • Het toestaan voor bulklevering van precies wat voor het teruggeven als antwoord op één enkele API vraag nodig is.
OPMERKING

GraphQL wordt momenteel gebruikt in twee (afzonderlijke) scenario's in Adobe Experience Manager (AEM):

De GraphQL API

GraphQL is:

  • "…een querytaal voor API's en een runtime voor het uitvoeren van deze query's met uw bestaande gegevens. GraphQL biedt een volledige en begrijpelijke beschrijving van de gegevens in uw API, geeft clients de mogelijkheid om precies te vragen wat ze nodig hebben en niets meer, maakt het gemakkelijker om API's in de loop der tijd te ontwikkelen en maakt krachtige ontwikkelaarsgereedschappen mogelijk.".

    Zie GraphQL.org

  • "…een open specificatie voor een flexibele API-laag. Plaats GraphQL over uw bestaande achtergronden om producten sneller dan ooit te bouwen…".

    Zie GraphQL verkennen.

  • "…een taal en specificatie voor gegevensquery die in 2012 intern door Facebook zijn ontwikkeld, voordat deze in 2015 openbaar is uitbesteed. Het biedt een alternatief voor op REST gebaseerde architecturen met als doel de productiviteit van ontwikkelaars te verhogen en de hoeveelheden overgedragen gegevens te minimaliseren. GraphQL wordt gebruikt in productie door honderden organisaties van elke omvang…"

    Zie GraphQL Foundation.

Raadpleeg de volgende secties (onder andere over veel andere bronnen) voor meer informatie over de GraphQL API:

De GraphQL for AEM-implementatie is gebaseerd op de standaard GraphQL Java Library. Zie:

GraphQL Terminologie

GraphQL gebruikt het volgende:

  • Zoekopdrachten

  • Schema's en typen:

    • Schema's worden gegenereerd door AEM op basis van de modellen van inhoudsfragmenten.
    • Met behulp van uw schema's geeft GraphQL de typen en bewerkingen weer die zijn toegestaan voor de GraphQL voor AEM implementatie.
  • Velden

  • GraphQL Endpoint

    • Het pad in AEM dat reageert op GraphQL-query's en toegang biedt tot de GraphQL-schema's.

    • Zie GraphQL Endpoint inschakelen voor nadere bijzonderheden.

Zie de (GraphQL.org) Inleiding tot GraphQL voor uitvoerige informatie, waaronder Aanbevolen werkwijzen.

GraphQL-querytypen

Met GraphQL kunt u query's uitvoeren die worden geretourneerd:

AEM biedt mogelijkheden om query's (beide typen) om te zetten in Blijvende query's, die door Dispatcher en CDN in de cache kunnen worden opgeslagen.

Aanbevolen werkwijzen voor GraphQL-query (Dispatcher en CDN)

De Blijvende query's zijn de aanbevolen methode voor het publiceren van exemplaren als:

  • ze zijn in cache geplaatst
  • zij worden centraal beheerd door AEM
OPMERKING

Gewoonlijk is er geen verzender/CDN op auteur, zodat is er geen aanwinst in het gebruiken van persisted query's daar; behalve het testen ervan.

GraphQL-query's die gebruikmaken van POST-aanvragen worden niet aanbevolen omdat ze niet in de cache zijn opgeslagen, zodat in een standaardinstantie de Dispatcher is geconfigureerd om dergelijke query's te blokkeren.

Hoewel GraphQL ook GET-aanvragen ondersteunt, kunnen deze limieten bereiken (bijvoorbeeld de lengte van de URL) die kunnen worden vermeden door middel van permanente query's.

OPMERKING

De capaciteit om directe vragen uit te voeren kan op een bepaald punt in de toekomst worden verouderd.

GraphQL for AEM Endpoint

Het eindpunt is het pad dat wordt gebruikt om toegang te krijgen tot GraphQL voor AEM. Met dit pad kunt u (of uw app) het volgende doen:

  • toegang tot het GraphQL-schema;
  • je GraphQL query's sturen,
  • de antwoorden ontvangen (op je GraphQL-vragen).

Er zijn twee soorten eindpunten in AEM:

  • Algemeen
    • Beschikbaar voor gebruik door alle sites.
    • Dit eindpunt kan alle Modellen van het Fragment van de Inhoud van alle configuraties van Plaatsen gebruiken (die in Configuratiebrowser).
    • Als er om het even welke Modellen van het Fragment van de Inhoud zijn die onder de configuraties van Plaatsen zouden moeten worden gedeeld, dan zouden deze onder de globale configuraties van Plaatsen moeten worden gecreeerd.
  • Siteconfiguraties:
    • Komt overeen met een configuratie Sites, zoals gedefinieerd in het dialoogvenster Configuratiebrowser.
    • Specifiek voor een opgegeven site/project.
    • Een configuratie-specifiek eindpunt van Plaatsen zal de Modellen van het Fragment van de Inhoud van die specifieke configuratie van Plaatsen samen met die van de globale configuratie van Plaatsen gebruiken.
LET OP

Met de Inhoudsfragmenteditor kan een inhoudsfragment van een siteconfiguratie verwijzen naar een inhoudsfragment van een andere siteconfiguratie (via beleid).

In een dergelijk geval zal niet alle inhoud kunnen terugwinnen gebruikend een de configuratie van Plaatsen specifiek eindpunt.

De inhoudauteur zou dit scenario moeten controleren; Het kan bijvoorbeeld handig zijn om gedeelde modellen van inhoudsfragmenten onder de configuratie Algemene sites te plaatsen.

Het pad naar de opslagplaats van de GraphQL voor AEM globale eindpunt is:

/content/cq:graphql/global/endpoint

Voor welke toepassing uw toepassing het volgende pad in de aanvraag-URL kan gebruiken:

/content/_cq_graphql/global/endpoint.json

Om een eindpunt voor GraphQL voor AEM toe te laten moet u:

GraphQL Endpoint inschakelen

Om een Eindpunt van GraphQL toe te laten moet u eerst een aangewezen configuratie hebben. Zie Inhoudsfragmenten - Configuratiebrowser.

LET OP

Als de gebruik van inhoudsfragmentmodellen is niet ingeschakeldde Maken is niet beschikbaar.

Om het overeenkomstige eindpunt toe te laten:

  1. Navigeren naar Gereedschappen, Activa selecteert u vervolgens GraphQL.

  2. Selecteer Maken.

  3. De Nieuw GraphQL-eindpunt maken wordt geopend. Hier kunt u opgeven:

    • Naam: naam van het eindpunt; U kunt elke gewenste tekst invoeren.
    • GraphQL-schema gebruiken dat wordt geleverd door: Gebruik de vervolgkeuzelijst om de gewenste site of het vereiste project te selecteren.
    OPMERKING

    De volgende waarschuwing wordt weergegeven in het dialoogvenster:

    • GraphQL-eindpunten kunnen problemen met gegevensbeveiliging en -prestaties veroorzaken als deze niet zorgvuldig worden beheerd. Gelieve te verzekeren om aangewezen toestemmingen te plaatsen na het creëren van een eindpunt.
  4. Bevestigen met Maken.

  5. De Volgende stappen de dialoog zal een directe verbinding aan de console van de Veiligheid verstrekken zodat u kunt ervoor zorgen dat het onlangs gecreeerde eindpunt geschikte toestemmingen heeft.

    LET OP

    Het eindpunt is toegankelijk voor iedereen. Dit kan - vooral bij publicatieinstanties - een veiligheidszorg veroorzaken, aangezien de vragen van GraphQL een zware lading op de server kunnen opleggen.

    U kunt opstelling ACLs, aangewezen aan uw gebruiksgeval, op het eindpunt.

GraphQL Endpoint publiceren

Selecteer het nieuwe eindpunt en Publiceren om het volledig beschikbaar te maken in alle milieu's.

LET OP

Het eindpunt is toegankelijk voor iedereen.

Bij het publiceren van instanties kan dit een veiligheidszorg veroorzaken, aangezien de vragen van GraphQL een zware lading op de server kunnen opleggen.

U moet opstelling ACLs aangewezen aan uw gebruiksgeval op het eindpunt.

GraphiQL Interface

Tenuitvoerlegging van de norm GraphiQL kan worden gebruikt met AEM GraphQL.

OPMERKING

GraphiQL is inbegrepen in alle milieu's van AEM (maar zal slechts toegankelijk/zichtbaar zijn wanneer u uw eindpunten vormt).

In vorige versies was een pakket nodig om GraphiQL IDE te installeren. Als u deze installatie hebt, kunt u deze nu verwijderen.

Met deze interface kunt u query's rechtstreeks invoeren en testen.

Bijvoorbeeld:

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

Dit biedt functies zoals syntaxismarkering, automatisch aanvullen, automatisch voorstellen, samen met een geschiedenis en online documentatie:

GraphiQL Interface
OPMERKING

Zie voor meer informatie GraphiQL IDE gebruiken.

Kwesties gebruiken voor auteur- en publicatie-omgevingen

De gebruiksgevallen kunnen afhankelijk zijn van het type AEM omgeving:

  • Publicatie-omgeving; gebruikt voor:

    • Query-gegevens voor JS-toepassing (standaardgebruikscenario)
  • Auteursomgeving; gebruikt voor:

    • Query-gegevens voor "inhoudsbeheerdoeleinden":
      • GraphQL in AEM is momenteel een alleen-lezen API.
      • De REST-API kan worden gebruikt voor CR(u)D-bewerkingen.

Machtigingen

De machtigingen zijn vereist voor toegang tot middelen.

GraphQL query's worden uitgevoerd met toestemming van de AEM gebruiker van het onderliggende verzoek. Als de gebruiker geen leestoegang heeft tot bepaalde fragmenten (die als Elementen worden opgeslagen), zullen zij geen deel van de resultaatreeks worden.

Bovendien moet de gebruiker toegang hebben tot een GraphQL-eindpunt om GraphQL-query's uit te kunnen voeren.

Schema genereren

GraphQL is een sterk getypeerde API, wat betekent dat de gegevens duidelijk gestructureerd en ingedeeld moeten zijn per type.

De GraphQL-specificatie biedt een aantal richtlijnen voor het maken van een robuuste API voor het ondervragen van gegevens over een bepaalde instantie. Om dit te doen, moet een cliënt halen Schema, die alle typen bevat die nodig zijn voor een query.

Voor inhoudsfragmenten zijn de GraphQL-schema's (structuur en typen) gebaseerd op Ingeschakeld Modellen van inhoudsfragmenten en hun gegevenstypen.

LET OP

Alle GraphQL-schema's (afgeleid van Content Fragment Models) die zijn Ingeschakeld) zijn leesbaar via het GraphQL-eindpunt.

Dit betekent dat u ervoor moet zorgen dat er geen gevoelige gegevens beschikbaar zijn, aangezien deze op deze manier kunnen worden gelekt; Dit omvat bijvoorbeeld informatie die als veldnamen in de modeldefinitie aanwezig kan zijn.

Als een gebruiker bijvoorbeeld een Content Fragment Model heeft gemaakt, genaamd ArticleAEM het object genereren article van een type ArticleModel. De velden in dit type komen overeen met de velden en gegevenstypen die in het model zijn gedefinieerd.

  1. A Content Fragment Model:

    Inhoudsfragmentmodel voor gebruik met GraphQL
  2. Het corresponderende GraphQL-schema (uitvoer van de automatische documentatie GraphiQL):
    GraphQL-schema gebaseerd op inhoudsfragmentmodel

    Dit toont aan dat het geproduceerde type ArticleModel bevat diverse velden.

    • Drie van hen zijn gecontroleerd door de gebruiker: author, main en referencearticle.

    • De andere velden zijn automatisch toegevoegd door AEM en zijn nuttige methoden voor het verschaffen van informatie over een bepaald inhoudsfragment. in dit voorbeeld: _path, _metadata, _variations. Deze helpervelden zijn gemarkeerd met een voorgaande _ om onderscheid te maken tussen wat door de gebruiker is gedefinieerd en wat automatisch is gegenereerd.

  3. Nadat een gebruiker een inhoudsfragment heeft gemaakt op basis van het artikelmodel, kan het vervolgens worden ondervraagd via GraphQL. Zie voor voorbeelden de Voorbeeldquery's (op basis van een voorbeeldstructuur van inhoudsfragment voor gebruik met GraphQL).

In GraphQL for AEM is het schema flexibel. Dit betekent dat deze telkens automatisch wordt gegenereerd wanneer een inhoudsfragmentmodel wordt gemaakt, bijgewerkt of verwijderd. De caches voor het gegevensschema worden ook vernieuwd wanneer u een model van het inhoudsfragment bijwerkt.

De service Sites GraphQL luistert (op de achtergrond) naar eventuele wijzigingen die zijn aangebracht in een inhoudsfragmentmodel. Wanneer updates worden ontdekt, slechts wordt dat deel van het schema opnieuw geproduceerd. Deze optimalisatie bespaart tijd en zorgt voor stabiliteit.

Als u bijvoorbeeld:

  1. Een pakket installeren met Content-Fragment-Model-1 en Content-Fragment-Model-2:

    1. GraphQL-typen voor Model-1 en Model-2 wordt gegenereerd.
  2. Vervolgens wijzigen Content-Fragment-Model-2:

    1. Alleen de Model-2 GraphQL-type wordt bijgewerkt.

    2. Overwegende Model-1 blijft hetzelfde.

OPMERKING

Dit is belangrijk om op te merken voor het geval u bulkupdates op de Modellen van het Fragment van de Inhoud door REST api, of anders wilt doen.

Het schema wordt gediend door het zelfde eindpunt zoals de vragen van GraphQL, met de cliënt die het feit behandelt dat het schema met de uitbreiding wordt geroepen GQLschema. U kunt bijvoorbeeld een eenvoudige GET verzoek op /content/cq:graphql/global/endpoint.GQLschema resulteert in de uitvoer van het schema met het inhoudstype: text/x-graphql-schema;charset=iso-8859-1.

Schema genereren - Niet-gepubliceerde modellen

Wanneer Inhoudsfragmenten zijn genest, kan een bovenliggend inhoudsfragmentmodel worden gepubliceerd, maar een model waarnaar wordt verwezen, niet.

OPMERKING

De AEM UI verhindert dit gebeurt, maar als het publiceren programmatically, of met inhoudspakketten wordt gemaakt, kan het voorkomen.

Wanneer dit gebeurt, genereert AEM een onvolledig Schema voor het bovenliggende inhoudsfragmentmodel. Dit betekent dat de fragmentverwijzing, die afhankelijk is van het niet-gepubliceerde model, uit het schema wordt verwijderd.

Fields

Binnen het schema zijn er afzonderlijke velden, van twee basiscategorieën:

  • Velden die u genereert.

    Een selectie van Veldtypen worden gebruikt om velden te maken die zijn gebaseerd op de manier waarop u het inhoudsfragmentmodel configureert. De veldnamen zijn afkomstig uit het Eigenschapnaam van het Gegevenstype.

    • Er is ook Renderen als in aanmerking te nemen eigenschap, omdat gebruikers bepaalde gegevenstypen kunnen configureren; bijvoorbeeld als tekst met één regel of als een tekstveld met meerdere regels.
  • GraphQL for AEM genereert ook een aantal helpervelden.

    Deze worden gebruikt om een inhoudsfragment te identificeren of om meer informatie over een inhoudsfragment te krijgen.

Veldtypen

GraphQL for AEM ondersteunt een lijst met typen. Alle ondersteunde gegevenstypen van het inhoudsfragmentmodel en de bijbehorende GraphQL-typen worden weergegeven:

Inhoudsfragmentmodel - Gegevenstype GraphQL-type Beschrijving
Tekst met één regel String, [String] Wordt gebruikt voor eenvoudige tekenreeksen, zoals namen van auteurs, locaties, enzovoort.
Tekst met meerdere regels Tekenreeks Wordt gebruikt voor het uitvoeren van tekst, zoals de hoofdtekst van een artikel
Getal Float [Float] Wordt gebruikt om het zwevende-kommagetal en de reguliere getallen weer te geven
Boolean Boolean Gebruikt om selectievakjes weer te geven → eenvoudige true/false-instructies
Datum en tijd Kalender Wordt gebruikt om datum en tijd weer te geven in de ISO 8086-indeling. Afhankelijk van het geselecteerde type zijn er drie kleuren beschikbaar voor gebruik in AEM GraphQL: onlyDate, onlyTime, dateTime
Opsomming Tekenreeks Wordt gebruikt om een optie weer te geven uit een lijst met opties die bij het maken van het model zijn gedefinieerd
Tags [Tekenreeks] Wordt gebruikt om een lijst weer te geven met tekenreeksen die tags vertegenwoordigen die in AEM worden gebruikt
Content Reference Tekenreeks Wordt gebruikt om het pad naar een ander element in AEM weer te geven
Fragmentverwijzing Een modeltype Wordt gebruikt om te verwijzen naar een ander inhoudsfragment van een bepaald modeltype, dat is gedefinieerd toen het model werd gemaakt.

Helpervelden

Naast de gegevenstypen voor door de gebruiker gegenereerde velden, genereert GraphQL for AEM ook een aantal helper velden voor het herkennen van een inhoudsfragment of voor het verschaffen van aanvullende informatie over een inhoudsfragment.

Pad

Het padveld wordt gebruikt als een identifier in GraphQL. Het vertegenwoordigt het pad van het Content Fragment-element in de AEM opslagplaats. Dit is de id van een inhoudsfragment, omdat dit:

  • uniek is binnen AEM,
  • kan gemakkelijk worden opgehaald.

De volgende code geeft de paden weer van alle inhoudsfragmenten die zijn gemaakt op basis van het model van het inhoudsfragment Person.

{
  personList {
    items {
      _path
    }
  }
}

Als u één inhoudsfragment van een bepaald type wilt ophalen, moet u ook eerst het pad bepalen. bijvoorbeeld:

{
  personByPath(_path: "/content/dam/path/to/fragment/john-doe") {
    item {
      _path
      firstName
      name
    }
  }
}

Zie Voorbeeldquery - één specifiek stedenfragment.

Metagegevens

Via GraphQL worden AEM ook de metagegevens van een inhoudsfragment beschikbaar gemaakt. Metagegevens zijn de informatie die een inhoudsfragment beschrijft, zoals de titel van een inhoudsfragment, het miniatuurpad, de beschrijving van een inhoudsfragment en de datum waarop het is gemaakt.

Omdat metagegevens worden gegenereerd via de Schema-editor en als zodanig geen specifieke structuur hebben, TypedMetaData Het GraphQL-type is geïmplementeerd om de metagegevens van een inhoudsfragment beschikbaar te maken. TypedMetaData stelt de informatie bloot die door de volgende scalaire types wordt gegroepeerd:

Veld
stringMetadata:[StringMetadata]!
stringArrayMetadata:[StringArrayMetadata]!
intMetadata:[IntMetadata]!
intArrayMetadata:[IntArrayMetadata]!
floatMetadata:[FloatMetadata]!
floatArrayMetadata:[FloatArrayMetadata]!
booleanMetadata:[BooleanMetadata]!
booleanArrayMetadata:[booleanArrayMetadata]!
calendarMetadata:[CalendarMetadata]!
calendarArrayMetadata:[CalendarArrayMetadata]!

Elk scalair type vertegenwoordigt of één enkel naam-waarde paar of een serie van naam-waarde paren, waar de waarde van dat paar van het type is het werd gegroepeerd.

Als u bijvoorbeeld de titel van een inhoudsfragment wilt ophalen, weten we dat deze eigenschap een String-eigenschap is, zodat we een query voor alle String-metagegevens uitvoeren:

Ga als volgt te werk om te zoeken naar metagegevens:

{
  personByPath(_path: "/content/dam/path/to/fragment/john-doe") {
    item {
      _path
      _metadata {
        stringMetadata {
          name
          value
        }
      }
    }
  }
}

U kunt alle GraphQL-typen voor metagegevens weergeven als u het schema Gegenereerde GraphQL weergeeft. Alle modeltypen hebben dezelfde TypedMetaData.

OPMERKING

Verschil tussen normale metagegevens en arraymetagegevens
Houd er rekening mee dat StringMetadata en StringArrayMetadata beide verwijzen naar wat in de bewaarplaats wordt opgeslagen, niet hoe u hen terugwint.

Bijvoorbeeld door de stringMetadata veld, ontvangt u een array van alle metagegevens die in de repository zijn opgeslagen als een String en als u stringArrayMetadata u ontvangt dan een array met alle metagegevens die in de repository zijn opgeslagen als String[].

Zie Voorbeeldquery voor metagegevens - Lijst met metagegevens voor onderscheidingen: GB.

Variaties

De _variations is geïmplementeerd om het opvragen van variaties in een inhoudsfragment te vereenvoudigen. Bijvoorbeeld:

{
  personByPath(_path: "/content/dam/path/to/fragment/john-doe") {
    item {
      _variations
    }
  }
}

Zie Voorbeeldquery - Alle steden met een benoemde variatie.

OPMERKING

Als de opgegeven variatie niet bestaat voor een inhoudsfragment, wordt de master variatie geretourneerd als standaard (fallback).

GraphQL-variabelen

GraphQL staat toe dat variabelen in de query worden geplaatst. Voor meer informatie kunt u de GraphQL-documentatie voor variabelen.

Als u bijvoorbeeld alle inhoudsfragmenten van het type wilt ophalen Article die een specifieke variatie hebben, kunt u de variabele opgeven variation in GraphiQL.

GraphQL-variabelen
### query
query GetArticlesByVariation($variation: String!) {
    articleList(variation: $variation) {
        items {
            _path
            author
            _variations
        }
    }
}

### in query variables
{
    "variation": "uk"
}

GraphQL-richtlijnen

In GraphQL bestaat de mogelijkheid om de query te wijzigen op basis van variabelen, de zogenaamde GraphQL-richtlijnen.

U kunt bijvoorbeeld de opdracht adventurePrice veld in een query voor alle AdventureModels, gebaseerd op een variabele includePrice.

GraphQL-richtlijnen
### query
query GetAdventureByType($includePrice: Boolean!) {
  adventureList {
    items {
      adventureTitle
      adventurePrice @include(if: $includePrice)
    }
  }
}

### in query variables
{
    "includePrice": true
}

Filteren

U kunt filteren ook gebruiken in uw GraphQL-query's om specifieke gegevens te retourneren.

Bij het filteren wordt een syntaxis gebruikt die is gebaseerd op logische operatoren en expressies.

Met de volgende (basis)query worden bijvoorbeeld alle personen gefilterd die een naam hebben van Jobs of Smith:

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

Zie voor meer voorbeelden:

GraphQL for AEM - Overzicht van extensies

De basisverrichting van vragen met GraphQL voor AEM voldoet aan de standaardspecificatie van GraphQL. Voor GraphQL-query's met AEM zijn er een paar extensies:

CORS-filter

OPMERKING

Voor een gedetailleerd overzicht van het beleid voor het delen van bronnen in AEM zie Werken met het delen van bronnen tussen verschillende bronnen (CORS).

Om tot het eindpunt van GraphQL toegang te hebben, moet een beleid CORS in de bewaarplaats van de Kit van de klant worden gevormd. Dit wordt gedaan door een aangewezen OSGi CORS configuratiedossier voor het gewenste eindpunt (s) toe te voegen.

Deze configuratie moet een vertrouwde website-oorsprong opgeven alloworigin of alloworiginregexp waarvoor toegang moet worden verleend.

Bijvoorbeeld, om toegang tot het eindpunt van GraphQL en voortgeduurde vragen te verlenen eindpunt voor https://my.domain u kunt gebruiken:

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

Als u een ijdelingspad voor het eindpunt hebt gevormd, kunt u het binnen ook gebruiken allowedpaths.

Refererfilter

Naast de configuratie CORS, moet een filter van de Referateur worden gevormd om toegang van derdeshosts toe te staan.

Dit wordt gedaan door een aangewezen OSGi de configuratiedossier van de Filter toe te voegen dat:

  • geeft een hostnaam voor een vertrouwde website aan; ofwel allow.hosts of allow.hosts.regexp,
  • verleent toegang voor deze gastheernaam.

Bijvoorbeeld om toegang voor verzoeken met de Referiteur te verlenen my.domain u kunt:

{
    "allow.empty":false,
    "allow.hosts":[
      "my.domain"
    ],
    "allow.hosts.regexp":[
      ""
    ],
    "filter.methods":[
      "POST",
      "PUT",
      "DELETE",
      "COPY",
      "MOVE"
    ],
    "exclude.agents.regexp":[
      ""
    ]
}
LET OP

Het blijft de verantwoordelijkheid van de klant om:

  • alleen toegang verlenen tot vertrouwde domeinen
  • ervoor zorgen geen gevoelige informatie wordt blootgesteld
  • geen jokerteken gebruiken [*] syntaxis; dit zal zowel voor authentiek verklaarde toegang tot het eindpunt van GraphQL onbruikbaar maken als het aan de volledige wereld blootstellen.
LET OP

Alle GraphQL schema's (afgeleid van Content Fragment Models die Ingeschakeld) zijn leesbaar via het GraphQL-eindpunt.

Dit betekent dat u ervoor moet zorgen dat er geen gevoelige gegevens beschikbaar zijn, aangezien deze op deze manier kunnen worden gelekt; Dit omvat bijvoorbeeld informatie die als veldnamen in de modeldefinitie aanwezig kan zijn.

Verificatie

Zie Verificatie voor externe AEM GraphQL-query's op inhoudsfragmenten.

Veelgestelde vragen

De gerezen vragen:

  1. Q: "Hoe verschilt de GraphQL API voor AEM van de Query Builder-API?"

    • A: "De AEM GraphQL API biedt volledige controle op de JSON-uitvoer en is een industriestandaard voor het opvragen van inhoud.
      AEM is van plan om in de AEM GraphQL API te investeren.
      "

Zelfstudie - Aan de slag met AEM Headless en GraphQL

Op zoek naar een praktische zelfstudie? Uitchecken Aan de slag met AEM Headless en GraphQL end-to-end zelfstudie waarin wordt geïllustreerd hoe u in een CMS-scenario inhoud kunt ontwikkelen en beschikbaar maken met de GraphQL-API's van AEM en die door een externe toepassing wordt verbruikt.

Op deze pagina