CodeQuiz EP.33 - API คืออะไร? ทำไมโปรแกรมต้องคุยกับโปรแกรม
ทีมงาน Leagues of Code TH
เผยแพร่เมื่อ
อัปเดตล่าสุดเมื่อ

สาระสำคัญ
API คือช่องทางมาตรฐานให้โปรแกรม 2 ตัวคุยกันได้ ฝั่ง client ขอ ฝั่ง server ตอบ เปรียบได้กับพนักงานเสิร์ฟที่วิ่งระหว่างโต๊ะลูกค้ากับครัว ทำให้แอปบนมือถือดึงข้อมูลที่อยู่บน server มาแสดงได้โดยไม่ต้องเข้าไปยุ่งกับฐานข้อมูลตรง ๆ มี token กับ status code คอยควบคุมความปลอดภัยและความเรียบร้อย
เคยเปิดแอป Grab สั่งข้าว หรือกดเช็กยอดในแอปธนาคาร แล้วสงสัยป่ะว่าข้อมูลพวกนั้นมาจากไหน เพราะมันก็ไม่ได้เก็บไว้ในเครื่องเรา ยังไงก็ต้องถามที่ไหนสักที่นึงก่อน
ตัวกลางที่คอยรับ-ส่งข้อมูลให้เนี่ยแหละมันเรียกว่า API ใช่ ๆ คำที่ developer ทุกคนพูดกันจนเป็นปกติ แต่พอจะอธิบายให้คนใกล้ตัวฟัง อึ้งเลยใช่ป่ะ วันนี้พี่จะเล่าให้ฟังแบบที่ไม่ต้องท่องนิยาม
Tldr: API คือช่องทางที่โปรแกรม 2 ตัวคุยกันได้ ฝั่งนึงขอ ฝั่งนึงตอบ ทำให้แอปบนมือถือเราเห็นข้อมูลที่จริง ๆ แล้วเก็บอยู่บน server (เครื่องคอมที่ทำหน้าที่ให้บริการข้อมูลแบบเปิด 24 ชั่วโมง) ที่อื่นได้
เปิดด้วยภาพในหัว: พนักงานเสิร์ฟในร้านอาหาร


ลองนึกภาพเวลาเข้าร้านอาหาร เราไม่ได้เดินเข้าครัวเองใช่ป่ะ เพราะครัวมันรกและเรามองไม่ออกว่าวัตถุดิบอยู่ไหน เราแค่นั่งโต๊ะ เรียกพนักงานเสิร์ฟมาสั่ง พนักงานวิ่งไปบอกครัว พอครัวทำเสร็จก็ยกมาเสิร์ฟกลับให้
API ก็เหมือนพนักงานเสิร์ฟคนนั้นเลย เราคือลูกค้า (เรียกว่า client หรือฝั่งที่ขอใช้บริการ) ครัวคือ server เมนูอาหารคือรายการ endpoint (ที่อยู่ของบริการแต่ละอัน เช่น /menu หรือ /orders) การสั่งอาหารคือ request (คำขอที่ client ส่งไปหา server) ส่วนจานอาหารที่กลับมาคือ response (คำตอบจาก server) เห็นภาพละเนาะ
🍜 client เรียกเมนู, API วิ่งไปบอก server, server ทำเสร็จส่งกลับ, client เอาไปแสดงผล
แล้วทำไมต้องมีตัวกลาง


ทำไมเราถึงไม่ให้แอปเข้าไปดูในฐานข้อมูลของธนาคารตรง ๆ คำตอบมี 2 ข้อหลัก คือ ความปลอดภัย กับ ความเป็นระเบียบ
ถ้าเปิดให้ทุกแอปเข้าครัวได้เลย คนทำอาหารชนกันเละ ลูกค้าหยิบของผิด แล้วปลอดภัยตรงไหนอะ API จะกำหนดเมนูที่ขอได้ บังคับให้สั่งด้วยรูปแบบที่ตกลงไว้ แล้วตรวจตั๋วก่อนเสิร์ฟ ตั๋วในที่นี้เรียกว่า token (รหัสยืนยันตัวตนที่แนบมากับคำขอ) ถ้าตั๋วผิดก็ไม่เสิร์ฟ
อีกข้อคือ API ทำให้เปลี่ยนครัวข้างหลังได้โดยลูกค้าไม่ต้องรู้ พ่อครัวอาจเปลี่ยนเป็นหุ่นยนต์ก็ได้ ตราบใดที่เมนูยังเหมือนเดิม แอปเราก็ยังทำงานได้ปกติ เด็ดอะ
หน้าตา request กับ response เป็นยังไง


ส่วนใหญ่เราจะส่งผ่าน HTTP (โปรโตคอลที่เว็บใช้คุยกัน) แล้วข้อมูลที่ตอบกลับมักอยู่ในรูปแบบ JSON (ข้อความที่จัดเรียงเป็น key-value ทั้งคนและคอมอ่านง่าย) ลองดูตัวอย่างคำขอเช็กข้อมูลคอร์สหมายเลข 42
12GET https://api.locth.com/courses/42Authorization: Bearer abc123
server ก็จะตอบกลับมาประมาณนี้
12345{"id": 42,"title": "Bootcamp รุ่น 1","seats_left": 3}
แค่นี้แอปก็เอาไปวาดหน้าจอได้แล้ว ไม่ต้องสนใจว่าข้างหลังใช้ฐานข้อมูลอะไร เก่งฉิบเป๋ง
เกร็ดที่หลายคนไม่เคยรู้


- API ไม่ได้มีแค่บนเว็บ ในเครื่องเราก็มี API ให้โปรแกรมคุยกับ OS เช่น API ขอเปิดกล้อง ขอตำแหน่ง GPS
- เวลา server ตอบไม่ได้ มันจะส่งเลขสถานะ (
status code) มาบอก เช่น 200 คือ ok, 404 คือ ไม่เจอเมนูที่ขอ, 500 คือ ครัวพัง ใครเขียนแอปเจอ 500 ทีก็เซ็งใช่ป่ะ - API บางตัวจำกัดจำนวนครั้งที่ขอได้ต่อนาที เรียกว่า
rate limit(กำหนดอัตราการขอสูงสุด) เพื่อกัน server ล่ม
สรุปแบบไม่ต้องจำ
- API คือพนักงานเสิร์ฟระหว่างโปรแกรมต่อโปรแกรม
- client ขอ server ตอบ ผ่าน endpoint ที่กำหนดไว้ล่วงหน้า
- ข้อมูลส่วนใหญ่ส่งผ่าน HTTP รูปแบบ JSON
- มี token กับ status code เป็นตัวควบคุมการเข้าถึงและสื่อสาร
- จำได้แค่ภาพพนักงานเสิร์ฟ ก็เริ่ดแล้วเนาะ
ถ้าใครยังงงป่าว ลองมองทุกแอปเป็นร้านอาหาร แล้วนับดูว่าวันนึงเราเรียกพนักงานเสิร์ฟกี่รอบ ตัวเลขปังเกินคาดแน่นอน