Как вызвать REST Google Cloud API из AppMaker? - PullRequest
1 голос
/ 08 ноября 2019

Я хочу вызвать API Google Cloud AutoML из AppMaker, но сложно понять, как это сделать. Как сделать REST-звонок в Google Cloud из AppMaker?

1 Ответ

1 голос
/ 08 ноября 2019

Сначала следуйте инструкциям здесь , чтобы создать учетную запись службы и загрузить закрытый ключ. (Я также предполагаю, что вы уже включили 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('.');
};
  • Получить имя службы API и имя API из файла определения службы в хранилище GitHub API Google
  • Для ребенкаполе в заголовке, укажите идентификатор закрытого ключа вашей учетной записи службы. Вы можете найти это значение в поле private_key_id вашего JSON-файла учетной записи службы.
  • Для полей iss и sub укажите адрес электронной почты вашей учетной записи службы. Вы можете найти это значение в поле client_email вашего JSON-файла учетной записи службы.
  • Для поля aud укажите https://SERVICE_NAME/,, используя значения из файла определения сервиса.
  • Для поля iat укажите текущее время Unix, а для поля exp укажите время ровно через 3600 секунд, когда истечет время JWT.

Подпишите JWT с помощью RSA-256, используя закрытый ключ, найденный в файле 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...