

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.

# Creación de consultas básicas (VTL)
<a name="configuring-resolvers"></a>

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

Los solucionadores de GraphQL conectan los campos de un esquema de tipo a un origen de datos. Los resolutores son el mecanismo mediante el cual se tramitan las solicitudes. AWS AppSync pueden crear y conectar automáticamente resolutores a partir de un esquema o crear un esquema y conectar resolutores desde una tabla existente sin necesidad de escribir ningún código.

Resolvers que se AWS AppSync utilizan JavaScript para convertir una expresión de GraphQL en un formato que pueda utilizar la fuente de datos. Como alternativa, las plantillas de asignación se pueden escribir en [Apache Velocity Template Language (VTL)](https://velocity.apache.org/engine/2.0/vtl-reference.html) para convertir una expresión de GraphQL en un formato que el origen de datos pueda utilizar.

En esta sección se mostrará cómo configurar los solucionadores mediante VTL. [En la guía de programación de plantillas de mapeo de Resolver encontrará una guía de programación tipo tutorial introductorio para escribir [resolutores, y en la referencia contextual de la plantilla de mapeo](resolver-mapping-template-reference-programming-guide.md#aws-appsync-resolver-mapping-template-reference-programming-guide) de Resolver encontrará utilidades auxiliares para su uso durante la programación.](resolver-context-reference.md#aws-appsync-resolver-mapping-template-context-reference) AWS AppSync también incluye flujos de prueba y depuración integrados que puedes usar cuando editas o creas desde cero. Para obtener más información, consulte la sección sobre la [prueba y depuración de solucionadores](test-debug-resolvers.md#aws-appsync-test-debug-resolvers).

Recomendamos seguir esta guía antes de intentar utilizar alguno de los tutoriales mencionados anteriormente.

En esta sección, veremos cómo crear un solucionador, añadir un solucionador para mutaciones y usar configuraciones avanzadas.

## Cree su primer solucionador
<a name="create-your-first-resolver"></a>

Siguiendo los ejemplos de las secciones anteriores, el primer paso es crear un solucionador para su tipo de `Query`.

------
#### [ Console ]

1. [Inicia sesión en la consola Consola de administración de AWS y ábrelaAppSync .](https://console.aws.amazon.com/appsync/)

   1. En el **APIs panel de control**, elige tu API de GraphQL.

   1. En la **barra lateral**, seleccione **Esquema**.

1. En la parte derecha de la página, hay una ventana llamada **Solucionadores**. Este cuadro contiene una lista de los tipos y campos definidos en la ventana **Esquema** del lado izquierdo de la página. Puede asociar solucionadores a los campos. Por ejemplo, en el tipo de **Consulta**, seleccione **Asociar** junto al campo `getTodos`.

1. En la página **Crear un solucionador**, elija el origen de datos que creó en la guía [Asociar un origen de datos](https://docs.aws.amazon.com/appsync/latest/devguide/attaching-a-data-source.html). En la ventana **Configurar plantillas de asignación**, puede elegir las plantillas de asignación genéricas de solicitud y respuesta utilizando la lista desplegable de la derecha o escribir las suyas propias.
**nota**  
El emparejamiento de una plantilla de asignación de solicitudes con una plantilla de asignación de respuestas se denomina solucionador unitario. Los solucionadores unitarios suelen estar diseñados para realizar operaciones rutinarias; recomendamos usarlos solo para operaciones singulares con un número reducido de orígenes de datos. Para operaciones más complejas, recomendamos utilizar solucionadores de canalización, que pueden ejecutar varias operaciones con diversos orígenes de datos de forma secuencial.  
Para obtener más información acerca de la diferencia entre las plantillas de asignación de solicitudes y respuestas, consulte [Solucionadores unitarios](https://docs.aws.amazon.com//appsync/latest/devguide/resolver-mapping-template-reference-overview.html#unit-resolvers).  
Para obtener más información sobre el uso de solucionadores de canalización, consulte [Solucionadores de canalización](pipeline-resolvers.md#aws-appsync-pipeline-resolvers).

1. Para los casos de uso más comunes, la AWS AppSync consola tiene plantillas integradas que puedes usar para obtener elementos de fuentes de datos (por ejemplo, todas las consultas de elementos, búsquedas individuales, etc.). Por ejemplo en la versión sencilla del esquema que se da en la sección [Diseño del esquema](designing-your-schema.md#aws-appsync-designing-your-schema) en la que `getTodos` no tenía paginación, la plantilla de asignación de solicitudes para enumerar elementos es la siguiente:

   ```
   {
       "version" : "2017-02-28",
       "operation" : "Scan"
   }
   ```

1. Siempre se necesita una plantilla de asignación de respuestas para complementar la solicitud. La consola ofrece un valor predeterminado con el siguiente valor de acceso directo para las listas:

   ```
   $util.toJson($ctx.result.items)
   ```

   En este ejemplo, el objeto `context` (con el alias `$ctx`) para las listas de elementos tiene la forma `$context.result.items`. Si su operación de GraphQL devuelve un solo elemento, sería `$context.result`. AWS AppSync proporciona funciones auxiliares para operaciones comunes como la función `$util.toJson` enumerada anteriormente, para dar formato a las respuestas correctamente. Para ver una lista completa de funciones, consulte [Referencia de utilidad de la plantilla de asignación de solucionadores](resolver-util-reference.md#aws-appsync-resolver-mapping-template-util-reference).

1. Seleccione **Guardar solucionador**.

------
#### [ API ]

1. Cree un objeto de resolución llamando a la API de [https://docs.aws.amazon.com/appsync/latest/APIReference/API_CreateResolver.html](https://docs.aws.amazon.com/appsync/latest/APIReference/API_CreateResolver.html).

1. Puede modificar los campos del solucionador llamando a la API de [https://docs.aws.amazon.com/appsync/latest/APIReference/API_UpdateResolver.html](https://docs.aws.amazon.com/appsync/latest/APIReference/API_UpdateResolver.html).

------
#### [ CLI ]

1. Cree un solucionador ejecutando el comando [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/appsync/create-resolver.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/appsync/create-resolver.html).

   Deberá escribir 6 parámetros para este comando concreto:

   1. El `api-id` de su API.

   1. El `type-name` del tipo que quiere modificar en su esquema. En el ejemplo de la consola, esto era `Query`.

   1. El `field-name` del campo que quiere modificar en su tipo. En el ejemplo de la consola, esto era `getTodos`.

   1. El `data-source-name` del origen de datos que creó en la guía [Asociar un origen de datos](https://docs.aws.amazon.com/appsync/latest/devguide/attaching-a-data-source.html).

   1. La `request-mapping-template`, que es el cuerpo de la solicitud. En el ejemplo de la consola, esto era:

      ```
      {
          "version" : "2017-02-28",
          "operation" : "Scan"
      }
      ```

   1. La `response-mapping-template`, que es el cuerpo de la respuesta. En el ejemplo de la consola, esto era:

      ```
      $util.toJson($ctx.result.items)
      ```

   Un comando de ejemplo puede tener este aspecto:

   ```
   aws appsync create-resolver --api-id abcdefghijklmnopqrstuvwxyz --type-name Query --field-name getTodos --data-source-name TodoTable --request-mapping-template "{ "version" : "2017-02-28", "operation" : "Scan", }" --response-mapping-template ""$"util.toJson("$"ctx.result.items)"
   ```

   Aparecerá un resultado en la CLI. A continuación se muestra un ejemplo:

   ```
   {
       "resolver": {
           "kind": "UNIT",
           "dataSourceName": "TodoTable",
           "requestMappingTemplate": "{ version : 2017-02-28, operation : Scan, }",
           "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Query/resolvers/getTodos",
           "typeName": "Query",
           "fieldName": "getTodos",
           "responseMappingTemplate": "$util.toJson($ctx.result.items)"
       }
   }
   ```

1. Para modificar las plantillas de and/or mapeo de campos de un solucionador, ejecute el [https://awscli.amazonaws.com/v2/documentation/api/latest/reference/appsync/update-resolver.html](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/appsync/update-resolver.html)comando.

   Con la excepción del parámetro `api-id`, los parámetros utilizados en el comando `create-resolver` se sobrescribirán con los nuevos valores del comando `update-resolver`.

------

## Adición de un solucionador para mutaciones
<a name="adding-a-resolver-for-mutations"></a>

El siguiente paso es crear un solucionador para su tipo de `Mutation`.

------
#### [ Console ]

1. Inicie sesión en la [AppSync consola Consola de administración de AWS y ábrala](https://console.aws.amazon.com/appsync/).

   1. En el **APIs panel de control**, elige tu API de GraphQL.

   1. En la **barra lateral**, seleccione **Esquema**.

1. En el tipo de **Mutación**, seleccione **Asociar** junto al campo `addTodo`.

1. En la página **Crear un solucionador**, elija el origen de datos que creó en la guía [Asociar un origen de datos](https://docs.aws.amazon.com/appsync/latest/devguide/attaching-a-data-source.html).

1. En la ventana **Configurar plantillas de asignación**, modifique la plantilla de solicitud, ya que se trata de una mutación en la que se añade un elemento nuevo a DynamoDB. Use la siguiente plantilla de asignación de solicitud.

   ```
   {
       "version" : "2017-02-28",
       "operation" : "PutItem",
       "key" : {
           "id" : $util.dynamodb.toDynamoDBJson($ctx.args.id)
       },
       "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
   }
   ```

1. AWS AppSync convierte automáticamente los argumentos definidos en el `addTodo` campo del esquema de GraphQL en operaciones de DynamoDB. En el ejemplo anterior se almacenan registros en DynamoDB mediante una clave de `id`, que se transfiere desde el argumento de mutación como `$ctx.args.id`. Todos los demás campos que transfiera se mapearán automáticamente en atributos de DynamoDB con `$util.dynamodb.toMapValuesJson($ctx.args)`.

   Para este solucionador, use la siguiente plantilla de mapeo de respuesta:

   ```
   $util.toJson($ctx.result)
   ```

   AWS AppSync también admite flujos de trabajo de prueba y depuración para la edición de resoluciones. Puede usar un objeto `context` simulado para ver el valor transformado de la plantilla antes de la invocación. De forma opcional, puede ver la ejecución de la solicitud completa en un origen de datos de forma interactiva cuando ejecute una consulta. Para obtener más información, consulte las secciones sobre [prueba y depuración de solucionadores](test-debug-resolvers.md#aws-appsync-test-debug-resolvers) y sobre [monitorización y registro](monitoring.md#aws-appsync-monitoring).

1. Seleccione **Guardar solucionador**.

------
#### [ API ]

También puede hacerlo APIs utilizando los comandos de la sección [Cree su primera resolución](https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers.html#create-your-first-resolver) y los detalles de los parámetros de esta sección.

------
#### [ CLI ]

También puede hacer esto en la CLI utilizando los comandos de la sección [Cree su primer solucionador](https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers.html#create-your-first-resolver) y los detalles de los parámetros de esta sección.

------

En este momento, si no usa los solucionadores avanzados, puede empezar a utilizar su API de GraphQL tal como se indica en [Uso de la API](using-your-api.md#aws-appsync-using-your-api).

## Solucionadores avanzados
<a name="advanced-resolvers"></a>

Si está siguiendo la sección avanzada y crea un esquema de ejemplo en [Diseño del esquema](designing-your-schema.md#aws-appsync-designing-your-schema) para realizar un análisis paginado, utilice la siguiente plantilla de solicitud para el campo `getTodos`:

```
{
    "version" : "2017-02-28",
    "operation" : "Scan",
    "limit": $util.defaultIfNull(${ctx.args.limit}, 20),
    "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))
}
```

En este caso de uso de paginación el mapeo de la respuesta es algo más que un acceso directo, ya que debe contener tanto el *cursor* (de modo que el cliente sepa en qué página comenzar a continuación) como el conjunto de resultados. La plantilla de mapeo es la siguiente:

```
{
    "todos": $util.toJson($context.result.items),
    "nextToken": $util.toJson($context.result.nextToken)
}
```

Los campos de la plantilla de mapeo de respuesta anterior tienen que coincidir con los campos definidos en su tipo `TodoConnection`.

En el caso de las relaciones en las que tiene una tabla `Comments` y usted está solucionando el campo de comentarios del tipo `Todo` (que devuelve un tipo de `[Comment]`), puede utilizar una plantilla de asignación que ejecute una consulta en la segunda tabla. Para ello, ya debe haber creado un origen de datos para la tabla `Comments` tal como se indica en [Asociar un origen de datos](attaching-a-data-source.md#aws-appsync-getting-started-build-a-schema-from-scratch).

**nota**  
Usamos una operación de consulta en otra tabla solo con fines ilustrativos. También podría usar otra operación realizada en DynamoDB en su lugar. Además, puede extraer los datos de otra fuente de datos, como AWS Lambda Amazon OpenSearch Service, ya que la relación está controlada por su esquema de GraphQL.

------
#### [ Console ]

1. Inicia sesión en la [AppSync consola Consola de administración de AWS](https://console.aws.amazon.com/appsync/) y ábrela.

   1. En el **APIs panel de control**, elige tu API de GraphQL.

   1. En la **barra lateral**, seleccione **Esquema**.

1. En el tipo **Todo**, seleccione **Asociar** junto al campo `comments`.

1. En la página **Crear solucionador**, elija el origen de datos de la tabla **Comentarios**. El nombre predeterminado de la tabla **Comentarios** en las guías de inicio rápido es `AppSyncCommentTable`, pero puede variar en función del nombre que le haya dado.

1. Añada el siguiente fragmento de código a su plantilla de asignación de solicitud:

   ```
   {
       "version": "2017-02-28",
       "operation": "Query",
       "index": "todoid-index",
       "query": {
           "expression": "todoid = :todoid",
           "expressionValues": {
               ":todoid": {
                   "S": $util.toJson($context.source.id)
               }
           }
       }
   }
   ```

1. `context.source` hace referencia al objeto principal del campo actual que se está resolviendo. En este ejemplo, `source.id` hace referencia al objeto `Todo` individual, que se usa a continuación para la expresión de consulta.

   Puede utilizar la plantilla de mapeo de respuesta de acceso directo de la siguiente manera:

   ```
   $util.toJson($ctx.result.items)
   ```

1. Seleccione **Guardar solucionador**.

1. Por último, en la página **Esquema**, asocie un solucionador al campo `addComment` y especifique el origen de datos para la tabla `Comments`. La plantilla de mapeo de solicitud en este caso es un elemento `PutItem` sencillo con el elemento `todoid` específico en el que se realiza el comentario como argumento, pero usa la utilidad `$utils.autoId()` para crear una clave de ordenación única para el comentario de la siguiente manera:

   ```
   {
       "version": "2017-02-28",
       "operation": "PutItem",
       "key": {
           "todoid": { "S": $util.toJson($context.arguments.todoid) },
           "commentid": { "S": "$util.autoId()" }
       },
       "attributeValues" : $util.dynamodb.toMapValuesJson($ctx.args)
   }
   ```

   Utilice una plantilla de respuesta de acceso directo de la siguiente manera:

   ```
   $util.toJson($ctx.result)
   ```

------
#### [ API ]

También puedes hacerlo APIs utilizando los comandos de la sección [Crea tu primera resolución](https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers.html#create-your-first-resolver) y los detalles de los parámetros de esta sección.

------
#### [ CLI ]

También puede hacer esto en la CLI utilizando los comandos de la sección [Cree su primer solucionador](https://docs.aws.amazon.com/appsync/latest/devguide/configuring-resolvers.html#create-your-first-resolver) y los detalles de los parámetros de esta sección.

------