本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在 AWS AppSync (VTL) 中設定和使用管道解析器
注意
我們現在主要支援 APPSYNC_JS 執行期及其文件。請考慮在此處使用 APPSYNC_JS 執行期及其指南。
AWS AppSync 在 GraphQL 欄位上執行解析程式。在某些情況下,應用程式需要執行多個操作,才能解析單一 GraphQL 欄位。透過管道解析程式,開發人員現在可以編寫稱為函數的操作,並依序執行這些操作。在像是以需要先執行授權檢查才能擷取欄位資料的情況中,就很適合使用管道解析程式。
管道解析程式包含 Before 映射範本和 After 映射範本,以及一份函數清單。每個函數都有一個請求和回應映射範本,它會根據資料來源執行。由於管道解析程式是將執行委派到一份函數清單,所以不會連結到任何資料來源。單位解析器和函數是對資料來源執行操作的原始程式碼。如需詳細資訊,請參閱解析程式映射範本概觀。
步驟 1:建立管道解析程式
在 AWS AppSync 主控台中,前往結構描述頁面。
儲存下列結構描述:
schema { query: Query mutation: Mutation } type Mutation { signUp(input: Signup): User } type Query { getUser(id: ID!): User } input Signup { username: String! email: String! } type User { id: ID! username: String email: AWSEmail }
我們會將管道解析器轉接至 Mutation 類型上的 signUp 欄位。在右側的突變類型中,選擇signUp
突變欄位旁的連接。在建立解析程式頁面上,按一下動作 ,然後更新執行時間 。選擇 Pipeline Resolver
,然後選擇 VTL
,然後選擇更新 。頁面現在應會顯示三個區段:映射範本文字區域之前、函數區段和映射範本文字區域之後。
我們的管道解析程式會註冊使用者,此註冊的第一步是驗證電子郵件地址輸入,然後在系統中儲存此位使用者。我們將封裝validateEmail函數內的電子郵件驗證,以及儲存saveUser函數內的使用者。validateEmail 函數會先執行,如果電子郵件有效,則saveUser函數會執行。
執行流程將如下所示:
-
Mutation.signUp resolver 請求映射範本
-
validateEmail 函數
-
saveUser 函數
-
Mutation.signUp resolver 回應映射範本
由於我們可能重複使用 上其他解析程式中的validateEmail函數API,因此我們希望避免存取 ,$ctx.args
因為這些函數會從一個 GraphQL 欄位變更為另一個欄位。反之,我們可以使用 $ctx.stash
來存放 signUp(input: Signup)
輸入欄位引數所傳遞的電子郵件屬性。
BEFORE 映射範本:
## store email input field into a generic email key $util.qr($ctx.stash.put("email", $ctx.args.input.email)) {}
主控台提供預設傳遞AFTER映射範本,我們將使用:
$util.toJson($ctx.result)
選擇建立或儲存以更新解析程式。
步驟 2:建立函數
在管道解析程式頁面的函數區段中,按一下新增函數 ,然後按一下建立新函數 。您也可以在不經過解析器頁面的情況下建立函數;若要這麼做,請在 AWS AppSync主控台中前往函數頁面。選擇 Create function (建立函數) 按鈕。讓我們來建立可檢查電子郵件是否有效且來源是特定網域的函數。如果電子郵件無效,則該函數會引發錯誤。否則,它會轉送任何獲予的任何輸入。
在新函數頁面上,選擇動作 ,然後選擇更新執行時間 。選擇 VTL
,然後更新 。請確定您已建立 NONE類型的資料來源。在資料來源名稱清單中選擇此資料來源。在函數名稱 中,輸入 validateEmail
。在函數程式碼區域中,使用此程式碼片段覆寫所有內容:
#set($valid = $util.matches("^[a-zA-Z0-9_.+-]+@(?:(?:[a-zA-Z0-9-]+\.)?[a-zA-Z]+\.)?(myvaliddomain)\.com", $ctx.stash.email)) #if (!$valid) $util.error("$ctx.stash.email is not a valid email.") #end { "payload": { "email": $util.toJson(${ctx.stash.email}) } }
將此貼到回應映射範本中:
$util.toJson($ctx.result)
檢閱您的變更,然後選擇建立 。我們剛建立了validateEmail函數。重複這些步驟,使用下列請求和回應映射範本建立saveUser函數 (為了簡化,我們使用NONE資料來源,並假裝使用者在函數執行後已儲存在系統中。):
要求映射範本:
## $ctx.prev.result contains the signup input values. We could have also ## used $ctx.args.input. { "payload": $util.toJson($ctx.prev.result) }
回應映射範本:
## an id is required so let's add a unique random identifier to the output $util.qr($ctx.result.put("id", $util.autoId())) $util.toJson($ctx.result)
我們剛建立了saveUser函數。
步驟 3:將函數新增至管道解析程式
我們的函數應該會自動新增至我們剛建立的管道解析器。如果不是這種情況,或者您透過函數頁面建立函數,您可以按一下解析器頁面上的新增函數來連接函數。將 validateEmail和 saveUser函數同時新增至解析器。validateEmail 函數應放置在saveUser函數之前。當您新增更多函數時,您可以使用上移和下移選項來重新組織函數的執行順序。檢閱您的變更,然後選擇儲存 。
步驟 4:執行查詢
在 AWS AppSync 主控台中,前往查詢頁面。在瀏覽器中,確保您正在使用突變。如果不是,請在下拉式清單Mutation
中選擇 ,然後選擇 +
。輸入下列查詢:
mutation { signUp(input: { email: "nadia@myvaliddomain.com" username: "nadia" }) { id email } }
這應該會傳回如下內容:
{ "data": { "signUp": { "id": "256b6cc2-4694-46f4-a55e-8cb14cc5d7fc", "email": "nadia@myvaliddomain.com" } } }
我們已使用管道解析程式成功註冊我們的使用者,並完成輸入電子郵件的驗證。若要取得更多著重管道解析程式的全面教學課程,您可以移至教學課程:管道解析程式