As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Usando HTTP resolvedores em AWS AppSync
nota
Agora, oferecemos suporte principalmente ao tempo de execução APPSYNC _JS e sua documentação. Considere usar o tempo de execução APPSYNC _JS e seus guias aqui.
AWS AppSync permite que você use fontes de dados compatíveis (ou seja, Amazon DynamoDB AWS Lambda, Amazon Service ou OpenSearch Amazon Aurora) para realizar várias operações, além de quaisquer endpoints HTTP arbitrários para resolver campos do GraphQL. Depois que seus HTTP endpoints estiverem disponíveis, você poderá se conectar a eles usando uma fonte de dados. Em seguida, configure um resolvedor no esquema para executar operações do GraphQL, como consultas, mutações e assinaturas. Esse tutorial apresentará alguns exemplos comuns.
Neste tutorial, você usa um REST API (criado usando Amazon API Gateway e Lambda) com um endpoint GraphQL AWS AppSync .
Configuração com um clique
Se você quiser configurar automaticamente um endpoint GraphQL AWS AppSync com um HTTP endpoint configurado (usando Amazon Gateway API e Lambda), você pode usar o seguinte modelo: AWS CloudFormation
Criando um REST API
Você pode usar o AWS CloudFormation modelo a seguir para configurar um REST endpoint que funcione para este tutorial:
A AWS CloudFormation pilha executa as seguintes etapas:
-
Configura uma função do Lambda, que contém a lógica de negócios para o seu microsserviço.
-
Configura um API Gateway REST API com a seguinte combinação endpoint/method/content de tipos:
APICaminho do recurso | HTTPMétodo | Tipo de conteúdo compatível |
---|---|---|
/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 |
Criando seu GraphQL API
Para criar o GraphQL API em: AWS AppSync
-
Abra o AWS AppSync console e escolha Criar API.
-
Para o API nome, digite
UserData
. -
Selecione Esquema personalizado.
-
Escolha Criar.
O AWS AppSync console cria um novo GraphQL API para você usando o modo de autenticação de API chave. Você pode usar o console para configurar o resto do GraphQL API e executar consultas nele durante o restante deste tutorial.
Criar um esquema do GraphQL
Agora que você tem um GraphQLAPI, vamos criar um esquema GraphQL. No editor de esquemas no AWS AppSync console, verifique se o esquema corresponde ao esquema a seguir:
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 }
Configure sua fonte HTTP de dados
Para configurar sua fonte de HTTP dados, faça o seguinte:
-
Na DataSourcesguia, escolha Novo e digite um nome amigável para a fonte de dados (por exemplo,
HTTP
). -
Em Tipo de fonte de dados, escolha HTTP.
-
Defina o endpoint como o endpoint do API Gateway que foi criado. Lembre-se de não incluir o nome do estágio como parte do endpoint.
Nota: No momento, somente endpoints públicos são suportados pelo AWS AppSync.
Nota: Para obter mais informações sobre as autoridades de certificação que são reconhecidas pelo AWS AppSync serviço, consulte Autoridades de certificação (CA) reconhecidas AWS AppSync por for HTTPS Endpoints.
Configurar resolvedores
Nesta etapa, você conecta a fonte de dados http à getUserconsulta.
Como configurar o resolvedor :
-
Escolha a guia Esquema.
-
No painel Tipos de dados à direita, abaixo do Tipo de consulta, localize o getUsercampo e escolha Anexar.
-
Em Data source name (Nome da fonte de dados), escolha HTTP.
-
Em Configurar o modelo de mapeamento da solicitação, cole o seguinte código:
{ "version": "2018-05-29", "method": "GET", "params": { "headers": { "Content-Type": "application/json" } }, "resourcePath": $util.toJson("/v1/users/${ctx.args.id}") }
-
Em Configurar o modelo de mapeamento da solicitação, cole o seguinte código:
## 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
-
Escolha a guia Consulta e, depois, execute a seguinte consulta:
query GetUser{ getUser(id:1){ id username } }
Isso deve retornar a seguinte resposta:
{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
-
Escolha a guia Esquema.
-
No painel Tipos de dados à direita, em Mutação, localize o addUsercampo e escolha Anexar.
-
Em Data source name (Nome da fonte de dados), escolha HTTP.
-
Em Configurar o modelo de mapeamento da solicitação, cole o seguinte código:
{ "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json", }, "body": $util.toJson($ctx.args.userInput) } }
-
Em Configurar o modelo de mapeamento da solicitação, cole o seguinte código:
## 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
-
Escolha a guia Consulta e, depois, execute a seguinte consulta:
mutation addUser{ addUser(userInput:{ id:"2", username:"shaggy" }){ id username } }
Isso deve retornar a seguinte resposta:
{ "data": { "getUser": { "id": "2", "username": "shaggy" } } }
Serviços de invocação AWS
Você pode usar HTTP resolvedores para configurar uma interface API AWS GraphQL para serviços. HTTPas solicitações AWS devem ser assinadas com o processo Signature Version 4 para que seja AWS possível identificar quem as enviou. AWS AppSync calcula a assinatura em seu nome quando você associa uma IAM função à fonte de HTTP dados.
Você fornece dois componentes adicionais para invocar AWS serviços com HTTP resolvedores:
-
Uma IAM função com permissões para chamar o AWS serviço APIs
-
Configurar a assinatura na fonte de dados
Por exemplo, se você quiser chamar a ListGraphqlApis operação com HTTP resolvedores, primeiro crie uma IAM função que AWS AppSync assuma com a seguinte política anexada:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "appsync:ListGraphqlApis" ], "Effect": "Allow", "Resource": "*" } ] }
Em seguida, crie a fonte de HTTP dados para AWS AppSync. Neste exemplo, você liga para a AWS AppSync região Oeste dos EUA (Oregon). Defina a seguinte HTTP configuração em um arquivo chamadohttp.json
, que inclui a região de assinatura e o nome do serviço:
{ "endpoint": "https://appsync.us-west-2.amazonaws.com/", "authorizationConfig": { "authorizationType": "AWS_IAM", "awsIamConfig": { "signingRegion": "us-west-2", "signingServiceName": "appsync" } } }
Em seguida, use o AWS CLI para criar a fonte de dados com uma função associada da seguinte forma:
aws appsync create-data-source --api-id <API-ID> \ --name AWSAppSync \ --type HTTP \ --http-config file:///http.json \ --service-role-arn <ROLE-ARN>
Ao anexar um resolvedor ao campo no esquema, use o seguinte modelo de mapeamento de solicitações para chamar AWS AppSync:
{ "version": "2018-05-29", "method": "GET", "resourcePath": "/v1/apis" }
Quando você executa uma consulta GraphQL para essa fonte de dados, AWS AppSync assina a solicitação usando a função fornecida e inclui a assinatura na solicitação. A consulta retorna uma lista do AWS AppSync GraphQL APIs na sua conta nessa AWS região.