es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Validar la entrada del usuario en los Resolvers de DynamoDB en AppSync.

Tengo una API de AWS AppSync con DynamoDB y puedo crear y obtener datos de ella con “Resolutores de DynamoDB” (plantillas VTL).

No estoy seguro de cómo puedo hacer la validación de entrada del usuario con las plantillas VTL. Quiero asegurarme de que el “firstName” del contacto tenga entre 2 y 30 caracteres de longitud.

¿Cómo puedo lograr esto con VTL? ¿Existe alguna manera de hacer esta validación dentro del esquema GraphQL en sí?

Aquí está mi esquema GraphQL:

schema {
   query: Query
   mutation: Mutation
}

type Mutation {
   createContact(contact: ContactInput!): Contact! 
}

type Contact {
    contactId: ID!
    firstName: String!
    lastName: String!
    email: String!
}

input ContactInput {
    firstName: String!
    lastName: String!
    email: String!
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para validar la entrada del usuario en la API de AWS AppSync con plantillas VTL, puedes utilizar la variable $util que proporciona una variedad de funciones de utilidad VTL para realizar operaciones en los datos de entrada.

    Para asegurarte de que el campo “firstName” de un contacto tenga entre 2 y 30 caracteres, puedes agregar esta validación al resolvedor “createContact” en tu plantilla VTL. Aquí tienes un ejemplo de cómo puedes lograrlo:

    ## Esta plantilla VTL realiza la validación de la entrada para la mutación "createContact"
    ## El campo "firstName" del contacto debe tener entre 2 y 30 caracteres
    
    ## Realizar validación de longitud en el campo "firstName"
    #if($util.length($ctx.args.contact.firstName) < 2 || $util.length($ctx.args.contact.firstName) > 30)
        $util.error("Entrada inválida: el campo firstName debe tener entre 2 y 30 caracteres")
    #end
    
    ## Operación PutItem de DynamoDB para guardar los datos del contacto
    {
        "version": "2017-02-28",
        "operation": "PutItem",
        "key": {
            "contactId": $util.dynamodb.toDynamoDBJson($util.autoId())
        },
        "attributeValues": $util.dynamodb.toMapValuesJson($ctx.args.contact),
        "condition": {
            "expression": "attribute_not_exists(#contactId)",
            "expressionNames": {
                "#contactId": "contactId"
            }
        }
    }
    

    Esta plantilla VTL utiliza la función $util.length para verificar la longitud del campo firstName y retorna un mensaje de error si no está entre 2 y 30 caracteres. Si la validación es exitosa, la plantilla realiza una operación putItem de DynamoDB para guardar los datos del contacto.

    También puedes agregar reglas de validación a tu esquema GraphQL utilizando directivas. AWS AppSync proporciona una directiva @constraint integrada que te permite agregar restricciones a los campos de tu esquema. Por ejemplo, puedes modificar la definición del tipo ContactInput de la siguiente manera:

    input ContactInput {
      firstName: String! @constraint(minLength: 2, maxLength: 30)
      lastName: String!
      email: String!
    }
    

    Esta directiva asegura que el campo firstName debe tener una longitud entre 2 y 30 caracteres. Si un usuario intenta crear un contacto con un firstName inválido, la API mostrará un mensaje de error de validación. Sin embargo, debes tener en cuenta que este enfoque requiere una configuración y configuración adicional más allá del uso de plantillas VTL.

Comments are closed.