迁移到纯websocket后,我在AWS Appsync上得到GraphQL订阅错误



由于最近的一些AWS限制,当在Appsync上使用GraphQL订阅时,我不能再通过Websockets使用MQTT。基于这个来自AWS的链接,我修改了我的Python代码库。

似乎连接正确,但订阅时,我收到以下错误:

{'message': "Cannot return null for non-nullable type: 'ID' within parent 'Command' (/onCommandCreated/commandId)"}

对于Command对象的每个字段重复此错误。

模式:

type Command {
commandId: ID!
createdAt: AWSDateTime!
command: String!
arguments: [String]!
deviceId: ID!
status: Int!
}
type Mutation {
submitCommand(command: NewCommand!): Command
}
input NewCommand {
command: String!
arguments: [String]!
deviceId: ID!
}
type Subscription {
onCommandCreated(deviceId: ID!): Command
@aws_subscribe(mutations: ["submitCommand"])
}
schema {
mutation: Mutation
subscription: Subscription
}

这是我的订阅:

{
"query": """subscription onCommand($deviceId: ID!) {
onCommandCreated(deviceId: $deviceId) {
commandId
deviceId
command
arguments
status
}
}
""",
"variables": {"deviceId": <a device id>}
}

我完全不清楚的是,在切换到纯websockets后,我已经开始有这个问题了。

我比较了纯websockets和MQTT之间的Cloudwatch日志,但我没有注意到任何相关的差异,除了请求id和定时日志。

哦,我忘了说我使用的是OIDC认证方法。

代码库可在这里获得。谢谢你,

最后,我删除了Command对象的非空要求。

因此,新的Command对象如下:
type Command {
commandId: ID
createdAt: AWSDateTime
command: String
arguments: [String]
deviceId: ID
status: Int
}

这不是一个解决方案,而是一个变通方法。

欢迎任何更好的解决方案。

相关内容

  • 没有找到相关文章

最新更新