在 Google Apps 脚本中,创建调用脚本中函数的 REST API 的简单方法是什么?
我意识到 REST 的动词(GET、POST、UPDATE、DELETE)需要一些关于如何将功能映射到 javascript 方法的决定,但我正在寻找最通用的方式来说“给我这个方法的 REST 接口” .
在 Google Apps 脚本中,创建调用脚本中函数的 REST API 的简单方法是什么?
我意识到 REST 的动词(GET、POST、UPDATE、DELETE)需要一些关于如何将功能映射到 javascript 方法的决定,但我正在寻找最通用的方式来说“给我这个方法的 REST 接口” .
听起来您想要ContentService。您为您想要的动词编写一个函数(doGet
对于 GET,doPost
对于 POST,其他不支持),然后您可以通过将其名称作为参数传递给另一个函数。
最简单的方法是编写一个带有 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;
}
根据此答案,在部署您的网络应用程序时,请记住将其提供给“所有人,甚至是匿名用户” 。