INTEGRATED LAB · Starter
GAS 商品 GET、訂單 POST 與聯絡 POST 契約|整合 Lab
在同一份章節作品中整合 4 個 module,排除單項通過但組合失敗的問題。
最後整合任務
交付:完成 action=listProducts、createOrder、createContact 三條 GAS 契約、form-urlencoded POST 與一致 {ok,data,message,error} envelope;前端無秘密。
將同一組責任轉用到另一個商家情境,仍達成:完成 action=listProducts、createOrder、createContact 三條 GAS 契約、form-urlencoded POST 與一致 {ok,data,message,error} envelope;前端無秘密。
限制:不新增框架。;保留 module id 與驗收證據。
依序回看每個 topic
整合不是重新背一遍名詞;是把每個 topic 的責任放回同一份作品。
- 1. 商品 GET Query
files/starter/apps-script/Code.gs|search 含 action=listProducts、paramCount=1
回到 topic 說明 - 2. 商品 GET 回應欄位
files/starter/apps-script/Code.gs|count=5、uniqueCount=5、valid=true
回到 topic 說明 - 3. 訂單 POST 契約
files/starter/apps-script/Code.gs|count=8、uniqueCount=8、valid=true
回到 topic 說明 - 4. 聯絡 POST 與 JSON Envelope
files/starter/apps-script/Code.gs|count=11、uniqueCount=11、valid=true
回到 topic 說明
四個整合停點
每個停點都要留下檔案、畫面或瀏覽器證據。
Step 1|觀察整合 Starter 並找出第一個未通過 module。
檔案:files/starter/index.html 定位:#observe
操作:逐項讀取 outcomes,執行一次現況操作。
// OBSERVE:不修改程式,先記錄第一個失敗 moduleId。
預期:能指出第一個未通過 module。
證據:第一個 moduleId 與缺少的 evidence。
卡住先查:確認開啟的是 files/starter/index.html。
Step 2|依 module 順序修改,一次只加入一個責任。
檔案:files/starter/index.html 定位:#modify
操作:以 URLSearchParams 產生查詢並核對 action。 → 核對 response 第一筆 product 的五個公開 key 與型別,並讀取 ok/data/message/error。 → 展開 Network Form Data,先核對 action/payload,再 JSON.parse payload 核對 keys。 → 先核對 Form Data 的 action/payload,再核對成功與失敗 envelope。
// 26-01-get-query: 以 URLSearchParams 產生查詢並核對 action。
// 26-02-get: 核對 response 第一筆 product 的五個公開 key 與型別,並讀取 ok/data/message/error。
// 26-03-post: 展開 Network Form Data,先核對 action/payload,再 JSON.parse payload 核對 keys。
// 26-04-post-json-envelope: 先核對 Form Data 的 action/payload,再核對成功與失敗 envelope。
預期:完成 action=listProducts、createOrder、createContact 三條 GAS 契約、form-urlencoded POST 與一致 {ok,data,message,error} envelope;前端無秘密。
證據:search 含 action=listProducts、paramCount=1;count=5、uniqueCount=5、valid=true;count=8、uniqueCount=8、valid=true;count=11、uniqueCount=11、valid=true
卡住先查:回到第一個未通過的 module,只修該處。
Step 3|驗證所有 module 在整合後仍成立。
檔案:files/solution/index.html 定位:#verify
操作:重新整理並依 outcomes 順序重跑所有證據。
// VERIFY:逐項記錄 pass/fail,不以看到畫面代替 evidence。
預期:4/4 module 通過。
證據:每個 moduleId 都有實際結果與重設後重現紀錄。
卡住先查:若失敗,回到第一個失敗 module,不同時修多項。
Step 4|把本章責任轉用到不同內容情境。
檔案:files/starter/index.html 定位:#challenge
操作:替另一個商家情境重做,仍達成:完成 action=listProducts、createOrder、createContact 三條 GAS 契約、form-urlencoded POST 與一致 {ok,data,message,error} envelope;前端無秘密。
// CHALLENGE:只替換內容與資料,不新增框架或跳過 self-check。
預期:完成 action=listProducts、createOrder、createContact 三條 GAS 契約、form-urlencoded POST 與一致 {ok,data,message,error} envelope;前端無秘密。
證據:轉用後的作品與全數 module self-check。
卡住先查:先確認共同基底與 module id 未被改壞。