Какой формат ответа ожидает AppSync?

#python #amazon-web-services #aws-lambda #graphql #aws-appsync

#python #amazon-веб-сервисы #aws-lambda #graphql #aws-appsync

Вопрос:

Я новичок в AWS и нуждаюсь в совете. У меня есть GraphQL схема, описанная в AppSync . Схема проста, у нее есть только один Query вызов getEmployees . В качестве средства разрешения этого запроса я использую AWS Lambda функцию на Python. Эта функция AWS Lambda работает без каких-либо проблем. В журналах нет ошибок. Когда я делаю запрос, я всегда получаю пустые нули. В чем может быть проблема? Что я пропустил?

Схема GraphQL в AppSync:

 type Employees {
    employeeId: String!
    employeeFirstName: String
    employeeLastName: String
}

type EmployeesPayload {
    pagingState: String
    employees: [Employees]
}

type Query {
    getEmployees(organizationId: String!, fetchSize: Int!, pagingState: String): EmployeesPayload
}

schema {
    query: Query
}
  

Функция AWS Lambda в Python:

 def lambda_handler(event, context):
    organization_id = event['arguments']['organizationId']
    fetch_size = event['arguments']['fetchSize']
    paging_state = event['arguments']['pagingState']

    # Business logic

    response = json.dumps(
        {
            "pagingState": "c76f05f9-337d-44dc-b131-c1dfee3ceefb",
            "employees": [
                {
                    "employeeId": "bd811630-0d42-49cd-8d63-7679d9eb96bb",
                    "employeeFirstName": "James",
                    "employeeLastName": "Bond"
                }
            ]
        },
        indent=4,
        sort_keys=True,
        ensure_ascii=False,
        default=utils.json_serializer
    )

    return response
  

Я делаю такой запрос:

 query MyQuery {
  getEmployees(organizationId: "5d354323-8b47-447e-8bc7-67dae57248b0", fetchSize: 5, pagingState: null) {
    pagingState
    employees {
      employeeId
      employeeFirstName
      employeeLastName
    }
  }
}
  

Ответ:

 {
  "data": {
    "getEmployees": {
      "pagingState": null,
      "employees": null
    }
  }
}
  

PS В настройках AppSync я отключил шаблон сопоставления запросов и ответов.

Ответ №1:

Ну, наконец-то я нашел ответ. С помощью проб и ошибок я понял, что AWS Lambda-функциям не нужно сериализовать данные в JSON. Стерилизация обрабатывается самим AppSync.

 def lambda_handler(event, context):
    organization_id = event['arguments']['organizationId']
    fetch_size = event['arguments']['fetchSize']
    paging_state = event['arguments']['pagingState']

    # Business logic

    response = {
        "pagingState": "c76f05f9-337d-44dc-b131-c1dfee3ceefb",
        "employees": [
            {
                "employeeId": "bd811630-0d42-49cd-8d63-7679d9eb96bb",
                "employeeFirstName": "James",
                "employeeLastName": "Bond"
            }
        ]
    }

    return response