持續性 GraphQL 查詢
持續查詢是儲存在Adobe Experience Manager (AEM)伺服器上的查詢。 使用者端可以傳送具有查詢名稱的HTTPGET要求來執行它。 此方法的好處是可快取。 雖然使用者端GraphQL查詢也可以使用HTTPPOST請求執行(無法快取),但HTTP快取或CDN可以快取持續查詢,從而提高效能。 持續查詢可讓您簡化要求並提高安全性,因為您的查詢會封裝在伺服器上,而且AEM管理員可以完全控制這些查詢。 使用AEM GraphQL API時,是 最佳實務並強烈建議 使用持續查詢。
在上一章中,您已探索一些進階GraphQL查詢,以收集WKND應用程式的資料。 在本章中,您會將查詢保留到AEM,並瞭解如何對保留的查詢使用快取控制。
先決條件 prerequisites
本檔案是多部分教學課程的一部分。 在繼續此章節之前,請確定已完成先前的章節。
目標 objectives
在本章中,瞭解如何:
- 使用引數保留GraphQL查詢
- 對持久查詢使用cache-control引數
檢閱 GraphQL持續查詢 組態設定
讓我們檢閱一下您的AEM執行個體中的WKND網站專案是否已啟用 GraphQL持續查詢。
-
瀏覽至 工具 > 一般 > 設定瀏覽器。
-
選取「WKND共用」,然後在頂端導覽列中選取「屬性」以開啟設定屬性。 在[組態屬性]頁面上,您應該會看到 GraphQL持續查詢 許可權已啟用。
使用內建GraphiQL Explorer工具保留GraphQL查詢
在本節中,我們將保留GraphQL查詢,該查詢稍後用於使用者端應用程式中,以擷取及轉譯冒險內容片段資料。
-
在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 } } } }
在儲存查詢之前,請驗證查詢是否有效。
-
接著點選「另存新檔」,並輸入
adventure-details-by-slug
作為查詢名稱。
透過編碼特殊字元來執行包含變數的持久查詢
讓我們瞭解含有變數的持續查詢如何由使用者端應用程式藉由編碼特殊字元來執行。
若要執行持續查詢,使用者端應用程式會使用下列語法發出GET要求:
GET <AEM_HOST>/graphql/execute.json/<Project-Config-Name>/<Persisted-Query-Name>
若要使用變數 執行持續查詢,上述語法會變更為:
GET <AEM_HOST>/graphql/execute.json/<Project-Config-Name>/<Persisted-Query-Name>;variable1=value1;variable2=value2
特殊字元(如分號(;)、等號(=)、斜線(/)和空格)必須轉換為使用對應的UTF-8編碼。
從命令列終端機執行getAllAdventureDetailsBySlug
查詢,我們檢閱這些概念的實際運作情況。
-
開啟GraphiQL Explorer,然後按一下永久查詢
getAllAdventureDetailsBySlug
旁的 省略符號 (…),然後按一下 複製URL。 將複製的URL貼到文字板中,如下所示:code language-code http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug;slug=
-
將
yosemite-backpacking
新增為變數值code language-code http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug;slug=yosemite-backpacking
-
編碼分號(;)和等號(=)特殊字元
code language-code http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug%3Bslug%3Dyosemite-backpacking
-
開啟命令列終端機,並使用Curl執行查詢
code language-shell $ curl -X GET http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug%3Bslug%3Dyosemite-backpacking
此外,請檢閱如何執行持久查詢、使用查詢變數和編碼查詢URL以供應用程式使用,以瞭解使用者端應用程式如何執行持久查詢。
更新持續性查詢中的快取控制引數 cache-control-all-adventures
AEM GraphQL API可讓您更新查詢的預設快取控制引數,以提高效能。 預設cache-control值為:
-
60秒是使用者端(例如瀏覽器)的預設(maxage=60) TTL
-
7200秒是Dispatcher和CDN的預設(s-maxage=7200) TTL;也稱為共用快取
使用adventures-all
查詢來更新快取控制引數。 查詢回應很大,在快取中控制其age
很有用。 此持續查詢稍後將用於更新使用者端應用程式。
-
開啟GraphiQL Explorer,然後按一下永久查詢旁的 省略符號 (…),然後按一下 標題 以開啟 快取設定 強制回應視窗。
-
在 快取設定 強制回應視窗中,將
max-age
標頭值更新為600
秒(10分鐘),然後按一下 儲存
檢閱快取您的持續查詢,以取得預設快取控制引數的詳細資訊。
恭喜!
恭喜!您現在已瞭解如何使用引數保留GraphQL查詢、更新持久查詢,以及對持久查詢使用快取控制引數。
後續步驟
在下一個章節中,您將會在WKND應用程式中實作持續性查詢的要求。