Blijvende query's zijn GraphQL-query's die zijn gemaakt en opgeslagen op de Adobe Experience Manager (AEM)-server. Ze kunnen worden aangevraagd met een GET-aanvraag door clienttoepassingen. De reactie van een verzoek van de GET kan bij de lagen van het Netwerk van de Levering van de Verzender en van de Inhoud (CDN) worden in het voorgeheugen ondergebracht, uiteindelijk verbeterend de prestaties van de het verzoeken cliënttoepassing. Dit verschilt van standaard GraphQL query's, die worden uitgevoerd met behulp van POST-aanvragen waarbij de reactie niet gemakkelijk in cache kan worden geplaatst.
De GraphiQL IDE is beschikbaar in AEM voor u om uw GraphQL-query's te ontwikkelen, te testen en voort te zetten voordat overbrengen naar uw productieomgeving. Voor gevallen die aanpassing vereisen (bijvoorbeeld wanneer cache aanpassen) u kunt de API gebruiken; zie het cURL-voorbeeld in Een GraphQL-query laten doorgaan.
De aanhoudende vragen moeten altijd het eindpunt met betrekking tot geschikte configuratie Sites; zodat ze beide of beide kunnen gebruiken:
Zie Functionaliteit van inhoudsfragment inschakelen in configuratievenster voor meer informatie .
De Aangehouden GraphQL-query's moet worden toegelaten, voor de aangewezen configuratie van Plaatsen.
Als er bijvoorbeeld een bepaalde query wordt uitgevoerd, my-query
, die een model gebruikt my-model
vanuit de configuratie Sites my-conf
:
my-conf
specifiek eindpunt, en dan zal de vraag als volgt worden bewaard:/conf/my-conf/settings/graphql/persistentQueries/my-query
global
eindpunt, maar dan zal de vraag als volgt worden bewaard:/conf/global/settings/graphql/persistentQueries/my-query
Dit zijn twee verschillende query's die zijn opgeslagen onder verschillende paden.
Ze gebruiken gewoon hetzelfde model, maar via verschillende eindpunten.
Aanbevolen wordt om query's in een AEM ontwerpomgeving in eerste instantie voort te zetten en vervolgens de query overdragen naar uw productie AEM publicatieomgeving, voor gebruik door toepassingen.
Er zijn verschillende methoden om query's te blijven uitvoeren, waaronder:
GraphiQL IDE is de voorkeur methode voor het voortduren van vragen. Om een bepaalde vraag voort te zetten gebruikend cURL opdrachtregelgereedschap:
Bereid de vraag door PUTing het aan het nieuwe eindpunt URL voor /graphql/persist.json/<config>/<persisted-label>
.
Maak bijvoorbeeld een doorlopende query:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query" \
-d \
'{
articleList {
items{
_path
author
main {
json
}
}
}
}'
Controleer nu het antwoord.
Controleer bijvoorbeeld of het programma is gelukt:
{
"action": "create",
"configurationName": "wknd",
"name": "plain-article-query",
"shortPath": "/wknd/plain-article-query",
"path": "/conf/wknd/settings/graphql/persistentQueries/plain-article-query"
}
U kunt de voortgezette vraag dan verzoeken door URL te winnen /graphql/execute.json/<shortPath>
.
Gebruik bijvoorbeeld de voortgezette query:
$ curl -X GET \
http://localhost:4502/graphql/execute.json/wknd/plain-article-query
Werk een voortgezette vraag door POSTing aan een reeds bestaand vraagweg bij.
Gebruik bijvoorbeeld de voortgezette query:
$ curl -X POST \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query" \
-d \
'{
articleList {
items{
_path
author
main {
json
}
referencearticle {
_path
}
}
}
}'
Een onbewerkte query maken.
Bijvoorbeeld:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query-wrapped" \
-d \
'{ "query": "{articleList { items { _path author main { json } referencearticle { _path } } } }"}'
Creeer een verpakte onbewerkte vraag met geheim voorgeheugencontrole.
Bijvoorbeeld:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query-max-age" \
-d \
'{ "query": "{articleList { items { _path author main { json } referencearticle { _path } } } }", "cache-control": { "max-age": 300 }}'
Maak een doorlopende query met parameters:
Bijvoorbeeld:
$ curl -X PUT \
-H 'authorization: Basic YWRtaW46YWRtaW4=' \
-H "Content-Type: application/json" \
"http://localhost:4502/graphql/persist.json/wknd/plain-article-query-parameters" \
-d \
'query GetAsGraphqlModelTestByPath($apath: String!, $withReference: Boolean = true) {
articleByPath(_path: $apath) {
item {
_path
author
main {
plaintext
}
referencearticle @include(if: $withReference) {
_path
}
}
}
}'
Een clienttoepassing vraagt een aanvraag tot GET met de volgende syntaxis uit om een query met behoud van waarden uit te voeren:
GET <AEM_HOST>/graphql/execute.json/<PERSISTENT_PATH>
Wanneer PERSISTENT_PATH
is een verkort pad naar de opslaglocatie van de Persisted-query.
Bijvoorbeeld wknd
is de configuratienaam en plain-article-query
is de naam van de Persisted-query. De query uitvoeren:
$ curl -X GET \
https://localhost:4502/graphql/execute.json/wknd/plain-article-query
Een query uitvoeren met parameters.
De variabelen en de waarden van de vraag moeten behoorlijk zijn gecodeerd bij het uitvoeren van een blijvende query.
Bijvoorbeeld:
$ curl -X GET \
"https://localhost:4502/graphql/execute.json/wknd/plain-article-query-parameters%3Bapath%3D%2Fcontent%2Fdam%2Fwknd%2Fen%2Fmagazine%2Falaska-adventure%2Falaskan-adventures%3BwithReference%3Dfalse
Zie gebruiken queryvariabelen voor meer informatie .
De variabelen van de vraag kunnen met Verblijfsde Vragen worden gebruikt. De vraagvariabelen worden toegevoegd aan het verzoek vooraf bepaald met een puntkomma (;
) met de naam en de waarde van de variabele. Meerdere variabelen worden gescheiden door puntkomma's.
Het patroon ziet er als volgt uit:
<AEM_HOST>/graphql/execute.json/<PERSISTENT_QUERY_PATH>;variable1=value1;variable2=value2
De volgende query bevat bijvoorbeeld een variabele activity
een lijst filteren op basis van een activiteitwaarde:
query getAdventuresByActivity($activity: String!) {
adventureList (filter: {
adventureActivity: {
_expressions: [
{
value: $activity
}
]
}
}){
items {
_path
adventureTitle
adventurePrice
adventureTripLength
}
}
}
Deze query kan worden uitgevoerd onder een pad wknd/adventures-by-activity
. Om de Permanente vraag te roepen waar activity=Camping
het verzoek zou er als volgt uitzien :
<AEM_HOST>/graphql/execute.json/wknd/adventures-by-activity%3Bactivity%3DCamping
Let op: %3B
is de UTF-8-codering voor ;
en %3D
is de codering voor =
. De vraagvariabelen en om het even welke speciale karakters moeten correct gecodeerd voor de Persisted query die moet worden uitgevoerd.
De blijvende vragen worden geadviseerd aangezien zij in het voorgeheugen onder kunnen brengen bij Dispatcher en de lagen van het Netwerk van de Levering van de Inhoud (CDN), uiteindelijk verbeterend de prestaties van de het vragen cliënttoepassing.
AEM maakt de cache standaard ongeldig op basis van de definitie Tijd tot live (TTL). Deze TTLs kan door de volgende parameters worden bepaald. Deze parameters zijn op verschillende manieren toegankelijk, waarbij de namen variëren volgens het gebruikte mechanisme:
Cachetype | HTTP-header | cURL | OSGi-configuratie |
---|---|---|---|
Browser | max-age |
cache-control : max-age |
cacheControlMaxAge |
CDN | s-maxage |
surrogate-control : max-age |
surrogateControlMaxAge |
CDN | stale-while-revalidate |
surrogate-control : stale-while-revalidate |
surrogateControlStaleWhileRevalidate |
CDN | stale-if-error |
surrogate-control : stale-if-error |
surrogateControlStaleIfError |
Voor auteur-instanties zijn de standaardwaarden:
max-age
: 60s-maxage
: 60stale-while-revalidate
: 86400stale-if-error
: 86400Hiervoor gold het volgende:
cache-control
en/of surrogate-control
; voor voorbeelden , zie Het beheren van Geheime voorgeheugen op het Aanhoudende Niveau van de VraagVoor publicatie-instanties zijn de standaardwaarden:
max-age
: 60s-maxage
: 7200stale-while-revalidate
: 86400stale-if-error
: 86400Deze kunnen worden overschreven:
op het niveau van de Vraag Blijven; dit impliceert het posten van de vraag aan AEM gebruikend cURL in uw interface van de bevellijn, en het publiceren van de Verlengde Vraag.
Dit omvat het posten van de vraag aan AEM gebruikend cURL in uw interface van de bevellijn.
Een voorbeeld van de methode PUT (create):
curl -u admin:admin -X PUT \
--url "http://localhost:4502/graphql/persist.json/wknd/plain-article-query-max-age" \
--header "Content-Type: application/json" \
--data '{ "query": "{articleList { items { _path author } } }", "cache-control": { "max-age": 300 }, "surrogate-control": {"max-age":600, "stale-while-revalidate":1000, "stale-if-error":1000} }'
Een voorbeeld van de methode POST (update):
curl -u admin:admin -X POST \
--url "http://localhost:4502/graphql/persist.json/wknd/plain-article-query-max-age" \
--header "Content-Type: application/json" \
--data '{ "query": "{articleList { items { _path author } } }", "cache-control": { "max-age": 300 }, "surrogate-control": {"max-age":600, "stale-while-revalidate":1000, "stale-if-error":1000} }'
De cache-control
kan worden ingesteld tijdens het maken (PUT) of later (bijvoorbeeld via een aanvraag voor een POST). Het cache-control is optioneel wanneer u de aanhoudend query maakt, omdat AEM de standaardwaarde kan opgeven. Zie Een GraphQL-query laten doorgaan, bijvoorbeeld om een query met cURL voort te zetten.
Als u de cache wereldwijd wilt beheren, kunt u vorm de montages OSGi voor de Configuratie van blijvende query-service. Anders gebruikt deze configuratie OSGi standaardwaarden voor publicatie-instanties.
De configuratie OSGi is slechts aangewezen voor publiceer instanties. De configuratie bestaat bij de instanties van de auteur, maar wordt genegeerd.
Voor gebruik door een toepassing worden speciale tekens gebruikt bij het samenstellen van queryvariabelen (dus puntkomma's (;
), gelijkteken (=
), slashes /
) moet worden omgezet om de overeenkomstige UTF-8-codering te gebruiken.
Bijvoorbeeld:
curl -X GET \ "https://localhost:4502/graphql/execute.json/wknd/adventure-by-path%3BadventurePath%3D%2Fcontent%2Fdam%2Fwknd%2Fen%2Fadventures%2Fbali-surf-camp%2Fbali-surf-camp"
De URL kan worden opgesplitst in de volgende onderdelen:
URL-onderdeel | Beschrijving |
---|---|
/graphql/execute.json |
Blijvend vraageindpunt |
/wknd/adventure-by-path |
Pad voor permanente query |
%3B |
Codering van ; |
adventurePath |
Query-variabele |
%3D |
Codering van = |
%2F |
Codering van / |
%2Fcontent%2Fdam... |
Gecodeerd pad naar het inhoudsfragment |
In onbewerkte tekst ziet de aanvraag-URI er als volgt uit:
/graphql/execute.json/wknd/adventure-by-path;adventurePath=/content/dam/wknd/en/adventures/bali-surf-camp/bali-surf-camp
Als u een voortgezette query in een client-app wilt gebruiken, moet de SDK van de client zonder kop worden gebruikt voor JavaScript, Java, of NodeJS. De Headless Client SDK codeert alle queryvariabelen automatisch naar behoren in de aanvraag.
Verblijfsde vragen zouden altijd op de dienst van de Auteur AEM moeten worden gecreeerd en dan gepubliceerd (herhaald) aan de dienst van de Publicatie AEM. Vaak, worden de Persisted vragen gecreeerd en op lagere milieu's zoals lokale of milieu's van de Ontwikkeling getest. Het is dan noodzakelijk om Verlengde vragen aan hogere niveaumilieu's te bevorderen, die hen uiteindelijk op een productieAEM publiceren milieu voor cliënttoepassingen ter beschikking stellen om te verbruiken.
De blijvende vragen kunnen in worden gebouwd AEM. AEM pakketten kunnen vervolgens worden gedownload en geïnstalleerd in verschillende omgevingen. AEM Pakketten kunnen ook worden gerepliceerd vanuit een AEM-auteuromgeving naar een AEM-publicatieomgeving.
Een pakket maken:
persistentQueries
onder de configuratie. Bijvoorbeeld voor de wknd
configuratie het volledige weg zal zijn /conf/wknd/settings/graphql/persistentQueries
.Nadat het pakket is gemaakt, kunt u: