跳到主要內容

發表文章

目前顯示的是 7月, 2013的文章

Apps Script REST再一篇 - doPost request

通常操作REST服務時,除了GET方式操作之外 POST跟其他method的操作也少不了 這邊介紹POST的操作function:doPost() doPost function同樣會在參數部分帶入request object用來包裝傳入的參數 下面是一個範例,簡單的組一個response回覆前端的呼叫: function doPost(request){   var data = {"name": request.parameters.form };   return ContentService.createTextOutput(JSON.stringify(data))     .setMimeType(ContentService.MimeType.JSON); } 上面程式同樣使用request.parameters.[parameter name]來帶回傳入參數的值 後續可以有更複雜的操作,例如利用這個值做資料庫的查詢或是Google文件的查詢之類的... 程式完成後的deploy & publish部分則與之前方式相同。 Client操作的部份,為了應付比較複雜的POST操作,這邊使用Node.js的request模組來操作POST的呼叫,其中因為Apps Script執行url的redirect特性,必須加入 followAllRedirects 這個參數,指定request模組往下做redirect page的查詢動作,而form欄位所帶入的JOSN物件中,key值(form)所對應的value(123)則會實際反應在Apps Script中的request.parameters.[key]中 var request = require('request'); request({     url: ' https://script.google.com/macros/s/AKfycbxjC58GE1r...R5SA2nNb3Lsc/exec ',     method: 'POST',     followAllRedirects: true ,     form: {       form: '123'  

細看Apps Script的呼叫

上篇參考 Google Apps Script Doc 的部分,已經可以正常呼叫該url帶出的json資源 但是Google在Serving JSONP in Web Pages片段中提到的JSONP(可參考 Wiki定義的JSONP )的方式...個人不太喜歡這個作法 雖然JSONP也是個滿普遍的作法... 但是正常來說,CORS(這邊有一篇 Node.js實作CORS Server Side的文章 )應該是比較正確的作法吧! 而且,上一篇實際也是用了ajax來呼叫資源成功 因此這次加上一些參數來實際了解Apps Script的Header包裝了些什麼東西... # curl -i -L https://script.google.com/macros/s/AKfycbxjC58GErPi54eAZvhxIgaX2xSLGu38K4YfR0R5SA2nNb3Lsc/exec?start=test1234 HTTP/1.1 302 Moved Temporarily Content-Type: text/html; charset=UTF-8 Access-Control-Allow-Origin: * Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache Expires: Fri, 01 Jan 1990 00:00:00 GMT Date: Sat, 20 Jul 2013 02:24:13 GMT Location: https://script.googleusercontent.com/macros/echo?user_content_key=xdISd1kOLMcsy2Q....A&lib=MfUByQ3tUD4fXYfP6AIUJuMmwZ9lE5h1H Set-Cookie: NID=67=R7b_RUOMh-I59....L6A8QpSgyAV;Domain=. google.com ;Path=/;Expires=Sun, 19-Jan-2014 02:24:13 GMT;HttpOnly Set-Cookie: S=maestro=inV

Apps Script with RESTful

RESTful的幾個重點,其中一個就是從url定義資源所需的參數,而在Apps Script中的doGet function中,可以透過request物件來取出request過程中的query等參數... function doGet(request) {   var out = {name: request.parameters.start};   return ContentService.createTextOutput(JSON.stringify(out))     .setMimeType(ContentService.MimeType.JSON); } 要把doGet做publish時,首先要指定版本,原則上在"File > Manage Versions"裡面可以指定版本 然後再透過Deploy頁面設定Project version,就可以發佈該版本的Apps Script到Web上... 而Apps Script的執行部分有幾個重點供參考: 取出current web app url欄位的url時,url格式大概如下: https://script.google.com/macros/s/AKfycbxjC58GE1rPi54eAZvhxIgaX2xSLGu38K4YfR0R5SA2nNb3Lsc/exec url看起來是: https://script.google.com/macros/s/:id/exec 的組合 當點選下方的lastest code鏈結時候,或開啟測試模式,則會跑到: https://script.google.com/a/macros/mitac.com.tw/s/AKfycbzCUJIWgpo6yVnL4JG_4qSSAQlg99bwJ3EdE6J4lTh/dev 然後馬上被redirect到: https://script.googleusercontent.com/a/macros/mitac.com.tw/echo?user_content_key=j-9iX4odzmJRZKijrZ0e_5jqowDZT1uCy8d6Jx5x_FkOvWHMXj78CEgdU8n3oqyObjSjU2wmuTE8Fmdg-4L9BZBix-bWyo3Vm5