Google cloud platform 如何从AppMaker调用REST谷歌云API?
我想从AppMaker调用Google Cloud AutoML API,但很难弄清楚如何做到这一点。如何从AppMaker向Google Cloud进行REST调用?首先,按照说明生成服务帐户并下载私钥。(我还假设您已经为您的项目启用了API。) 然后,按照“附录:无OAuth的服务帐户授权”一节中的说明进行操作,但您需要实现自己的JWT编码算法,如下所示:Google cloud platform 如何从AppMaker调用REST谷歌云API?,google-cloud-platform,google-app-maker,google-cloud-ml,google-cloud-automl,Google Cloud Platform,Google App Maker,Google Cloud Ml,Google Cloud Automl,我想从AppMaker调用Google Cloud AutoML API,但很难弄清楚如何做到这一点。如何从AppMaker向Google Cloud进行REST调用?首先,按照说明生成服务帐户并下载私钥。(我还假设您已经为您的项目启用了API。) 然后,按照“附录:无OAuth的服务帐户授权”一节中的说明进行操作,但您需要实现自己的JWT编码算法,如下所示: var base64Encode = function (str) { var encoded = Utilities.base
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('.');
};
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());
}
- 从服务定义文件中获取API的服务名称和API名称
- 对于标头中的kid字段,指定服务帐户的私钥 ID。您可以在您的帐户的private_key_ID字段中找到此值 服务帐户JSON文件李>
- 对于iss和子字段,请指定 服务帐户的电子邮件地址。您可以在 服务帐户JSON文件的client_电子邮件字段李>
- 澳元 字段中的值指定 服务定义文件李>
- 对于iat字段,指定当前Unix 时间,对于exp字段,指定3600秒的精确时间 稍后,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('.');
};
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());
}