บทความ / หัวข้อ GAS

ใช้ 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 ร้านขายยา
แนะนำ
ดูรายละเอียด
POS ร้านค้าปลีก-ส่ง v1.0.0

POS ร้านขายยา

จ่ายยาถูกคน ถูกล็อต ไม่มียาหมดอายุค้างชั้น · ชื่อสามัญ ประเภทยา เภสัชกรยืนยัน เตือนแพ้ยา ล็อต FEFO ฉลากยา บัญชีขายยาอันตราย · บน Google Sheets ของร้านเอง ไม่มีค่ารายเดือน

฿2,490.00
0
POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)
แนะนำ
ดูรายละเอียด
POS ร้านอาหาร & เครื่องดื่ม v2.0.0

POS ร้านอาหาร (โต๊ะ ครัว QR สั่งอาหาร)

ผังโต๊ะสด · ลูกค้าสแกน QR สั่งอาหารที่โต๊ะ · จอครัว · แจ้งเตือนเรียกพนักงาน · ค่าบริการ · เมนูหมดอัตโนมัติ + แจ้งวัตถุดิบหมดทาง LINE/อีเมล · ไม่มีค่ารายเดือน

฿2,990.00
0