如何从AppMaker调用REST Google Cloud API?

我想从AppMaker调用Google Cloud AutoML API,但很难弄清楚该怎么做。如何从AppMaker向Google Cloud进行REST调用?

fuchen333 回答:如何从AppMaker调用REST Google Cloud API?

首先,按照说明here生成服务帐户并下载私钥。 (我还假设您已经为项目启用了API。)

然后,按照“附录:无OAuth的服务帐户授权”一节中的说明进行操作,但是您将需要实现自己的JWT编码算法,如下所示:

var base64Encode = function (str) {
    var encoded = Utilities.base64EncodeWebSafe(str);
    // Remove padding
    return encoded.replace(/=+$/,'');
};

// https://developers.google.com/identity/protocols/OAuth2ServiceAccount
// https://wtfruby.com/gas/2018/11/21/jwt-app-scripts.html

var getJWT = function (secret) {
    var header = JSON.stringify({
        typ: 'JWT',alg: 'RS256',kid: '...'
    });
    var encodedHeader = base64Encode(header);
    var iat = new Date().getTime() / 1000;
    var exp = iat + 3600;
    var payload = JSON.stringify({
      iss: "...",sub: "...",aud: "https://automl.googleapis.com/",iat: iat,exp: exp
    });
    var encodedPayload = base64Encode(payload);
    var toSign = [encodedHeader,encodedPayload].join('.');
    var signature = Utilities.computeRsaSha256Signature(toSign,secret);
    var encodedSignature = base64Encode(signature);
    return [toSign,encodedSignature].join('.');
};
  • 从服务定义文件in the Google APIs GitHub repository中获取API的服务名称和API名称
  • 对于标题中的kid字段,请指定服务帐户的私钥 ID。您可以在自己的private_key_id字段中找到此值 服务帐户JSON文件。
  • 对于iss和sub字段,请指定您的 服务帐户的电子邮件地址。您可以在 您的服务帐户JSON文件的client_email字段。
  • 对于音频 字段,使用{ 服务定义文件。
  • 对于iat字段,指定当前的Unix 时间,并在exp字段中,精确指定3600秒的时间 稍后,当JWT到期时。

使用RSA-256对JWT进行签名    您的服务帐户JSON文件中找到了私钥。

然后按如下所示进行REST调用:

function makeRestCall() {

  var jwt = getJWT();
  var options = {
    'method' : 'post','contentType': 'application/json','headers': {
      'Authorization': 'Bearer ' + jwt,},'muteHttpExceptions': true,'payload' : ...
  };

  var url = 'https://automl.googleapis.com/...';  
  return JSON.parse(UrlFetchApp.fetch(url,options).getContentText());
}
本文链接:https://www.f2er.com/3140810.html

大家都在问