持續查詢是儲存在Adobe Experience Manager(AEM)伺服器上的查詢。 用戶端可傳送具有查詢名稱的HTTPGET要求以執行它。 此方法的好處是可快取性。 雖然用戶端GraphQL查詢也可以使用HTTPPOST請求(無法快取)來執行,但可由HTTP快取或CDN快取持續的查詢,以提升效能。 持續查詢可讓您簡化請求並提高安全性,因為您的查詢已封裝在伺服器上,而AEM管理員可完全控制這些請求。 是 最佳實務,強烈建議 使用AEM GraphQL API時使用持續查詢的方式。
在上一章中,您已探索了一些進階GraphQL查詢,以收集WKND應用程式的資料。 在本章中,您將查詢保留至AEM,並了解如何對持續的查詢使用快取控制。
本檔案是多部分教學課程的一部分。 請確保 上一章 已完成,然後再繼續處理本章。
在本章中,了解如何:
讓我們回顧一下 GraphQL持續查詢 在AEM例項中為WKND Site專案啟用。
導覽至 工具 > 一般 > 配置瀏覽器.
選擇 WKND共用,然後選取 屬性 ,開啟設定屬性。 在設定屬性頁面上,您應會看到 GraphQL持久查詢 權限已啟用。
在本節中,我們將保留GraphQL查詢,該查詢稍後用於用戶端應用程式,以擷取及呈現冒險內容片段資料。
在GraphiQL資源管理器中輸入以下查詢:
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瀏覽器,然後按一下 橢圓 (…) getAllAdventureDetailsBySlug
,然後按一下 複製URL. 將複製的URL貼到文字面板中,如下所示:
http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug;slug=
新增 yosemite-backpacking
作為變數值
http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug;slug=yosemite-backpacking
將分號(;)和等號(=)編碼為特殊字元
http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug%3Bslug%3Dyosemite-backpacking
開啟命令列終端並使用 捲曲 運行查詢
$ curl -X GET http://<AEM_HOST>/graphql/execute.json/wknd-shared/getAllAdventureDetailsBySlug%3Bslug%3Dyosemite-backpacking
此外,請檢閱 如何執行持續查詢, 使用查詢變數,和 對查詢URL進行編碼,以供應用程式使用 了解客戶端應用程式持續執行的查詢。
AEM GraphQL API可讓您將預設的快取控制參數更新至查詢,以提升效能。 預設的快取控制值為:
用戶端(例如瀏覽器)的預設TTL為60秒(最大值=60)
Dispatcher和CDN的預設TTL為7200秒(s-maxage=7200);也稱為共用快取
使用 adventures-all
查詢以更新快取控制參數。 查詢回應很大,控制其很實用 age
在快取中。 此持續查詢稍後將用於更新 客戶端應用程式.
開啟GraphiQL瀏覽器,然後按一下 橢圓 (…),然後按一下永久查詢旁的 標題 開啟 快取配置 模式。
在 快取配置 強制回應,更新 max-age
標題值 600
秒(10分鐘),然後按一下 儲存
檢閱 快取持續查詢 以取得預設快取控制參數的詳細資訊。
恭喜!您現在已學習如何使用參數保留GraphQL查詢、更新持續查詢,以及使用快取控制參數來保留查詢。
在 下一章,您將在WKND應用程式中實作持續查詢的要求。