跳到主要內容

發表文章

目前顯示的是 七月, 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'     }   }, function(err, r, body){     if(err) console.log(err…

細看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=inVYnnByljs; Domain=.google.com; Path=/; Secure; HttpOnly P3P: CP=&quo…

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_BxDlH2jW0nuo2oDemN9CCS2h10ox_nR…