You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Postman中正确配置GraphQL自定义类型作为变量?

我之前刚好碰到过和你一模一样的问题,折腾了好一阵子才搞定,给你几个亲测有效的思路:

一、先搞定GraphQL变量的正确配置

你之前用GraphQL变量时收到Bad request错误,大概率是变量定义或传递格式不对。按照下面的步骤调整试试:

  1. 修改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里实际定义的自定义输入类型名称(别写错大小写或者后缀)。

  2. 正确传递变量值

    • 如果用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的GraphQL语法检查器bug——它没法正确识别变量替换后的内容,实际请求没问题的话可以忽略。但如果想让语法提示正常,或者更规范地用变量,可以试试这两种方式:

  1. 直接存储JSON对象为变量
    在Postman环境/集合变量里,把requestData变量的值设置为JSON对象(不是字符串,Postman现在支持直接存JSON类型),然后在请求体里这样引用:

    {
      "query": "...",
      "variables": {
        "request": {{requestData}}
      }
    }
    

    双大括号会让Postman自动把变量解析成JSON对象,避免格式错误。

  2. 如果变量是字符串形式的JSON
    如果你之前把变量存成了JSON字符串(比如用JSON.stringify()生成的),可以用Postman的内置函数解析:

    {
      "query": "...",
      "variables": {
        "request": {{$json requestData}}
      }
    }
    

三、排查小技巧

  • 核对自定义类型名称和枚举值的拼写、大小写,必须和Schema完全一致;
  • 用Postman左下角的「Console」查看实际发送的请求体,和硬编码的版本对比,看看变量替换后有没有多余的引号、逗号这类格式问题;
  • 如果还是报错,把Schema里的自定义输入类型定义贴出来,能更快定位问题。

希望这些能帮你走出困境!

内容的提问来源于stack exchange,提问作者Nikola Pepic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 16:27:43