在 中使用HTTP解析器 AWS AppSync - AWS AppSync

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

在 中使用HTTP解析器 AWS AppSync

注意

我們現在主要支援 APPSYNC_JS 執行期及其文件。請考慮在此處使用 APPSYNC_JS 執行期及其指南

AWS AppSync 可讓您使用支援的資料來源 (即 Amazon DynamoDB AWS Lambda、Amazon OpenSearch Service 或 Amazon Aurora) 來執行各種操作,以及任何任意HTTP端點來解析 GraphQL 欄位。HTTP 端點可用後,您可以使用資料來源連線到它們。然後,您可以在結構描述中設定解析程式以執行 GraphQL 操作,例如查詢、變動和訂閱。本教學將逐步說明一些常見的範例。

在本教學課程中,您將 RESTAPI(使用 Amazon API Gateway 和 Lambda 建立) 與 AWS AppSync GraphQL 端點搭配使用。

一鍵設定

如果您想要在 中自動設定已設定端點 AWS AppSync 的 GraphQL HTTP端點 (使用 Amazon API Gateway 和 Lambda),您可以使用下列 AWS CloudFormation 範本:

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

建立 REST API

您可以使用下列 AWS CloudFormation 範本來設定適用於本教學課程的REST端點:

Blue button labeled "Launch Stack" with an arrow icon indicating an action to start.

AWS CloudFormation 堆疊會執行下列步驟:

  1. 設定 Lambda 函數,其中包含您微服務的商業邏輯。

  2. REST API 使用下列endpoint/method/content類型組合設定API閘道:

API 資源路徑 HTTP 方法 已支援的內容類型

/v1/users

POST

application/json

/v1/users

GET

application/json

/v1/users/1

GET

application/json

/v1/users/1

PUT

application/json

/v1/users/1

DELETE

application/json

建立您的 GraphQL API

若要在 API中建立 GraphQL AWS AppSync:

  • 開啟 AWS AppSync 主控台,然後選擇建立 API

  • 針對API名稱,輸入 UserData

  • 選擇 Custom schema (自訂結構描述)

  • 選擇 Create (建立)。

AWS AppSync 主控台會使用API金鑰身分驗證模式API為您建立新的 GraphQL。您可以使用 主控台來設定 GraphQL 的其餘部分,API並在其上執行本教學課程的其餘部分查詢。

建立 GraphQL 結構描述

現在您已擁有 GraphQL API,讓我們建立 GraphQL 結構描述。從 AWS AppSync 主控台的結構描述編輯器中,確定您的結構描述符合下列結構描述:

schema { query: Query mutation: Mutation } type Mutation { addUser(userInput: UserInput!): User deleteUser(id: ID!): User } type Query { getUser(id: ID): User listUser: [User!]! } type User { id: ID! username: String! firstname: String lastname: String phone: String email: String } input UserInput { id: ID! username: String! firstname: String lastname: String phone: String email: String }

設定HTTP資料來源

若要設定HTTP資料來源,請執行下列動作:

  • DataSources索引標籤上,選擇新增 ,然後輸入資料來源的易記名稱 (例如 HTTP)。

  • 資料來源類型 中,選擇 HTTP

  • 將端點設定為建立的API閘道端點。請確定您沒有在端點中包含階段名稱。

注意:目前只有公有端點受 支援 AWS AppSync。

備註:如需 AWS AppSync 服務所識別的憑證授權機構的詳細資訊,請參閱適用於HTTPS端點 AWS AppSync 的 所識別的憑證授權機構 (CA)

設定解析程式

在此步驟中,您將 http 資料來源連接至getUser查詢。

設定解析程式:

  • 選擇 Schema (結構描述) 標籤。

  • 查詢類型下右側的資料類型窗格中,尋找 getUser 欄位,然後選擇連接

  • Data source name (資料來源名稱) 中選擇 HTTP

  • 將以下內容貼到 Configure the request mapping template (設定請求映射範本) 區段:

{ "version": "2018-05-29", "method": "GET", "params": { "headers": { "Content-Type": "application/json" } }, "resourcePath": $util.toJson("/v1/users/${ctx.args.id}") }
  • 將以下內容貼到 Configure the response mapping template (設定回應映射範本) 區段:

## return the body #if($ctx.result.statusCode == 200) ##if response is 200 $ctx.result.body #else ##if response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
  • 選擇 Query (查詢) 標籤,然後執行以下查詢:

query GetUser{ getUser(id:1){ id username } }

這應該會傳回以下回應:

{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
  • 選擇 Schema (結構描述) 標籤。

  • Mutation 下右側的資料類型窗格中,尋找 addUser 欄位,然後選擇連接

  • Data source name (資料來源名稱) 中選擇 HTTP

  • 將以下內容貼到 Configure the request mapping template (設定請求映射範本) 區段:

{ "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json", }, "body": $util.toJson($ctx.args.userInput) } }
  • 將以下內容貼到 Configure the response mapping template (設定回應映射範本) 區段:

## Raise a GraphQL field error in case of a datasource invocation error #if($ctx.error) $util.error($ctx.error.message, $ctx.error.type) #end ## if the response status code is not 200, then return an error. Else return the body ** #if($ctx.result.statusCode == 200) ## If response is 200, return the body. $ctx.result.body #else ## If response is not 200, append the response to error block. $utils.appendError($ctx.result.body, "$ctx.result.statusCode") #end
  • 選擇 Query (查詢) 標籤,然後執行以下查詢:

mutation addUser{ addUser(userInput:{ id:"2", username:"shaggy" }){ id username } }

這應該會傳回以下回應:

{ "data": { "getUser": { "id": "2", "username": "shaggy" } } }

叫用 AWS 服務

您可以使用HTTP解析器來設定 AWS 服務的 GraphQL API 介面。HTTP 的 請求 AWS 必須使用 Signature 第 4 版程序簽署,以便 AWS 能夠識別傳送這些請求的對象。當您將IAM角色與HTTP資料來源建立關聯時, 會代表您 AWS AppSync 計算簽章。

您提供兩個額外的元件來使用HTTP解析器叫用 AWS 服務:

  • 具有呼叫 AWS 服務許可IAM的角色 APIs

  • 資料來源中的簽署組態

例如,如果您想要使用HTTP解析程式呼叫 ListGraphqlApis 操作,請先建立角色,該IAM角色 AWS AppSync 會擔任並附加下列政策:

{ "Version": "2012-10-17", "Statement": [ { "Action": [ "appsync:ListGraphqlApis" ], "Effect": "Allow", "Resource": "*" } ] }

接下來,建立 的HTTP資料來源 AWS AppSync。在此範例中,您 AWS AppSync 在美國西部 (奧勒岡) 區域呼叫 。在名為 的檔案中設定下列HTTP組態http.json,其中包含簽署區域和服務名稱:

{ "endpoint": "https://appsync.us-west-2.amazonaws.com/", "authorizationConfig": { "authorizationType": "AWS_IAM", "awsIamConfig": { "signingRegion": "us-west-2", "signingServiceName": "appsync" } } }

然後,使用 AWS CLI 建立具有關聯角色的資料來源,如下所示:

aws appsync create-data-source --api-id <API-ID> \ --name AWSAppSync \ --type HTTP \ --http-config file:///http.json \ --service-role-arn <ROLE-ARN>

當您將解析器連接至結構描述中的 欄位時,請使用下列請求映射範本來呼叫 AWS AppSync:

{ "version": "2018-05-29", "method": "GET", "resourcePath": "/v1/apis" }

當您為此資料來源執行 GraphQL 查詢時, 會使用您提供的角色 AWS AppSync 簽署請求,並在請求中包含簽章。查詢會傳回APIs您帳戶中該 AWS 區域的 AWS AppSync GraphQL 清單。