我已经能够成功地执行Appsync GraphQL查询和Postman的变化。但是,我很难连接到WebSocket URL的订阅。我怎样才能达到同样的效果?
yjghlzjz1#
由于Postman支持WebSockets,因此GraphQL订阅测试也是可以实现的。这样的测试需要两个步骤:
start
建立连接:1.创建新的WebSocket请求。1.输入您的服务器URL ws://或wss://。1.添加自定义标头参数Sec-WebSocket-Protocol: graphql-ws。其他标头可能取决于您的服务器配置。1.按下"连接"按钮。
ws://
wss://
Sec-WebSocket-Protocol: graphql-ws
当连接建立时,我们可以开始订阅。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语法,但有一个不同之处:
operationName
someSubscription
query
__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是一个带有您的参数的对象。
variables
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" }
2条答案
按热度按时间yjghlzjz1#
由于Postman支持WebSockets,因此GraphQL订阅测试也是可以实现的。这样的测试需要两个步骤:
start
消息。建立连接:
1.创建新的WebSocket请求。
1.输入您的服务器URL
ws://
或wss://
。1.添加自定义标头参数
Sec-WebSocket-Protocol: graphql-ws
。其他标头可能取决于您的服务器配置。1.按下"连接"按钮。
当连接建立时,我们可以开始订阅。
1.在"新消息"字段中输入命令。
1.按下"发送"按钮。
start
消息应如下所示:operationName
仅仅是订阅的名称,我想它是可选的,并且someSubscription
必须是来自您的模式的订阅类型。query
提醒常规GraphQL语法,但有一个不同之处:__typename
关键字位于每个字段列表之前。例如,来自负载的常规语法查询如下所示:
带参数(变量)的消息示例:
它还提醒常规GraphQL语法,如上所述。
variables
是一个带有您的参数的对象。flseospp2#
@弗拉基米尔的回答非常正确。给那些仍然有困难的人添加一些注解。
完整文档在此处@https://docs.aws.amazon.com/appsync/latest/devguide/real-time-websocket-client.html
步骤1 -建立连接:确保在“头”和“有效负载”查询字符串中使用base64编码值
标题示例:
payload:可以传入空的payload
步骤2 -注册订阅:
在消息中包含授权。转义行正确换行“\n”会引发错误,但“\n”有效。它会引发以下错误-误导。
不要忘记字符串化“数据”字段中的值。
{“类型”:“错误”,“有效负载”:{“错误”:[ {“错误类型”:“不支持的操作”,“消息”:“实时通道不支持未知”} ] } }