Beständiga GraphQL-frågor

Beständiga frågor är frågor som lagras på Adobe Experience Manager-servern (AEM). Klienter kan skicka en HTTP GET-begäran med frågenamnet för att köra den. Fördelen med detta är tillgänglighet. GraphQL-frågor på klientsidan kan också köras med HTTP POST-begäranden, som inte kan cachas, men beständiga frågor kan cachas med HTTP-cacher eller CDN, vilket förbättrar prestandan. Med beständiga frågor kan du förenkla dina förfrågningar och förbättra säkerheten eftersom dina frågor är inkapslade på servern och AEM-administratören har full kontroll över dem. Det är bästa sättet och rekommenderas att använda beständiga frågor när du arbetar med AEM GraphQL API.

I det föregående kapitlet har du utforskat några avancerade GraphQL-frågor för att samla in data för WKND-appen. I det här kapitlet kvarstår frågorna för AEM och du får lära dig hur du använder cachekontroll för beständiga frågor.

Förutsättningar prerequisites

Det här dokumentet är en del av en självstudiekurs i flera delar. Kontrollera att det föregående kapitlet har slutförts innan du fortsätter med det här kapitlet.

Mål objectives

Läs om hur du gör följande i det här kapitlet:

  • Behåll GraphQL-frågor med parametrar
  • Använd parametrar för cachekontroll med beständiga frågor

Granska konfigurationsinställningen för GraphQL-beständiga frågor

Låt oss kontrollera att GraphQL Persisted Queries har aktiverats för WKND Site-projektet i din AEM-instans.

  1. Navigera till Verktyg > Allmänt > Konfigurationsläsaren.

  2. Välj WKND delad och välj sedan Egenskaper i det övre navigeringsfältet för att öppna konfigurationsegenskaper. På sidan Konfigurationsegenskaper ser du att behörigheten GraphQL Persistent Queries är aktiverad.

    Konfigurationsegenskaper

Bevara GraphQL-frågor med inbyggda GraphiQL Explorer-verktyg

I det här avsnittet ska vi behålla den GraphQL-fråga som senare används i klientprogrammet för att hämta och återge Adventure Content Fragment-data.

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

    code language-graphql
    query getAdventureDetailsBySlug($slug: String!) {
    adventureList(filter: {slug: {_expressions: [{value: $slug}]}}) {
        items {
        _path
        title
        activity
        adventureType
        price
        tripLength
        groupSize
        difficulty
        primaryImage {
            ... on ImageRef {
            _path
            mimeType
            width
            height
            }
        }
        description {
            html
            json
        }
        itinerary {
            html
            json
        }
        location {
            _path
            name
            description {
            html
            json
            }
            contactInfo {
            phone
            email
            }
            locationImage {
            ... on ImageRef {
                _path
            }
            }
            weatherBySeason
            address {
            streetAddress
            city
            state
            zipCode
            country
            }
        }
        instructorTeam {
            _metadata {
            stringMetadata {
                name
                value
            }
            }
            teamFoundingDate
            description {
            json
            }
            teamMembers {
            fullName
            contactInfo {
                phone
                email
            }
            profilePicture {
                ... on ImageRef {
                _path
                }
            }
            instructorExperienceLevel
            skills
            biography {
                html
            }
            }
        }
        administrator {
            fullName
            contactInfo {
            phone
            email
            }
            biography {
            html
            }
        }
        }
        _references {
        ... on ImageRef {
            _path
            mimeType
        }
        ... on LocationModel {
            _path
            __typename
        }
        }
    }
    }
    

    Kontrollera att frågan fungerar innan du sparar den.

  2. Tryck sedan på Spara som och ange adventure-details-by-slug som frågenamn.

    Behåll GraphQL-fråga

Utför beständig fråga med variabler genom att koda specialtecken

Låt oss förstå hur beständiga frågor med variabler körs av klientprogram genom att koda specialtecknen.

För att köra en beständig fråga gör klientprogrammet en GET-begäran med följande syntax:

GET <AEM_HOST>/graphql/execute.json/<Project-Config-Name>/<Persisted-Query-Name>

Om du vill köra en beständig fråga med variabeln ändras syntaxen ovan till:

GET <AEM_HOST>/graphql/execute.json/<Project-Config-Name>/<Persisted-Query-Name>;variable1=value1;variable2=value2

Specialtecken som semikolon (;), likhetstecken (=), snedstreck (/) och blanksteg måste konverteras för att motsvarande UTF-8-kodning ska kunna användas.

Genom att köra getAllAdventureDetailsBySlug-frågan från kommandoradsterminalen granskar vi dessa koncept i praktiken.

  1. Öppna GraphiQL Explorer och klicka på ellipserna (…) bredvid den beständiga frågan getAllAdventureDetailsBySlug. Klicka sedan på Kopiera URL. Klistra in kopierad URL i en textruta ser ut så här:

    code language-code
        http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug;slug=
    
  2. Lägg till yosemite-backpacking som variabelvärde

    code language-code
        http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug;slug=yosemite-backpacking
    
  3. Koda specialtecken för semikolon (;) och likhetstecken (=)

    code language-code
        http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug%3Bslug%3Dyosemite-backpacking
    
  4. Öppna en kommandoradsterminal och kör frågan med Curl

    code language-shell
    $ curl -X GET http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug%3Bslug%3Dyosemite-backpacking
    
TIP
Om du kör frågan ovan mot AEM Author-miljön måste du skicka inloggningsuppgifterna. Mer information finns i Åtkomsttoken för lokal utveckling och i Anropa API:t för AEM.

Granska även Så här kör du en beständig fråga, Använda frågevariabler och Kodar fråge-URL:en för användning av ett program för att lära dig beständig frågekörning av klientprogram.

Uppdatera parametrar för cachekontroll i beständiga frågor cache-control-all-adventures

Med AEM GraphQL API kan du uppdatera standardparametrarna för cachekontroll till dina frågor för att förbättra prestandan. Standardvärdena för cachekontroll är:

  • 60 sekunder är standardvärde (maxage=60) för klientens TTL (t.ex. en webbläsare)

  • 7200 sekunder är standardvärdet (s-maxage=7200) för TTL för Dispatcher och CDN, även kallat delade cacheminnen

Använd frågan adventures-all för att uppdatera parametrarna för cachekontroll. Frågesvaret är stort och det är användbart att kontrollera dess age i cachen. Den beständiga frågan används senare för att uppdatera klientprogrammet.

  1. Öppna GraphiQL Explorer och klicka på ellipserna (…) bredvid den beständiga frågan. Klicka sedan på Huvuden för att öppna modal Cache Configuration .

    Behåll GraphQL Header Option

  2. Uppdatera sidhuvudsvärdet max-age till 600 sekunder (10 min) i Cache Configuration modal och klicka sedan på Save

    Behåll GraphQL-cachekonfiguration

Granska Cachelagra dina beständiga frågor om du vill ha mer information om standardparametrar för cachekontroll.

Grattis!

Grattis! Du har nu lärt dig att behålla GraphQL-frågor med parametrar, uppdatera beständiga frågor och använda cachekontrollparametrar med beständiga frågor.

Nästa steg

I nästa kapitel implementerar du förfrågningar för beständiga frågor i WKND-appen.

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