Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Uso de solucionadores de HTTP en AWS AppSync
AWS AppSync le permite utilizar orígenes de datos compatibles (es decir, AWS Lambda, Amazon DynamoDB, Amazon OpenSearch Service o Amazon Aurora) para realizar diversas operaciones, además de cualquier punto de conexión HTTP arbitrario para resolver campos de GraphQL. Una vez que los puntos de enlace HTTP están disponibles, puede conectar con ellos mediante un origen de datos. A continuación, puede configurar un solucionador en el esquema para realizar operaciones de GraphQL como consultas, mutaciones, y suscripciones. Este tutorial le guiará a lo largo de algunos ejemplos comunes.
En este tutorial, se utiliza una API de REST (creada mediante Amazon API Gateway y Lambda) con un punto de conexión de GraphQL de AWS AppSync.
Creación de una API de REST
Puede utilizar la siguiente plantilla de AWS CloudFormation para establecer un punto de enlace REST que funcione con este tutorial:
La pila de AWS CloudFormation realiza los siguientes pasos:
-
Configura una función Lambda que contiene la lógica de negocio del microservicio.
-
Configure una API de REST de puerta de enlace de API con la combinación punto de conexión/método/tipo de contenido siguiente:
Ruta de recurso de la API | Método HTTP | Tipo de contenido admitido |
---|---|---|
/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 |
Creación de la API de GraphQL
Para crear la API de GraphQL en AWS AppSync:
-
Abra la consola de AppSync AWS y elija Crear API.
-
Elija API de GraphQL y, a continuación, seleccione Diseñar desde cero. Elija Siguiente.
-
En el nombre de la API, introduzca
UserData
. Elija Siguiente. -
Elija
Create GraphQL resources later
. Elija Siguiente. -
Revise las entradas y seleccione Crear API.
La consola de AWS AppSync crea una nueva API de GraphQL automáticamente utilizando el modo de autenticación de clave de API. Puede utilizar la consola para configurar aún más la API de GraphQL y ejecutar solicitudes.
Creación de un esquema de GraphQL
Ahora que tiene una API de GraphQL, vamos a crear un esquema de GraphQL. En el editor Esquema de la consola de AWS AppSync, use el siguiente fragmento:
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 el origen de datos HTTP
Para configurar el origen de datos HTTP, haga lo siguiente:
-
En la página Orígenes de datos de la API de GraphQL de AWS AppSync, seleccione Crear origen de datos.
-
Escriba un nombre para el origen de datos como
HTTP_Example
. -
En Tipo de origen de datos, elija Punto de conexión HTTP.
-
Establezca el punto de conexión en el punto de conexión de la puerta de enlace de API que se creó al principio del tutorial. Para encontrar el punto de conexión generado por la pila, vaya a la consola de Lambda y busque su aplicación en Aplicaciones. Dentro de la configuración de la aplicación, debería ver un punto de conexión de API, que será su punto de conexión en AWS AppSync. Asegúrese de no incluir el nombre de etapa como parte del punto de conexión. Por ejemplo, si su punto de conexión fuera
https://aaabbbcccd.execute-api.us-east-1.amazonaws.com/v1
, escribiríahttps://aaabbbcccd.execute-api.us-east-1.amazonaws.com
.
nota
En estos momentos, solo los puntos de conexión públicos son compatibles con AWS AppSync.
Para obtener más información acerca de las entidades de certificación que reconoce el servicio de AWS AppSync, consulte Certificate Authorities (CA) Recognized by AWS AppSync for HTTPS Endpoints.
Configuración de solucionadores
En este paso conectará el origen de datos HTTP a las consultas getUser
y addUser
.
Para configurar el solucionador de getUser
:
-
En su API de GraphQL de AWS AppSync, seleccione la pestaña Esquema.
-
A la derecha del editor Esquema, en el panel Solucionadores y en la sección de tipo Consulta, busque el campo
getUser
y seleccione Asociar. -
Mantenga el tipo de solucionador en
Unit
y el tiempo de ejecución enAPPSYNC_JS
. -
En Nombre del origen de datos, elija el punto de conexión HTTP que creó anteriormente.
-
Seleccione Crear.
-
En el editor de código Solucionador, añada el siguiente fragmento como controlador de solicitudes:
import { util } from '@aws-appsync/utils' export function request(ctx) { return { version: '2018-05-29', method: 'GET', params: { headers: { 'Content-Type': 'application/json', }, }, resourcePath: `/v1/users/${ctx.args.id}`, } }
-
Añada el siguiente fragmento como controlador de respuestas:
export function response(ctx) { const { statusCode, body } = ctx.result // if response is 200, return the response if (statusCode === 200) { return JSON.parse(body) } // if response is not 200, append the response to error block. util.appendError(body, statusCode) }
-
Elija la pestaña Query (Consulta) y ejecute la consulta siguiente:
query GetUser{ getUser(id:1){ id username } }
Debe obtener la siguiente respuesta:
{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
Para configurar el solucionador de addUser
:
-
Elija la pestaña Schema (Esquema).
-
A la derecha del editor Esquema, en el panel Solucionadores y en la sección de tipo Consulta, busque el campo
addUser
y seleccione Asociar. -
Mantenga el tipo de solucionador en
Unit
y el tiempo de ejecución enAPPSYNC_JS
. -
En Nombre del origen de datos, elija el punto de conexión HTTP que creó anteriormente.
-
Seleccione Crear.
-
En el editor de código Solucionador, añada el siguiente fragmento como controlador de solicitudes:
export function request(ctx) { return { "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json" }, "body": ctx.args.userInput } } }
-
Añada el siguiente fragmento como controlador de respuestas:
export function response(ctx) { if(ctx.error) { return util.error(ctx.error.message, ctx.error.type) } if (ctx.result.statusCode == 200) { return ctx.result.body } else { return util.appendError(ctx.result.body, "ctx.result.statusCode") } }
-
Elija la pestaña Query (Consulta) y ejecute la consulta siguiente:
mutation addUser{ addUser(userInput:{ id:"2", username:"shaggy" }){ id username } }
Si vuelve a ejecutar la consulta
getUser
, debería devolver la siguiente respuesta:{ "data": { "getUser": { "id": "2", "username": "shaggy" } } }
Invocación de servicios de AWS
Puede utilizar los solucionadores de HTTP para establecer una interfaz de API de GraphQL para los servicios de AWS. Las solicitudes HTTP a AWS deben firmarse con el proceso de Signature Version 4 para que AWS pueda identificar quién las envió. AWS AppSync calcula la firma en su nombre cuando asocia un rol de IAM al origen de datos HTTP.
Debe proporcionar dos componentes adicionales para invocar los servicios de AWS con solucionadores de HTTP:
-
Un rol de IAM con permisos para realizar una llamada a las API del servicio de AWS.
-
Configuración de la firma en el origen de datos
Por ejemplo, si desea realizar una llamada a la operación ListGraphqlApis con los solucionadores de HTTP, primero debe crear un rol de IAM que AWS AppSync asume con la siguiente política asociada:
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "appsync:ListGraphqlApis" ], "Effect": "Allow", "Resource": "*" } ] }
A continuación, cree el origen de datos HTTP para AWS AppSync. En este ejemplo, debe realizar una llamada a AWS AppSync en la región Oeste de EE. UU. (Oregón). Ajuste la siguiente configuración HTTP en un archivo denominado http.json
, que incluye la región de la firma y el nombre del servicio:
{ "endpoint": "https://appsync.us-west-2.amazonaws.com/", "authorizationConfig": { "authorizationType": "AWS_IAM", "awsIamConfig": { "signingRegion": "us-west-2", "signingServiceName": "appsync" } } }
A continuación, utilice la AWS CLI para crear el origen de datos con un rol asociado de la siguiente forma:
aws appsync create-data-source --api-id <API-ID> \ --name AWSAppSync \ --type HTTP \ --http-config file:///http.json \ --service-role-arn <ROLE-ARN>
Cuando asocie un solucionador al campo del esquema, utilice la siguiente plantilla de mapeo de solicitudes para realizar una llamada a AWS AppSync:
{ "version": "2018-05-29", "method": "GET", "resourcePath": "/v1/apis" }
Cuando ejecuta una consulta de GraphQL para este origen de datos, AWS AppSync firma la solicitud mediante el rol que ha proporcionado e incluye la firma en la solicitud. La consulta devuelve una lista de API de GraphQL de AWS AppSync en su cuenta de dicha región de AWS.