API คืออะไร? อธิบายแบบคนไม่เขียนโปรแกรมรู้เรื่องได้มั้ย?

ก่อนอื่นต้องทำความเข้าใจก่อนว่าแอพต่างๆหรือหน้าเว็บที่เราเห็นกันทุกวันนี้ การทำงานทุกอย่างไม่ได้อยู่ในแอพ Facebook ที่คุณลงไว้ในมือถือ หรือหน้าเว็บ facebook.com ที่คุณเปิดขึ้นมา

ระบบมักจะแบ่งเป็นสองส่วนขึ้นไป ส่วนหนึ่งเอาไว้แสดงผลและรับคำสั่งจากคุณว่าอยากจะทำอะไร (แอพที่คุณลงไว้บนมือถือ หรือหน้าเว็บ facebook.com ที่มีช่องให้กรอกกับปุ่มให้กด) พอกดปุ่ม มันจะส่งคำสั่งไปที่ server อีกที ซึ่งเป็นส่วนที่ทำงานจริงๆ พอทำงานเสร็จก็จะคืนผลลัพธ์ให้กลับมาแสดงบนหน้าจอ

เช่น เวลาเราเปิดแอพ Facebook แล้วเราเห็นสิ่งต่างๆเกี่ยวกับเพื่อนๆขึ้นมาบนหน้าจอ มันมาได้ยังไง? มันเกิดจากแอพ Facebook บนมือถือของเรา ถามไปที่ Server ของ Facebook ว่ามีอะไรใหม่บ้าง แล้วพอ Server ได้รับคำถามก็ส่งรายการกลับมาให้ แล้วแอพบนมือถือเราก็เอาไปจัดการต่อว่าจะแสดงบนจอยังไง การ “ถาม” ของแอพบนมือถือเราไปยัง Server นั้น ในทางเขียนโปรแกรม เรียกว่าแอพมือถือเรียกใช้ API ของ server

API ย่อมาจาก Application Programming Interface ที่แปลความได้ว่า วิธีเรียกใช้โปรแกรม เราต้องเร่ิมจากการมองว่า Server ของผู้ให้บริการต่างๆเป็นโปรแกรมก่อน เช่น Server ของ Google ที่ค้นหาข้อมูลให้เราก็ถือว่าเป็นโปรแกรมใหญ่ๆตัวหนึ่ง Server ของ Facebook ก็เป็นโปรแกรมตัวหนึ่ง Server ธนาคารก็เป็นโปรแกรมตัวหนึ่ง

ถ้าระบบพวกนี้นั่งอยู่เฉยๆ ไม่รับคำสั่งอะไรเลย ก็ไม่มีประโยชน์สิ ดังนั้นโปรแกรมอะไรก็ตามที่อยากให้คนอื่นเรียกมันมาใช้งาน ก็ต้องประกาศว่าคุณใช้งานผมได้นะ โดยออกคำสั่งผมได้แบบนี้ วิธีใช้งานอันนี้แหละครับคือ API ซึ่งประกอบไปด้วย

  1. สั่งอะไรได้บ้าง มองแบบง่ายๆแต่ละคำสั่งคือ 1 API
  2. แต่ละคำสั่งต้องบอกอะไรเพิ่มบ้าง เช่น สั่งว่าขอข้อมูลหน้าโปรไฟล์เพื่อนหน่อย คุณก็ต้องบอกชื่อเพื่อน และบอกว่าคุณเป็นใครด้วย จะได้ยืนยันว่าเป็นเพื่อนกัน

บางบริษัทอาจทำ API ให้ใช้แค่สำหรับแอพของบริษัทตัวเอง แต่บางบริษัทก็เปิดให้คนนอกใช้ก็ได้ เช่น ถ้าผมทำแอพเกมแล้วอยากให้คนเล่นโพสลง Facebook ผมก็สามารถเรียก API ของ Facebook ได้เลย

API ทำอะไรได้หลายอย่าง

  • บาง API อาจเป็นคำถามที่ไม่ได้แก้อะไร แต่อยากได้รับข้อมูลกลับมา เช่น ขอดูโปรไฟล์เพื่อน
  • บาง API อาจจะเปลี่ยนแปลงบางอย่างในระบบ เช่น การโพสรูป เราก็ต้องส่งรูปจากเครื่องเราไปเก็บบน server เพื่อนๆจะได้เปิดดูได้
  • บาง API ก็ช่วยทำหลายๆอย่างให้คนใช้งานได้สะดวกขึ้น เช่น อยากได้ปุ่ม Like แทนที่จะต้องนั่งคิดว่าจะวาดปุ่ม Like บนเว็บตัวเองยังไง แล้วจะกด like ต้องเรียก API ตัวไหน ก็เอา code สำหรับปุ่ม Like ที่ Facebook แจกไปแปะบนเว็บตัวเองได้เลยไม่ต้องคิด code ที่แจกนี้ก็นับเป็น API

ลองเปลี่ยนร้านลูกชิ้นเป็น API กัน

มาขายลูกชิ้นกัน

สมมติว่าเราเป็นร้านขายส่งลูกชิ้นทางโทรศัพท์ ทั้งร้านขายอยู่สองอย่างคือ ลูกชิ้นปลา และ ลูกชิ้นกุ้ง เวลาคนโทรมาซื้อเรารับออเดอร์แค่สองแบบ คือ

  1. บอกว่า “ปลา n ลูก” เพื่อสั่งลูกชิ้นปลา + จำนวนลูกเป็นตัวเลข
  2. บอกว่า “กุ้ง n ลูก” เพื่อสั่งลูกชิ้นกุ้ง + จำนวนลูกเป็นตัวเลข

ถ้าจะสั่งทั้งลูกชิ้นปลาและลูกชิ้นกุ้ง ก็ต้องพูดสองครั้ง คือ “ปลา n ลูก” และ “กุ้ง n ลูก”

ร้านเกาเหลาชายสาม สั่งลูกชิ้นจากร้านเรา ก็ต้องโทรมาบอกทุกวันว่า “ปลา 1000 ลูก” และ “กุ้ง 1000 ลูก”

ถ้าชายสามโทรมาบอกว่า “ปลาหมึก 500 ลูก” พนักงานก็บอกว่ารับออเดอร์นี้ไม่ได้ เพราะร้านเราไม่ขายลูกชิ้นปลาหมึก

ถ้าชายสามโทรมาบอกว่า “ปลา เยอะๆหน่อย” พนักงานก็ไม่รับออเดอร์เพราะไม่รู้ว่าเยอะๆนี่มันเท่าไหร่

ถ้าชายสามโทรมาบอกว่า “ปลากุ้ง 1000 ลูก” พนักงานก็บอกว่ารับออเดอร์นี้ไม่ได้เช่นกัน เพราะร้านเราไม่รู้จักลูกชิ้นปลากุ้ง ขายแต่ลูกชิ้นปลา หรือลูกชิ้นกุ้ง

ถ้าชายสามโทรมาบอกว่า “เนื้อปลา 5 กิโล” พนักงานเราก็ไม่รับออเดอร์ ถึงแม้เราน่าจะมีเนื้อปลา แต่เราไม่ได้บอกว่าเราขาย

การที่ชายสามโทรมาสั่งลูกชิ้นนั้น เปรียบได้ว่าชายสามเรียกใช้ API ของร้านเรา ถ้าชายสามสั่งไม่ถูกตามที่เราบอกไว้ เราก็ไม่ขาย

API ขายลูกชิ้น

API คือสิ่งที่ผู้ให้บริการ ประกาศว่าจะให้บริการ และกำหนดข้อตกลงไว้ชัดเจนว่าต้องแจ้งเขาอย่างไรจึงจะได้รับบริการนั้น การเรียกใช้บริการส่วนใหญ่จะทำผ่านอินเตอร์เน็ต พูดง่ายๆก็คือเข้าเว็บ คิดซะว่า server แต่ละตัวรู้จักที่อยู่ตัวเอง และเอาหูแนบ Internet ตลอดเวลาคอยฟังว่ามีใครเรียกที่อยู่ตัวเองรึเปล่า ถ้าโดนเรียกก็จะทำงาน

ถ้าเปลี่ยนร้านลูกชิ้นเราเป็นระบบขายลูกชิ้นให้บริการผ่านทางเว็บ ก็จะมี API สองตัว คือ

  1. http://myfishball.com/api/fish?amount=n เป็น API ตัวแรกที่เอาไว้สั่งลูกชิ้นปลา โดยเปลี่ยน n เป็นจำนวนลูกชิ้นทีต้องการ เมื่อเข้าที่อยู่เว็บนี้ มันจะพยายามทำรายการและบอกว่าสั่งเรียบร้อยหรือไม่
  2. http://myfishball.com/api/shrimp?amount=n เป็น API ตัวที่สองที่เอาไว้สั่งลูกชิ้นกุ้ง โดยเปลี่ยน n เป็นจำนวนลูกชิ้นทีต้องการ เมื่อเข้าที่อยู่เว็บนี้ มันจะพยายามทำรายการและบอกว่าสั่งเรียบร้อยหรือไม่

ชายสามจะสั่งลูกชิ้นปลา 1000 ลูก และลูกชิ้นกุ้ง 1000 ลูก ก็เข้า http://myfishball.com/api/fish?amount=1000 หนึ่งครั้ง ตามด้วย http://myfishball.com/api/shrimp?amount=1000

ชายสามจะเข้า http://myfishball.com/api/octopus?amount=500 ก็ไม่ได้ เพราะ API นั้นไม่มีตัวตน

ชายสามจะเข้า http://myfishball.com/api/fish?amount=many เพื่อสั่งลูกชิ้นปลาเยอะๆ ระบบก็จะฟ้องว่าสั่งไม่ได้ เพราะเรากำหนดไว้ว่าจำนวนลูกชิ้นต้องเป็นตัวเลข

ชายสามจะเข้า http://myfishball.com/api/fishshrimp?amount=1000 ก็ไม่ได้ เพราะ API นี้ไม่มีตัวตน บอกแล้วว่าลูกชิ้นปลากับกุ้งต้องสั่งแยกกัน

ชายสามจะเข้า http://myfishball.com/api/fishmeat?amount=5kg ก็ไม่ได้ เพราะเราไม่มี API สำหรับสั่งเนื้อปลา

มันง่ายๆแค่นี้เหรอ

บางครั้งมันก็จบง่ายๆแบบนี้แหละครับ เปิดที่อยู่เว็บให้ใครก็เรียกใช้งานบริการของเราได้

แต่ก็ไม่ใช่ทุก API ที่จะให้ใครๆก็เรียกได้ตามใจชอบ ถ้าคนเรียกถี่มากๆ ระบบเราก็อาจจะรองรับไม่ไหว พัง ล่ม ต้องจำกัดจำนวนครั้งในการเรียก หรือทำให้ระบบเสถียรมากๆเพื่อรองรับ

ถ้าลูกค้าเราไม่ได้มีแค่ชายสาม เราก็ต้องรู้ว่าใครเป็นคนสั่งด้วย และอาจจะต้องเก็บเงินก่อน ถึงจะยอมให้สั่ง มีเช็คหลายขั้นตอน เริ่มจากว่ายืนยันตัวตนว่าเป็นลูกค้าเรารึเปล่า ถ้าจะสั่งต้องยืนยันการชำระเงิน ออเดอร์ถึงจะถูกผลิต ฯลฯ อาจจะต้องออกแบบ API เพิ่มเพื่อตรวจสอบสิ่งเหล่านี้

ใช้งาน API ของตัวเอง

นอกจากจะให้คนอื่นเรียกใช้งานแบบดิบๆโดยเข้าที่อยู่เว็บเหล่านี้แล้ว ซึ่งดูไม่ค่อยเป็นมิตรเท่าไหร่ เราก็สามารถทำแอพมือถือให้คนกรอกฟอร์มและกดปุ่มสั่งได้ โดยอาจจะมีถามว่าเอาลูกชิ้นปลาหรือลูกชิ้นกุ้ง ให้กดเลือก จำนวนเท่าไหร่ พิมพ์ใส่ช่องได้ พอกดปุ่มส่งออเดอร์มันก็จะไปเรียก API ข้างบนอีกที ซึ่งแอพเราก็สามารถทำหลายอัน บน iPhone, Android อะไรก็ว่าไป ซึ่งการทำแอพเหล่านี้ก็ไม่ได้กระทบชายสาม เพราะชายสามก็เรียก API ตรงๆเหมือนเดิม

เปิด API ให้คนอื่นใช้ดียังไง

มันเป็นการเพิ่มช่องทางให้คนอื่นใช้บริการของเรา และ/หรือรวมบริการของเราเข้ากับเขาได้อย่างไร้รอยต่อ เช่น ชายสอง เปิดร้านขายส่งบะหมี่ลูกชิ้นออนไลน์ ทุกครั้งที่คนสั่งบะหมี่ผ่าน API ของชายสอง server ของเขาก็เรียก API ของร้านลูกชิ้นเราเพื่อสั่งลูกชิ้นโดยอัตโนมัติ

อ่านเพิ่มเติม