0

I am trying to learn how to use AppSync and its DynamoDB integrations.

I have successfully created an AppSync GraphQL API and linked a resolver to a getter on the primary key and thought I understood what is happening. However, I can not get a putItem resolver to work at all and am struggling to find a useful way to debug the logic.

There is a cdk repository here which will deploy the app. Lines 133-145 have a hand written schema which I thought should work however that receives the error

One or more parameter values were invalid: Type mismatch for key food_name expected: S actual: NULL (Service: DynamoDb, Status Code: 400

I also have attempted to wrap the expressions in quotes but receive errors. Where should I go from here?

The example data creates a table with keys

  1. food_name
  2. scientific_name
  3. group
  4. sub_group

with food_name as the primary key.

https://github.com/AG-Labs/AppSyncTask

Today I have attempted to reimplement the list resolver as

{
    "version" : "2017-02-28",
    "operation" : "Scan",
    ## Add 'limit' and 'nextToken' arguments to this field in your schema to implement pagination. **
    "limit": $util.defaultIfNull(${ctx.args.limit}, 20),
    "nextToken": $util.toJson($util.defaultIfNullOrBlank($ctx.args.nextToken, null))
}

with a response mapping of

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

In cloud watch I can see a list of results under log type ResponseMapping (albeit not correctly filtered but i'll ignore that for now) but these do not get returned to the querier. That result is simply

{
  "data": {
    "listGenericFoods": {
      "items": null
    }
  }
}

I don't understand where this is going wrong.

Andrew
  • 85
  • 2
  • 8
  • 1
    the schema file has only 133 lines. Check if you pushed. – GSSwain Apr 24 '21 at 21:56
  • Are you saying there should be more? The schema was initially created from the single type given to app sync. The resolver for get works not the others so I was thinking it was something to do with how those were being implemented. – Andrew Apr 25 '21 at 13:24

1 Answers1

0

The problem was that the resolvers were nested.

Writing a handwritten schema fixed the issue but resulted in a poorer API. Going back a few steps and will implement from the ground up slowly adding more resolvers.

The CloudWatch Logs once turned on helped somewhat but still required a lot of changing the resolvers ever so slightly and retrying.

Andrew
  • 85
  • 2
  • 8