บทที่ 5 ⏱ 15 นาที

เมื่อ API ไม่ตอบ — Error Handling & Fallbacks

ถึงแอปของคุณจะทำงานดีแค่ไหน ก็ยังมีวันหนึ่งที่บริการภายนอกไม่ตอบ ช้าเกินไป หรือส่งข้อมูลกลับมาไม่สำเร็จ

นี่ไม่ใช่เรื่องแปลก และไม่ได้แปลว่าแอปคุณแย่ แต่มันคือชีวิตจริงของแอปที่ต้องพึ่งข้อมูลจากโลกภายนอก


ร้านดีไม่ได้แปลว่าของมีตลอด แต่คือบอกลูกค้าให้รู้เรื่อง

กลับมาที่ร้านอาหารอีกครั้ง

วันหนึ่งคุณสั่งเมนูเดิม แต่ครัววัตถุดิบหมด หรือระบบในร้านมีปัญหา

ร้านที่แย่จะปล่อยให้คุณนั่งงง โต๊ะว่าง จานไม่มา และไม่มีใครบอกอะไรเลย

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

นี่คือ error handling (การจัดการเมื่อเกิดข้อผิดพลาด)

จุดสำคัญของบทนี้ไม่ใช่ทำให้ปัญหาไม่เกิด แต่คือทำให้แอปไม่พังตามทุกครั้งที่บริการภายนอกมีปัญหา


แอปจริงไม่ได้วัดกันตอนทุกอย่างปกติอย่างเดียว

เวลาทุกอย่างราบรื่น แอปแทบทุกตัวดูโอเคได้ไม่ยาก

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

สำหรับแอปเช็คค่าเงินของคุณ อย่างน้อยควรมี 3 อย่างนี้

  • ข้อความแจ้งแบบเข้าใจง่ายเมื่อดึงข้อมูลไม่สำเร็จ
  • ปุ่ม retry หรือลองใหม่
  • ถ้ามีข้อมูลล่าสุดที่เคยโหลดสำเร็จแล้ว ให้ยังแสดงมันไว้พร้อมบอกว่าไม่ใช่ข้อมูลล่าสุดที่สุด

ลงมือทำ — สอนให้แอปรับมือเวลาข้อมูลไม่มา

เปิดโปรเจกต์เดิมจากบทที่แล้ว แล้วส่ง prompt นี้

เพิ่มการรับมือเมื่อบริการอัตราแลกเปลี่ยนไม่ตอบหรือโหลดไม่สำเร็จ

- ถ้าดึงข้อมูลไม่ได้ ให้แสดงข้อความที่คนทั่วไปอ่านแล้วเข้าใจทันที
- อย่าแสดงหน้าว่างหรือปล่อยให้แอปดูพัง
- เพิ่มปุ่ม "ลองใหม่อีกครั้ง"
- ถ้ามีข้อมูลล่าสุดที่เคยโหลดสำเร็จแล้ว ให้ยังแสดงข้อมูลนั้นไว้ได้ พร้อมบอกว่าอาจไม่ใช่ข้อมูลล่าสุด
- รักษา design เดิมไว้ และทำให้ข้อความ error ดูสุภาพ ชัดเจน และไม่น่าตกใจเกินไป

ไม่เปลี่ยนฟังก์ชันหรือ design ที่มีอยู่แล้ว

prompt นี้กำลังบอก AI ว่า เวลาโลกข้างนอกมีปัญหา แอปของคุณต้องมีมารยาทและมีแผนสำรอง


ทดสอบ — ทำให้แอปเจอสถานการณ์จริงแบบง่ายที่สุด

บทนี้ทดสอบต่างจากบทก่อนนิดหนึ่ง เพราะคุณไม่ได้รอให้บริการภายนอกล้มเองจริงๆ

วิธีง่ายที่สุดคือ:

  1. เปิดแอปของคุณตามปกติ
  2. ปิด Wi-Fi หรือปิดอินเทอร์เน็ตชั่วคราว
  3. รีเฟรชแอป หรือกด refresh ในแอป
  4. ดูว่าแอปแสดงข้อความแบบไหน
  5. เปิดอินเทอร์เน็ตกลับมา
  6. กด ลองใหม่อีกครั้ง

สิ่งที่คุณอยากเห็นคือ

  • แอปไม่พัง
  • ไม่มีหน้าว่างเปล่าแบบไร้คำอธิบาย
  • คนใช้รู้ว่าเกิดอะไรขึ้น
  • คนใช้มีทางกดไปต่อได้

ถ้าคุณมีข้อมูลเก่าที่แอปยังแสดงค้างไว้ได้ด้วย นั่นยิ่งดี เพราะมันช่วยให้แอปยังมีประโยชน์แม้ในวันที่ข้อมูลล่าสุดยังมาไม่ถึง

ตอนนี้แอปไม่ล้มง่ายๆ แล้ว

ถ้าคุณปิดอินเทอร์เน็ตแล้วแอปยังสื่อสารได้ดี มีปุ่มลองใหม่ และกลับมาทำงานต่อได้เมื่อเน็ตกลับมา แปลว่าแอปของคุณเริ่มมีความเป็นแอปจริงมากขึ้นอีกขั้นแล้ว


ถ้าทดสอบด้วยการปิดเน็ตไม่สะดวก

ถ้าคุณไม่สะดวกปิดอินเทอร์เน็ต อีกวิธีหนึ่งคือให้ AI ช่วยจำลองสถานการณ์ชั่วคราว เช่นเปลี่ยนไปใช้บริการที่ไม่มีอยู่จริง แล้วดูว่า error state ขึ้นหรือไม่ จากนั้นค่อย revert กลับ

แต่ถ้าเลือกวิธีนี้ ให้ใช้แค่ชั่วคราวเพื่อทดสอบ แล้วกลับมาที่เวอร์ชันเดิมทันที

วิธีปิด Wi-Fi ยังง่ายและตรงที่สุดสำหรับคนส่วนใหญ่

⚠️ อย่าปล่อยข้อความ error แบบเทคนิคเกินไป

ข้อความอย่าง “failed to fetch” หรือข้อความยาวๆ แบบระบบภายใน อาจทำให้คนใช้ยิ่งงง ข้อความที่ดีควรเป็นภาษาคน เช่น “ตอนนี้ยังดึงข้อมูลอัตราแลกเปลี่ยนไม่ได้ กรุณาลองใหม่อีกครั้ง”


สำหรับแอปของคุณเอง

แอปที่ดึงข้อมูลจาก API ทุกตัวต้องเจอวันแบบนี้

  • แอปอากาศ: วันนั้นข้อมูลอากาศไม่มา
  • แอปค้นหา: ค้นหาแล้วบริการช้า
  • แอปวันหยุด: เลือกปีแล้วข้อมูลไม่ขึ้น
  • แอปเกม: รูปหรือข้อมูลตัวละครโหลดไม่สำเร็จ

คำถามสำคัญคือ:

ถ้าวันนี้ข้อมูลไม่มา แอปของคุณยังทำให้คนใช้รู้ว่าจะเกิดอะไรต่อ และควรทำอะไรต่อไหม

💡 Error ที่ดีไม่ทำให้คนรู้สึกว่าตัวเองทำผิด

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


ตลอด 6 คอร์สที่ผ่านมา คุณต่อแอปของตัวเองออกไปไกลมากแล้ว

ลองถอยมาดูภาพใหญ่สั้นๆ

  • คอร์ส 1: คุณสร้างแอปได้
  • คอร์ส 2: คุณคิดโจทย์และพัฒนาแอปของตัวเองได้
  • คอร์ส 3: คุณทำให้แอปดูดีและใช้งานง่ายขึ้นได้
  • คอร์ส 4: คุณทำให้แอปจำข้อมูลจริงได้
  • คอร์ส 5: คุณแยกผู้ใช้และทำให้ข้อมูลเป็นของแต่ละคนได้
  • คอร์ส 6: คุณทำให้แอปคุยกับโลกภายนอกได้

นี่คืออีกระดับหนึ่งของความรู้สึกว่า “แอปจริง” เพราะแอปที่คุณใช้ทุกวัน ไม่ว่าจะเป็นแอปดูหนัง แอปสั่งอาหาร แอปแผนที่ หรือแอปเช็กราคา ล้วนใช้วิธีเดียวกันนี้ทั้งนั้น

มันถามบริการอื่น รับข้อมูลกลับมา แสดงผลให้คนใช้ และรับมือเมื่อข้อมูลไม่มาตามแผน

ตอนนี้คุณไม่ได้แค่ใช้แอปพวกนั้นแล้ว คุณเริ่มเข้าใจด้วยว่ามันทำงานยังไง และคุณสามารถบอก AI ให้สร้างสิ่งแบบนั้นให้คุณได้

แอปของคุณเชื่อมต่อกับโลกภายนอกได้แล้ว

ข้อมูลจำนวนมหาศาลบนอินเทอร์เน็ตไม่ใช่ของไกลตัวอีกต่อไป ตอนนี้คุณรู้แล้วว่าจะบอก AI ยังไงให้เอาข้อมูลเหล่านั้นมาใช้ในแอปของคุณอย่างมีความหมาย


คุณเพิ่งทำอะไรสำเร็จไปแล้วบ้าง

  • คุณทำให้แอปรับมือกับวันที่ API ไม่ตอบได้อย่างสุภาพและชัดเจน
  • คุณเพิ่มข้อความ error, ปุ่มลองใหม่ และทางสำรองสำหรับวันที่ข้อมูลไม่มา
  • คุณรู้แล้วว่าแอปจริงไม่ได้วัดกันแค่วันที่ทุกอย่างราบรื่น แต่รวมถึงวันที่มีปัญหาด้วย
  • คุณเดินมาครบ 6 คอร์สแล้ว จากการสร้างแอปแรก ไปสู่การสร้างแอปที่เชื่อมต่อโลกภายนอกได้จริง

จากตรงนี้ไป คุณไม่ได้ติดอยู่แค่แอปที่ทำงานอยู่ในโลกปิดอีกแล้ว

คุณมีเครื่องมือครบพอจะสร้างของที่จำข้อมูลได้ มีผู้ใช้จริง มีหน้าตาที่ดี และดึงข้อมูลจากข้างนอกมาใช้ได้

นั่นคือจุดที่โปรเจกต์ของคุณเริ่มขยับจาก “ของที่ลองทำ” ไปสู่ “ของที่มีชีวิตจริงบนโลกอินเทอร์เน็ต”

🎉
ยินดีด้วย! คุณทำสำเร็จแล้ว

แอปของคุณรับมือกับวันที่ข้อมูลไม่มาได้แล้ว — ไม่พัง ไม่ปล่อยหน้าว่าง และบอกคนใช้อย่างตรงไปตรงมา 🎉