使用Go调用Cyanite.ai GraphQL接口返回422错误排查
问题排查与解决方案
你的422错误源于Go GraphQL客户端的结构体定义不符合联合类型的查询语法要求,导致生成的请求与GraphiQL中正常执行的查询结构不一致。
核心问题:GraphQL标签的错误写法
你当前的结构体中,针对联合类型(LibraryTrackCreateSuccess/LibraryTrackCreateError)的字段标签写法存在两处关键错误:
CreatedLibraryTrack的标签只声明了碎片指令,缺少对应的字段名Code和Message的标签将字段名与碎片指令直接拼接,不符合客户端的解析规则
修正后的结构体定义
调整结构体的graphql标签,确保字段名与碎片指令正确关联:
type LibraryTrackCreateMutation struct { LibraryTrackCreate struct { Typename string `graphql:"__typename"` CreatedLibraryTrack struct { ID string `graphql:"id"` } `graphql:"createdLibraryTrack ... on LibraryTrackCreateSuccess"` Code string `graphql:"code ... on LibraryTrackCreateError"` Message string `graphql:"message ... on LibraryTrackCreateError"` } `graphql:"libraryTrackCreate(input: $input)"` }
关键修正说明:
- 给
CreatedLibraryTrack字段添加字段名createdLibraryTrack,与GraphQL查询中的字段完全对应 - 统一标签格式为
"字段名 ... on 类型名",让客户端正确生成带条件碎片的查询语句
额外验证建议
- 确认
uploadId变量的值与上传成功后获取的ID完全一致(注意大小写、无多余空格等细节) - 启用GraphQL客户端的日志功能,对比生成的请求与GraphiQL中执行的查询结构是否完全匹配,进一步排查差异
修正后重新执行突变,即可正常将上传的歌曲转为Cyanite库项。
内容的提问来源于stack exchange,提问作者Ruud Op Den Kelder
相关产品推荐
相关产品推荐

