Azure Synapse Dataflow使用API请求体时失败的原因排查求助
问题分析与解决方案
核心差异与失败原因
变量类型不匹配
Copy Data Activity中after变量的值是字符串类型的"null",而Dataflow中改为了JSON原生的null。GraphQL服务定义的$after参数类型是String,传递原生null会触发类型校验错误,这是最可能的失败原因。请求体格式错误
Dataflow中你将整个请求体用单引号包裹成了字符串,但HTTP连接器设置为JSON格式时,应该直接传递原生JSON对象,而非字符串化的JSON。这种格式会导致服务无法正确解析GraphQL请求。潜在的转义与格式问题
Query中的换行符\n在字符串化后可能被Dataflow错误解析,或者HTTP连接器对特殊字符的处理逻辑和Copy Data不同,导致请求结构损坏。
修复步骤
修正
after变量值
将"after": null改回和Copy Data一致的"after": "null",匹配GraphQL定义的String类型参数要求:{"query": "query RoomStays($first: Int!, $from: Date!, $to: Date!, $after: String) {\n room_stays(\n first: $first,\n filter: {\n reservation_from: { ge: $from },\n reservation_to: { le: $to }\n },\n after: $after\n ) {\n pageInfo {\n hasNextPage\n endCursor\n }\n edges {\n cursor\n node {\n check_in\n check_out\n gross\n lodgingsGross\n additionalSales\n reservation_from\n reservation_to\n category {\n name\n }\n reservation {\n createdAt\n bookingChannelCode\n stayType {\n \tname\n \t}\n client {\n country\n }\n bookingSource {\n name\n }\n }\n }\n }\n }\n}","variables": {"after": "null","from": "2000-01-01","to": "2025-01-01","first": 10},"operationName": "RoomStays"}调整请求体传递方式
去掉请求体外层的单引号,直接将上述JSON内容填入Dataflow HTTP连接器的请求体中,同时确保连接器的Format设置为JSON。添加必要请求头
在HTTP连接器的Headers中添加Content-Type: application/json,确保GraphQL服务能正确识别请求格式。可选:简化Query格式
可以将Query中的换行符去掉,写成单行字符串,避免转义问题:{"query": "query RoomStays($first: Int!, $from: Date!, $to: Date!, $after: String) { room_stays(first: $first, filter: { reservation_from: { ge: $from }, reservation_to: { le: $to } }, after: $after) { pageInfo { hasNextPage endCursor } edges { cursor node { check_in check_out gross lodgingsGross additionalSales reservation_from reservation_to category { name } reservation { createdAt bookingChannelCode stayType { name } client { country } bookingSource { name } } } } } }","variables": {"after": "null","from": "2000-01-01","to": "2025-01-01","first": 10},"operationName": "RoomStays"}
内容的提问来源于stack exchange,提问作者Berat Cakir
相关产品推荐
相关产品推荐

