Webhook กับ Polling
บทความนี้จะเปรียบเทียบ webhook กับ polling วิเคราะห์ข้อดีและข้อเสียของแต่ละวิธี และอธิบายว่าเมื่อใดควรใช้วิธีใด
เมื่อเราสร้างแอปพลิเคชันบนเว็บ มักจะมีการให้บริการหลายอย่าง ในกรณีส่วนใหญ่ พวกมันประกอบด้วยการให้บริการเว็บที่แตกต่างกันหลายอย่างทำงานร่วมกัน ในแอปพลิเคชันบนเว็บประเภทนี้ที่ประกอบด้วยหลายบริการ วิธีการถ่ายโอนข้อมูลเป็นสิ่งที่นักพัฒนาทุกคนต้องพิจารณา
เมื่อพูดถึงการแก้ปัญหานี้ สองวิธีการที่กลายเป็นพื้นฐานคือ webhook และ polling แต่ละวิธีให้วิธีที่ไม่ซ้ำกันในการดึงและส่งข้อมูลจากบริการหนึ่งไปยังอีกบริการ การเลือกหนึ่งในสองนี้สามารถมีผลกระทบอย่างมากต่อประสิทธิภาพความสามารถในการทำงานเรียลไทม์ และประสบการณ์การใช้งานโดยรวมของแอปพลิเคชันคุณ บทความนี้จะเปรียบเทียบ webhook กับ polling วิเคราะห์ข้อดีและข้อเสียของแต่ละวิธี และอธิบายว่าเมื่อใดควรใช้วิธีใด
Polling คืออะไร?
Polling (มักจะเรียกว่า API polling) เป็นกระบวนการที่ลูกค้าขอข้อมูลเฉพาะที่ช่วงเวลากำหนด (เช่นทุก x วินาที) และเซิร์ฟเวอร์ตอบกลับด้วยข้อมูลที่ร้องขอ
คิดว่ามันเป็นการถามว่า “มีข้อมูลใหม่ไหม?” ที่ช่วงเวลาที่กำหนด การดึงข้อมูลแบบ polling สามารถใช้งานผ่านการส่งคำขอ HTTP ที่ลูกค้าส่งคำขอ GET ไปยังเซิร์ฟเวอร์และเซิร์ฟเวอร์ตอบกลับด้วยข้อมูลที่ร้องขอ
ลองจินตนาการว่าจอห์นสร้างผลิตภัณฑ์เอกสาร AI ชื่อว่า Doc.AI และใช้ Logto สำหรับการจัดการตัวตนของผู้ใช้
แฟรงค์เป็นผู้ใช้ที่ลงทะเบียนกับผลิตภัณฑ์ของจอห์นและสร้างบัญชีส่วนตัวของเขาเอง วันหนึ่งแฟรงค์เข้าร่วมพื้นที่ทำงานที่สร้างโดยเพื่อนของเขา เดวิด ในขณะนั้นจอห์นต้องการส่งอีเมลถึงแฟรงค์เพื่อขอให้เขาเปิดใช้งานการตรวจสอบตัวตนแบบหลายปัจจัย (MFA) เพื่อเสริมความปลอดภัยให้กับบัญชีของเขาก่อนที่จอห์นจะให้สิทธิ์เขาในการเข้าถึงทรัพยากรที่มีความละเอียดมากขึ้น
ระบบหลังบ้านของจอห์นจำเป็นต้องทำ polling ไปยัง API ที่เกี่ยวข้องเพื่อทราบว่าแฟรงค์เข้าร่วมพื้นที่ทำงานของเดวิดหรือไม่
Webhook คืออะไร?
Webhook (หรือ "HTTP callback") เป็นกลไกในการสื่อสารข้อมูลแบบเรียลไทม์ที่เซิร์ฟเวอร์จะส่งข้อมูลไปยังลูกค้าเมื่อมีเหตุการณ์เกิดขึ้น แทนที่จะเป็นการที่ลูกค้าขอข้อมูล webhook จะผลักดันข้อมูลออกไปยังลูกค้าทุกครั้งที่มีการอัปเดต
คิดว่ามันเป็นกล่องจดหมายสำหรับแอปพลิเคชันของคุณ เมื่อเกิดเหตุการณ์บางอย่าง เช่น การสมัครเป็นสมาชิกใหม่หรือมีการชำระเงิน webhook จะส่งข้อความไปยังกล่องจดหมายเพื่อให้แอปพลิเคชันของคุณรู้ว่าเกิดอะไรขึ้น
เรามาต่อกันด้วยตัวอย่าง Doc.AI ของเราที่เราใช้ในการอธิบาย polling นี่คือวิธีที่โครงร่างลำดับของเหตุการณ์จะดูเหมือนถ้าเราใช้ webhook เพื่อตรวจสอบว่าแฟรงค์เข้าร่วมพื้นที่ทำงานของเดวิดหรือไม่:
ความแตกต่างที่สำคัญ
- ต้นทางของคำขอ Polling จะเริ่มโดยลูกค้า (ในตัวอย่างของเรา Doc.AI คือคลายเอ็นต์และ Logto คือเซิร์ฟเวอร์) และ webhook จะถูกทริกเกอร์โดยเหตุการณ์และเริ่มโดยเซิร์ฟเวอร์
- การใช้ทรัพยากร Polling ใช้ทรัพยากรคอมพิวเตอร์เพราะส่งคำขอไปยังเซิร์ฟเวอร์เป็นระยะ ๆ ส่งผลให้เกิดการใช้ทรัพยากรคอมพิวเตอร์อย่างไม่มีประสิทธิภาพ แต่ในขณะที่ webhook ถูกเริ่มโดยเซิร์ฟเวอร์ "ตามต้องการ" เปรียบเทียบกับ polling แล้วทั้งลูกค้าและเซิร์ฟเวอร์จะใช้งานทรัพยากรน้อยลงมาก
- เวลา Polling ถูกเริ่มโดยลูกค้า ดังนั้นลูกค้าสามารถควบคุมเวลาที่ได้ข้อมูลได้ อย่างไรก็ตาม webhook ถูกเริ่มโดยเซิร์ฟเวอร์ และลูกค้ารับได้แค่ข้อมูลและประมวลผลข้อมูล อย่างไรก็ตาม เนื่องจากกลไกที่แตกต่างกันของท ั้งสอง webhook สามารถทำการซิงโครไนซ์ข้อมูลแบบเรียลไทม์ซึ่งไม่สามารถทำได้โดย polling
ควรเลือกอันไหนดี?
จากกลไกของ polling และ webhook การปฏิบัติทั่วไปคือเลือกร polling เมื่อข้อมูลมีการอัพเดทเป็นประจำและความต้องการเรียลไทม์ของข้อมูลไม่เข้มงวด ในกรณีอื่น ๆ webhooks จะเป็นเลือกที่ดีกว่า
อย่างไรก็ตาม เมื่อต้องเลือกใช้ webhook นักพัฒนาควรให้ความสำคัญกับข้อกังวลดังต่อไปนี้:
- หากระบบพึ่งพาข้อมูลที่ได้รับสูง ควรพิจารณาแผนสำรองเพื่อได้รับข้อมูลเมื่อ webhook ล้มเหลวและข้อมูลไม่สามารถซิงโครไนซ์ได้ รวมถึงแต่มิใช่จำกัดเฉพาะ polling หรือการกำหนดให้ webhook มีกลไกการส่งซ้ำ ฯลฯ
- ในส่วนของลูกค้าที่จะรับ webhook นั้น ควรมีการตรวจสอบ API secret และลายเซ็นเนื้อหาฯลฯ เพื่อป้องกันไม่ให้เกิดการโจมตีของแฮกเกอร์ด ้วยการทำ faking webhook
- เนื่องจาก webhook อาจส่งคำขอซ้ำได้ ต้องการจัดการที่สอดคล้องกันในเวลานี้เพื่อป้องกันการทำข้อมูลซ้ำและไม่สอดคล้องกัน
Logto ซึ่งเป็นโซลูชั่นการระบุตัวผู้ใช้ที่ได้รับความนิยมสูงเสมอนั้น มีฉาก webhook ที่หลากหลายและมีความปลอดภัยที่ยอดเยี่ยม การใช้ Logto เป็นระบบระบุตัวของผลิตภัณฑ์คุณ สามารถบูรณาการได้ง่ายและติดตั้งในหลายๆฉากแอปพลิเคชัน