【问题标题】:Google Apps Script GraphQL API CallGoogle Apps 脚本 GraphQL API 调用
【发布时间】:2022-04-14 00:39:28
【问题描述】:

我一直在使用 Canvas REST API,但遇到了一些限制,因此被定向到他们的实验性 GraphQL API。鉴于其实验性质,他们几乎没有关于它的文档。尽管它对我正在构建的东西有好处,但我在互联网上也找不到很多东西。截至目前,我什至无法进行基本查询。

function testsendgraphql() {
  const url = "https://hsccsd.beta.instructure.com:443/api/graphql";
  const payload = `
  query {
    course(id: 1234) {
      {
        name
      }
    }
  }`;

  const options = {
  "method": "POST",
  "headers": { "Content-Type": "application/json", "Authorization": "Bearer "+getcanvasaccesstoken() },
  "body": payload
  };
  Logger.log(query);
  apiresponse = UrlFetchApp.fetch(url,options);
  var head = apiresponse.getAllHeaders();
  var data = JSON.parse(apiresponse.getContentText());
  Logger.log(data);
  Logger.log(head);
}

运行上述代码会得到 200 的响应代码,但会显示以下消息:

{errors=[{message=No query string was present}]}

我的有效载荷格式似乎已关闭。任何帮助将不胜感激。

【问题讨论】:

  • 在你的脚本中,当options中的body修改为payload,你会得到什么结果? Ref如果这不是您问题的直接解决方案,能否提供您要使用的API的官方文档?
  • 我什至没有意识到这一点。我现在收到一个失败的请求和一个 400 代码。不幸的是,文档是有限的。 GraphQL 据说已经为 Canvas 做好了准备,但还没有正式发布,因此没有官方文档。这是他们所拥有的链接canvas.instructure.com/doc/api/file.graphql.html
  • 感谢您的回复。我注意到您的问题已更新。当我看到你更新的问题时,我想我必须为我糟糕的英语水平道歉。看来您将"body": query 修改为"body": payload。但我提议将"body": query修改为"payload": query。使用更新后的问题时,它是"payload": payload
  • 但是,很遗憾,我认为仅通过上述修改可能无法解决您的问题。从您的附加文档中,我仍然不确定您要使用的 API 规范。我为此道歉。为了正确理解您要使用的 API,我可以询问您确认您工作正常的示例 curl 命令吗?通过这个,我想检查一下。

标签: javascript google-apps-script graphql


【解决方案1】:

我最近使用 Google Apps 脚本成功完成了以下 GraphQL 查询:

function test(query) {
  var url = "https://gql.waveapps.com/graphql/public";
  var options = {"headers": {"Authorization": "Bearer " + getAccessToken(),
                             "Content-Type": "application/json"
                            },
                 "payload": JSON.stringify({query}),
                 "method": "POST"
                }
  var response = UrlFetchApp.fetch(url, options);
  Logger.log(response);
  return;
}

传入函数的查询格式如下:

var query = "query { user { id defaultEmail } }";

【讨论】:

    【解决方案2】:

    您必须 JSON.stringify 您的查询并将其作为有效负载发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-05
      • 2014-08-25
      • 2016-03-23
      • 2019-12-09
      • 1970-01-01
      相关资源
      最近更新 更多