我想从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());
}