无法通过HTTP get / post获取Apps交换信息

时间:2012-10-09 15:45:04

标签: google-apps-script

我的情景: 我有一个作为web1运行的AppsScript应用程序作为Web应用程序发布。在其中我实现了doGet()。 我有另一个以user2运行的Appscript应用程序。我尝试在发布的URL上执行URLFetch并获取一堆HTML,表明请求者需要登录。 如果我从浏览器中获取与“user2”相同的URL,则可以完美地访问doGet()并返回我需要的内容。

似乎你无法在Appscript应用程序之间进行获取(或发布 - 我尝试过两者)HTTP请求。注:两个用户都在同一个域上,如上所述,当用户从浏览器启动时,它可以正常工作。这就像用户的身份没有从App传递给App。

这是一个测试案例,因为我正在尝试找出将数据从一个应用程序移动到另一个应用程序的最佳方法。谷歌有ContentService用于返回数据,但我想推送数据。推送最适合我正在考虑的架构,因为有几个应用程序(10+)试图在任何时候推送到一个应用程序,因此缩放很重要。 ContentService适用于一种轮询方法,如果一个应用程序轮询另一个应用程序,它将无法扩展。将获得超时等任何提示:这样的架构值得赞赏。我得到的另一个选项是10个应用程序直接写入附加到主应用程序的ScriptDB。我不喜欢这个选项,因为共享ScriptDB的唯一方法是在项目级别,每个应用程序都能够看到ScriptDB中的所有内容,并且在应用程序级别不会有数据隔离。我意识到我正在推动使用Appscript实现可能性的界限并完全期望作为答案,但是随着AppScript中的新产品,企业级客户正在考虑使用这些方法来实现轻量级应用程序。

2 个答案:

答案 0 :(得分:1)

并不是说你不能让一个脚本调用另一个(你绝对可以)但是UrlFetchApp在设计上并没有传递键盘上用户的身份验证。 (其原因超出了本答案的范围;足以说明它们与安全相关,对许多应用托管平台来说很常见,并且不太可能很快改变。)所以你可以调用另一个脚本的唯一方法是因为被调用的脚本被发布为匿名用户可用(这意味着它必须作为脚本所有者运行,正如Henrique所说)。

但是,您想要做的事情是图书馆功能所支持的。如果脚本A想要通知脚本B,并且让脚本B在保留脚本A的用户身份验证的同时采取行动,那么您需要做的就是将B作为A的库依赖项包括在内,并向B添加一个A可以的函数在想要发送通知时打电话。

答案 1 :(得分:0)

我没有使用这个新的“作为用户运行”选项在Apps脚本doGet调用之间进行测试。但是当它作为开发人员运行时,它对我来说工作正常。

此外,导入主应用程序并直接将数据推送到它不必暴露任何东西。这一切都取决于你构建的“接口”(公共方法没有用下划线完成)。您不需要传递db实例对象。主脚本可以接收被保存的对象并自行完成。

希望这有帮助。