2012-10-09 40 views
1

我的場景: 我有一個作爲用戶1運行的AppsScript應用程序,作爲Web應用程序發佈。其中我已經實現了doGet()。 我有另一個Appscript應用程序作爲用戶2運行。我嘗試在已發佈的U​​RL上執行一個URLFetch,並獲取一堆表明請求者需要登錄的HTML。 如果我從瀏覽器中以'user2'進行相同的網址提取,doGet()會被完美訪問並返回我需要的內容。無法讓應用程序通過HTTP交換信息get/post

似乎你不能讓get(或後 - 我嘗試兩種)HTTP請求之間的Appscript應用程序。注:這兩個用戶都位於同一個域中,如上所述,當用戶從瀏覽器啓動時,它可以工作。這就像用戶的身份不是從應用程序傳遞到應用程序。

這是一個測試案例,因爲我試圖找出將數據從一個應用程序移動到另一個應用程序的最佳方式。 Google擁有用於返回數據的ContentService,但我想推送數據。 Push對於我正在考慮的體系結構來說是最好的,因爲在任何時候都會有幾個應用程序(10+)嘗試推送到一個應用程序,因此縮放非常重要。 ContentService適用於輪詢方法,如果其中一個應用程序輪詢其他應用程序,則不會擴展。10將獲取超時等任何提示重新提示:這樣的體系結構讚賞。我得到的另一個選擇是將10個應用程序直接寫入附加到主應用程序的ScriptDB。我不喜歡這個選項,因爲共享ScriptDB的唯一方式是在項目級別,每個應用程序都能夠看到ScriptDB中的所有內容,並且在應用程序級別不會有數據隔離。我意識到我正在推動Appscript的發展,並充分期待這個答案,但是隨着AppScript中的新產品的推出,企業級客戶正在考慮這些輕量級應用的方法。

回答

1

這並不是說你不能讓一個腳本調用另一個腳本(你絕對可以),但UrlFetchApp在設計上並沒有通過鍵盤上的用戶身份驗證。 (其原因不在這個答案的範圍內;足以說它們是安全相關的,對許多應用程序託管平臺很常見,並且很快就不會改變)。因此,您可以調用另一個腳本的唯一方法如果被調用的腳本發佈爲匿名用戶可用(這意味着它必須作爲腳本所有者運行,正如Henrique所說)。

然而,你想要做的是平凡的庫功能支持。如果腳本A想要通知腳本B的某些內容,並讓腳本B在保留腳本A的用戶身份驗證的同時採取措施,則只需將B作爲A的庫依賴項並向B添加一個函數即可打電話時要推送通知。

+0

是的,匿名發佈不會爲此工作。但是,圖書館功能很好。誰會想到,RPC可以免費通過應用程序庫調用。儘管提出了關於代碼及其容器可見性的問題。您必須共享一個至少具有讀取權限的圖書館(項目)才能使用該圖書館的用戶。這讓他們可以訪問你的代碼和容器。如果你是一個供應商,這不是一個好主意。你想保持你的IP安全。它適用於小型應用程序,但想知道使用公共庫的多個應用程序會受到什麼限制? – user1507720

+0

您現在可以用一箇中間庫來隱藏代碼,它只是委託給一個您不能訪問的「真實」庫,儘管這是一個有趣的觀點,我們可以看看。 –

0

我還沒有在這個新的'以用戶身份運行'選項測試這個介於兩者之間的Apps腳本doGet調用。但是作爲開發者運行時,它曾經爲我工作得很好。

另外,導入主應用程序並直接將數據推送到它並不一定要暴露任何東西。這一切都取決於你構建的「界面」(公共方法不能用下劃線結束)。你不需要傳遞數據庫實例對象。主腳本可以接收被保存的對象並自行執行。

希望這會有所幫助。

相關問題