0

在 Google Apps 脚本中,创建调用脚本中函数的 REST API 的简单方法是什么?

我意识到 REST 的动词(GET、POST、UPDATE、DELETE)需要一些关于如何将功能映射到 javascript 方法的决定,但我正在寻找最通用的方式来说“给我这个方法的 REST 接口” .

4

2 回答 2

2

听起来您想要ContentService。您为您想要的动词编写一个函数(doGet对于 GET,doPost对于 POST,其他不支持),然后您可以通过将其名称作为参数传递给另一个函数。

于 2013-06-26T02:58:29.253 回答
1

最简单的方法是编写一个带有 a 的 WebApp,doGet()它接受参数,将它们传递给您的函数,然后返回函数的输出。(就像科里说的......但我已经写了所有这些代码,所以你去吧!)

对于一个简单的计算器功能,这就是这样做的:

/**
 * GET requests should be for read-only queries; they should not change the state of the server and its data.
 */
function doGet(e) {
  var output = '';
  if (Object.keys(e.parameters).length < 3) {
    output += doMath('help','0','0');
  }
  else {
    output += JSON.stringify(e.parameters) +'\n';  // Echo parameters - debug only
    output += doMath(e.parameters.operation[0], e.parameters.val1[0], e.parameters.val2[0]);
  }

  return ContentService
            .createTextOutput(output)
            .setMimeType(ContentService.MimeType.JSON);
}

如果您想成为一个完整的极简主义者,这将起作用,没有错误处理:

function doGet(e) {
  return ContentService
            .createTextOutput(doMath(e.parameters.operation[0], e.parameters.val1[0], e.parameters.val2[0]))
            .setMimeType(ContentService.MimeType.JSON);
}

为了在这个模型中有效,您的目标函数需要处理自己的错误处理,并在所有情况下返回有用的东西。这是那个简单的计算器:

function doMath(operation, val1, val2) {
  // Do error checking for parameters
  var errors = '';
  for (var arg in arguments) {
    if (arguments[arg] == 'undefined') errors += "Missing " + arg + '\n';
    if (arg.indexOf('val') !== -1) {
      if (isNaN(arguments[arg])) errors += "Not a number: " + arg + '\n';
    }
  }
  // If we found errors, just report them
  if (errors != '') return errors;

  // Body of function
  var result;
  var num1 = parseFloat(val1);
  var num2 = parseFloat(val2);
  switch (operation) {
    case 'add':
      result = num1 + num2;
      break;
    case 'sub':
      result = num1 - num2;
      break;
    case 'mult':
      result = num1 * num2;
      break;
    case 'div':
      if (num2 !== 0.0) {
        result = num1 / num2;
      }
      else {
        result = 'Divide by zero';
      }
      break;
    case 'help':
      result = "Example:\n\n"
             + "  "+ScriptApp.getService().getUrl()
             + "?operation=add&val1=2&val2=2\n\n"
             + "Returns '4'";
      break;
    default:
      result = 'Unsupported operation';
      break;
  }
  return result;
}

根据此答案,在部署您的网络应用程序时,请记住将其提供给“所有人,甚至是匿名用户” 。

于 2013-06-26T03:36:41.693 回答