如何在Postman中正确配置GraphQL自定义类型作为变量?
我之前刚好碰到过和你一模一样的问题,折腾了好一阵子才搞定,给你几个亲测有效的思路:
一、先搞定GraphQL变量的正确配置
你之前用GraphQL变量时收到Bad request错误,大概率是变量定义或传递格式不对。按照下面的步骤调整试试:
修改Mutation,明确变量定义
首先要在mutation开头声明你的自定义类型变量,替换掉硬编码的内容,比如:mutation CreateApplication($request: ApplicationRequestInput!) { createApplication(request: $request) { __typename ... on AsyncTaskStatus { taskID state payload { ... on ApplicationUpdated { applicationID applicationNumber __typename } __typename } __typename } ... on Error { ...errorData __typename } } } fragment errorData on Error { __typename code message }注意
ApplicationRequestInput要换成你Schema里实际定义的自定义输入类型名称(别写错大小写或者后缀)。正确传递变量值
- 如果用Postman的
GraphQL格式请求:在「Variables」区域填入符合自定义类型结构的JSON,枚举值要用字符串包裹(GraphQL枚举在JSON变量里必须是字符串形式):{ "request": { "applicationKind": "NEW_ISSUANCE", "documentKind": "REGULAR_PASSPORT", "personalData": { "timestamp": null, "firstname": "NAME", "lastname": "LASTNAME", "middlename": "MIDDLENAME", "dateOfBirth": "2011-09-28", "citizenshipCountryCode": "USA", "gender": "MALE", "personalNumber": "3344", "placeOfBirth": "CHICAGO", "municipalityOfBirth": "SOUTH", "countryCodeOfBirth": "USA" }, "addressData": { "street": "WEST", "municipality": "EAST", "place": "CHICAGO", "country": { "code": "USA", "name": null }, "entrance": "б", "flat": "13", "number": "35" } } } - 如果用
Raw JSON格式请求,整个请求体要包含query和variables两个字段:{ "query": "mutation CreateApplication($request: ApplicationRequestInput!) { createApplication(request: $request) { __typename ... on AsyncTaskStatus { taskID state payload { ... on ApplicationUpdated { applicationID applicationNumber __typename } __typename } __typename } ... on Error { ...errorData __typename } } fragment errorData on Error { __typename code message }", "variables": { "request": { /* 上面的自定义类型数据 */ } } }
- 如果用Postman的
二、用Postman变量的正确姿势
你提到用Postman变量时出现语法波浪线但请求正常,这基本是Postman的GraphQL语法检查器bug——它没法正确识别变量替换后的内容,实际请求没问题的话可以忽略。但如果想让语法提示正常,或者更规范地用变量,可以试试这两种方式:
直接存储JSON对象为变量
在Postman环境/集合变量里,把requestData变量的值设置为JSON对象(不是字符串,Postman现在支持直接存JSON类型),然后在请求体里这样引用:{ "query": "...", "variables": { "request": {{requestData}} } }双大括号会让Postman自动把变量解析成JSON对象,避免格式错误。
如果变量是字符串形式的JSON
如果你之前把变量存成了JSON字符串(比如用JSON.stringify()生成的),可以用Postman的内置函数解析:{ "query": "...", "variables": { "request": {{$json requestData}} } }
三、排查小技巧
- 核对自定义类型名称和枚举值的拼写、大小写,必须和Schema完全一致;
- 用Postman左下角的「Console」查看实际发送的请求体,和硬编码的版本对比,看看变量替换后有没有多余的引号、逗号这类格式问题;
- 如果还是报错,把Schema里的自定义输入类型定义贴出来,能更快定位问题。
希望这些能帮你走出困境!
内容的提问来源于stack exchange,提问作者Nikola Pepic
相关产品推荐
相关产品推荐

