带有 GraphQL 解析错误的 Google Apps 脚本 API 请求

Posted

技术标签:

【中文标题】带有 GraphQL 解析错误的 Google Apps 脚本 API 请求【英文标题】:Google Apps Script API Request with GraphQL parse error 【发布时间】:2019-12-09 16:44:21 【问题描述】:

我正在尝试使用 Apps 脚本发出 API 请求。 API 基于 GraphQL。 我正在使用 JSON.stringify 函数。但API返回错误。

请求:

payload="query":"mutation change_column_value (board_id: 177955, item_id: 287466289, column_id:\"phone\", value: \"phone : 15065332974, countryShortName: \"US\" \") name column_values id value"

我遇到了错误;

"errors":["message":"Parse error on \" \" (STRING) at [1, 148]","locations":["line":1,"column":148]]

应用脚本代码:

   var us = "US"
   var column_values = ' \
     mutation change_column_value (board_id: 177955, item_id: '+ 287466289  +', column_id:"phone", value: "phone : 15065332974, countryShortName: \"' + us  +'\" ") name column_values id value \
   ';    

    settings = 
      "method": "POST",    
      "headers": "Content-Type" : "application/json","Authorization" : "eyJhbGciOiJIXXXXXXXXXX",  
      "payload" : JSON.stringify(query:column_values)
    

    response= UrlFetchApp.fetch(url, settings);  

【问题讨论】:

只是澄清一下,value 参数 supposed 是否是一个包含一些 JSON 值的字符串? 【参考方案1】:

您不需要在 JSON 请求中转义特殊字符。

syntax 意味着使用通过冒号相互分配的键值对,其中字符串位于引号内(不使用反斜杠转义!),而数字和变量名则不是。

括号应用于您所需的 API 请求,如documented。

【讨论】:

【参考方案2】:

GraphQL 操作中的括号表示一个选择集——一个或多个被请求的字段。操作本身(无论是query 还是mutation)都不是一个字段,所以不要将整个操作括在括号中。

正确:

mutation 
  doSomething

不正确:


  mutation 
    doSomething
  

只有在使用query shorthand 时,您会看到看起来像是在“外部”的括号。

如果value 是一个字符串,那么您使用反斜杠来转义该字符串 内的双引号应该没问题。

您也可以考虑使用variables,这将大大清理您的代码并使其不易出错。

【讨论】:

以上是关于带有 GraphQL 解析错误的 Google Apps 脚本 API 请求的主要内容,如果未能解决你的问题,请参考以下文章

从 graphql yoga 返回状态码

GraphQL - 语法错误:预期“:”,找到“)”[关闭]

带有 Spring 的 GraphQL-java - 解析器 vd datafetcher

如何使用带有 ktor 框架的 graphql-kotlin 进行字段级解析器

如何使用带有 Mongoose 和 ES6 承诺的 Graphql 中的 find 来解析多条记录

带有graphql-yoga的子字段上的Graphql错误