

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 resolutores HTTP en AWS AppSync
<a name="tutorial-http-resolvers"></a>

**nota**  
Ahora admitimos de forma básica el tiempo de ejecución APPSYNC\$1JS y su documentación. Considere la opción de utilizar el tiempo de ejecución APPSYNC\$1JS y sus guías [aquí](https://docs.aws.amazon.com/appsync/latest/devguide/tutorials-js.html).

AWS AppSync le permite utilizar fuentes de datos compatibles (es decir, Amazon DynamoDB AWS Lambda, Amazon Service o Amazon Aurora) para realizar diversas operaciones, además de cualquier punto de enlace HTTP arbitrario para resolver los campos de GraphQL. OpenSearch 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, utilizará una API REST (creada con Amazon API Gateway y Lambda) con un punto final de GraphQL AWS AppSync .

## Configuración en un clic
<a name="one-click-setup"></a>

Si desea configurar automáticamente un punto de enlace de GraphQL AWS AppSync con un punto de enlace HTTP configurado (mediante Amazon API Gateway y Lambda), puede utilizar la siguiente plantilla: AWS CloudFormation 

[https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/http/http-full.yaml](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/http/http-full.yaml)

## Creación de una API de REST
<a name="creating-a-rest-api"></a>

Puedes usar la siguiente AWS CloudFormation plantilla para configurar un punto final REST que funcione para este tutorial:

[https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/http/http-api-gw.yaml](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/http/http-api-gw.yaml)

La AWS CloudFormation pila realiza los siguientes pasos:

1. Configura una función Lambda que contiene la lógica de negocio del microservicio.

1. Configura una API REST de API Gateway con la siguiente combinación endpoint/method/content de tipos:


****  

| 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
<a name="creating-your-graphql-api"></a>

Para crear la API GraphQL en: AWS AppSync
+ Abre la AWS AppSync consola y selecciona **Crear API**.
+ En el nombre de la API, introduzca `UserData`.
+ Elija **Custom Schema (Esquema personalizado)**.
+ Seleccione **Crear**.

La AWS AppSync consola crea una nueva API de GraphQL para usted mediante el modo de autenticación con clave de API. Puede utilizar la consola para configurar el resto de la API de GraphQL y ejecutar consultas en ella durante el resto de este tutorial.

## Creación de un esquema de GraphQL
<a name="creating-a-graphql-schema"></a>

Ahora que tiene una API de GraphQL, vamos a crear un esquema de GraphQL. En el editor de esquemas de la AWS AppSync consola, asegúrate de que el esquema coincide con el siguiente esquema:

```
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 el origen de datos HTTP
<a name="configure-your-http-data-source"></a>

Para configurar el origen de datos HTTP, haga lo siguiente:
+ En la **DataSources**pestaña, elija **Nuevo** y, a continuación, escriba un nombre descriptivo para la fuente de datos (por ejemplo,`HTTP`).
+ En **Data source type (Tipo de origen de datos)**, elija **HTTP**.
+ Establezca como punto de conexión el punto de conexión de la puerta de enlace de la API que se ha creado. Asegúrese de no incluir el nombre de etapa como parte del punto de enlace.

 **Note (Nota):** En estos momentos, solo los puntos de enlace públicos son compatibles con AWS AppSync.

 **Nota:** Para obtener más información sobre las autoridades de certificación reconocidas por el AWS AppSync servicio, consulte [Autoridades de certificación (CA) reconocidas AWS AppSync por los puntos de enlace HTTPS.](http-cert-authorities.md#aws-appsync-http-certificate-authorities)

## Configuración de solucionadores
<a name="configuring-resolvers"></a>

En este paso conectará el origen de datos HTTP a la consulta **getUser**.

Para configurar el solucionador de :
+ Elija la pestaña **Schema (Esquema)**.
+ En el panel **Data types (Tipos de datos)** situado a la derecha, en el tipo **Query (Consulta)**, busque el campo **getUser** y seleccione **Attach (Asociar)**.
+ En **Data source name (Nombre del origen de datos)**, elija **HTTP**.
+ En **Configure the request mapping template (Configurar la plantilla de mapeo de solicitud)**, pegue el siguiente código:

```
{
    "version": "2018-05-29",
    "method": "GET",
    "params": {
        "headers": {
            "Content-Type": "application/json"
        }
    },
    "resourcePath": $util.toJson("/v1/users/${ctx.args.id}")
}
```
+ En **Configure the response mapping template (Configurar la plantilla de mapeo de respuesta)**, pegue el siguiente 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
```
+ 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"
        }
    }
}
```
+ Elija la pestaña **Schema (Esquema)**.
+ En el panel **Data types (Tipos de datos)** situado en la parte derecha, en **Mutation (Mutación)**, busque el campo **addUser** y seleccione **Attach (Asociar)**.
+ En **Data source name (Nombre del origen de datos)**, elija **HTTP**.
+ En **Configure the request mapping template (Configurar la plantilla de mapeo de solicitud)**, pegue el siguiente código:

```
{
    "version": "2018-05-29",
    "method": "POST",
    "resourcePath": "/v1/users",
    "params":{
      "headers":{
        "Content-Type": "application/json",
      },
      "body": $util.toJson($ctx.args.userInput)
    }
}
```
+ En **Configure the response mapping template (Configurar la plantilla de mapeo de respuesta)**, pegue el siguiente 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
```
+ Elija la pestaña **Query (Consulta)** y ejecute la consulta siguiente:

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

Debe obtener la siguiente respuesta:

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

## Servicios de invocación AWS
<a name="invoking-aws-services"></a>

Puedes usar resolutores HTTP para configurar una interfaz AWS API de GraphQL para los servicios. Las solicitudes HTTP AWS deben firmarse con el [proceso Signature Version 4](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html) para AWS poder identificar quién las envió. AWS AppSync calcula la firma en su nombre al asociar una función de IAM a la fuente de datos HTTP.

Usted proporciona dos componentes adicionales para invocar AWS servicios con resolutores HTTP:
+ Un rol de IAM con permisos para llamar al servicio AWS APIs
+ Configuración de la firma en el origen de datos

Por ejemplo, si desea llamar a la [ListGraphqlApis operación](https://docs.aws.amazon.com/appsync/latest/APIReference/API_ListGraphqlApis.html) con resolutores HTTP, primero debe [crear un rol de IAM](attaching-a-data-source.md#aws-appsync-getting-started-build-a-schema-from-scratch) que AWS AppSync asuma la siguiente política adjunta:

------
#### [ JSON ]

****  

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

------

A continuación, cree la fuente de datos HTTP para. AWS AppSync En este ejemplo, debe realizar una llamada a AWS AppSync en la región EE. UU. Oeste (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 AWS CLI para crear la fuente de datos con un rol asociado de la siguiente manera:

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

Cuando adjunte una resolución al campo del esquema, utilice la siguiente plantilla de mapeo de solicitudes para llamar AWS AppSync:

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

Cuando ejecutas una consulta GraphQL para esta fuente de datos, AWS AppSync firma la solicitud con el rol que has proporcionado e incluye la firma en la solicitud. La consulta devuelve una lista de AWS AppSync GraphQL APIs en tu cuenta en esa AWS región.