使用Postman测试Appsync订阅

jqjz2hbq  于 2023-02-04  发布在  Postman
关注(0)|答案(2)|浏览(188)

我已经能够成功地执行Appsync GraphQL查询和Postman的变化。但是,我很难连接到WebSocket URL的订阅。
我怎样才能达到同样的效果?

yjghlzjz

yjghlzjz1#

由于Postman支持WebSockets,因此GraphQL订阅测试也是可以实现的。这样的测试需要两个步骤:

  • 连接到服务器,
  • 发送start消息。

建立连接:
1.创建新的WebSocket请求。
1.输入您的服务器URL ws://wss://
1.添加自定义标头参数Sec-WebSocket-Protocol: graphql-ws。其他标头可能取决于您的服务器配置。
1.按下"连接"按钮。

当连接建立时,我们可以开始订阅。
1.在"新消息"字段中输入命令。
1.按下"发送"按钮。
start消息应如下所示:

{
  "id":"1",
  "payload": {
      "operationName": "MySubscription",
      "query": "subscription MySubscription {
          someSubscription {
              __typename
              someField1
              someField2 {
                  __typename
                  someField21
                  someField22
              }
          }
      }",
      "variables": null
  },
  "type": "start"
}

operationName仅仅是订阅的名称,我想它是可选的,并且someSubscription必须是来自您的模式的订阅类型。
query提醒常规GraphQL语法,但有一个不同之处:

  • __typename关键字位于每个字段列表之前。

例如,来自负载的常规语法查询如下所示:

subscription MySubscription {
  someSubscription {
        someField1
        someField2 {
              someField21
              someField22
        }
  }
}

带参数(变量)的消息示例:

{
      "id":"1",
      "payload": {
           "operationName": "MySubscription",
           "query": "subscription MySubscription($param1: String!) {
                  someSubscription((param1: $param1)) {
                      __typename
                      someField
                  }
            }",
            "variables": {
                  "param1": "MyValue"
            }
      },
      "type": "start"
}

它还提醒常规GraphQL语法,如上所述。
variables是一个带有您的参数的对象。

flseospp

flseospp2#

@弗拉基米尔的回答非常正确。给那些仍然有困难的人添加一些注解。
完整文档在此处@https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html
步骤1 -建立连接:确保在“头”和“有效负载”查询字符串中使用base64编码值
标题示例:

{
    "host":"example1234567890000.appsync-api.us-east-1.amazonaws.com",
    "x-api-key":"da2-12345678901234567890123456"
}

payload:可以传入空的payload

{}

步骤2 -注册订阅:
在消息中包含授权。转义行正确换行“\n”会引发错误,但“\n”有效。它会引发以下错误-误导。
不要忘记字符串化“数据”字段中的值。
{“类型”:“错误”,“有效负载”:{“错误”:[ {“错误类型”:“不支持的操作”,“消息”:“实时通道不支持未知”} ] } }

{
  "id": "2",
  "payload": {
    "data": "{\"query\":\"subscription onCreateMessage { changeNotification{  __typename changeType from } }\",\"variables\":{}}",
      "extensions":{
        "authorization":{
          "host":"example1234567890000.appsync-api.us-east-1.amazonaws.com",
          "x-api-key":"da2-12345678901234567890123456"
          }
        }
  },
  "type": "start"
}

相关问题