ใช้ doGet / doPost ทำ API ด้วย Google Apps Script + Google Sheets
อัปเดต 5 ตุลาคม 2026
Google Apps Script สามารถทำหน้าที่เป็น API ฟรี ได้ โดยใช้ฟังก์ชัน doGet(e) สำหรับคำขอแบบ GET และ doPost(e) สำหรับคำขอแบบ POST เหมาะกับการเก็บข้อมูลจากเว็บไซต์ แอปมือถือ หรือ IoT ลง Google Sheets
ระบบพร้อมใช้ที่เกี่ยวข้อง
ตัวอย่าง API อ่าน-เขียน Google Sheets
const SHEET = SpreadsheetApp.getActive().getSheetByName('data');
function doGet(e) {
const rows = SHEET.getDataRange().getValues();
const [head, ...data] = rows;
const list = data.map(r => Object.fromEntries(head.map((h, i) => [h, r[i]])));
return json({ ok: true, data: list });
}
function doPost(e) {
const body = JSON.parse(e.postData.contents || '{}');
const lock = LockService.getScriptLock();
lock.waitLock(10000); // กันเขียนชนกันเมื่อมีคำขอพร้อมกัน
try {
SHEET.appendRow([new Date(), body.name, body.phone]);
} finally {
lock.releaseLock();
}
return json({ ok: true });
}
function json(obj) {
return ContentService.createTextOutput(JSON.stringify(obj))
.setMimeType(ContentService.MimeType.JSON);
}
เรียก API จากหน้าเว็บโดยไม่ติด CORS
เว็บแอป Apps Script ไม่รองรับ preflight (OPTIONS) จึงควรส่งเป็น text/plain ซึ่งเป็น "simple request"
await fetch(API_URL, {
method: 'POST',
headers: { 'Content-Type': 'text/plain;charset=utf-8' },
body: JSON.stringify({ name: 'สมชาย', phone: '0812345678' }),
});
ข้อควรระวัง
- รันฟังก์ชัน
doGetตรง ๆ ในหน้าแก้ไขโค้ดจะ error เพราะไม่มีตัวแปรeให้ทดสอบผ่านลิงก์เว็บแอปแทน - ใส่ API key ง่าย ๆ ในพารามิเตอร์ แล้วตรวจใน
doPostเพื่อกันคนอื่นยิงข้อมูลเข้ามา - ใช้
LockServiceทุกครั้งที่เขียนชีตจากหลายคำขอพร้อมกัน - ทุกครั้งที่แก้โค้ดต้อง Deploy เวอร์ชันใหม่ ลิงก์ API จึงจะเปลี่ยนตาม
คำถามที่พบบ่อย: ทำ API ด้วย Google Sheets
เพราะส่ง Content-Type เป็น application/json ทำให้เบราว์เซอร์ส่ง preflight ซึ่ง Apps Script ไม่รองรับ ให้ส่งเป็น text/plain แล้ว JSON.parse ในฝั่งสคริปต์
เหมาะกับงานขนาดเล็ก-กลาง มีขีดจำกัดการรันพร้อมกันและเวลาทำงาน 6 นาทีต่อครั้ง ควรใช้ LockService และ CacheService ช่วย
Deploy เป็นเว็บแอป Execute as: Me และ Who has access: Anyone แล้วใช้ลิงก์ /exec
ระบบอื่นที่น่าสนใจ
POS ร้านขายยา
จ่ายยาถูกคน ถูกล็อต ไม่มียาหมดอายุค้างชั้น · ชื่อสามัญ ประเภทยา เภสัชกรยืนยัน เตือนแพ้ยา ล็อต FEFO ฉลากยา บัญชีขายยาอันตราย · บน Google Sheets ของร้านเอง ไม่มีค่ารายเดือน
POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)
ผังโต๊ะสด · ลูกค้าสแกน QR สั่งอาหารที่โต๊ะ · จอครัว · แจ้งเตือนเรียกพนักงาน · ค่าบริการ · เมนูหมดอัตโนมัติ + แจ้งวัตถุดิบหมดทาง LINE/อีเมล · ไม่มีค่ารายเดือน