【问题标题】:What response format does AppSync expect?AppSync 期望什么响应格式?
【发布时间】:2021-01-25 06:39:25
【问题描述】:

我是 AWS 的新手,需要建议。我有AppSync 中描述的GraphQL 架构。方案很简单,它只有一个Query,称为getEmployees。作为此查询的解析器,我在 Python 中使用 AWS Lambda 函数。这个 AWS Lambda 函数可以正常工作。日志中没有错误。当我提出请求时,我总是得到空的空值。可能是什么问题呢?我错过了什么?

AppSync 中的 GraphQL 架构:

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
}

Python 中的 AWS Lambda 函数:

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
    }
  }
}

P.S.在 AppSync 设置中,我禁用了请求和响应映射模板。

【问题讨论】:

    标签: python amazon-web-services aws-lambda graphql aws-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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-01
      • 1970-01-01
      • 2015-04-21
      • 2020-11-24
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      相关资源
      最近更新 更多