มีโอกาสไปแบ่งปันเรื่อง API design workshop จำนวน 2 วัน
ซึ่งหลัก ๆ จะเป็น interface ของระบบต่าง ๆ
ทั้ง REST API, gRPC และ messaging (Event-based)
โดยจะเน้นในเรื่องของแนวปฏิบัติของการออกแบบที่ดี
ด้วยมุมมองของคนใช้งาน (consumer-based) มากกว่า provider-based
ประกอบไปเรื่องต่าง ๆ ดังนี้

ปัญหาหลัก ๆ ของ API ต่าง ๆ คือ ใช้งานยาก
จากผู้ใช้งานทั้งจากภายนอกและภายใน
จึงจำเป็นต้องใส่ใจในการออกแบบอย่างมาก
ถ้า User Interface มีเรื่อง UX แล้ว
ถ้าฝั่งของ Developer มีเรื่อง DX แล้ว
ในฝั่งของ API ก็ต้องมี APIX หรือไม่ ?

โดย API ที่ดีน่าจะต้องประกอบไปด้วยอะไรบ้าง ?

  • ทำให้ถูกต้องตั้งแต่แรก เนื่องจากการแก้ไขย้อนหลังเป็นสิ่งที่ทำได้ยากมาก ๆ และการเปลี่ยนแปลงบ่อย ๆ ะนำไปสู่การเลิกใช้งาน ดังนั้นถ้าระบบใด ๆ มี API product แล้ว ยิ่งต้องใส่ใจเรื่องนี้
  • เมื่อมีการเปลี่ยนแปลงแล้ว ห้ามไปกระทบ หรือ break ในสิ่งที่มัน work หรือ มีการใช้งานดีอยู่แล้ว เช่นการลบ หรือ เพิ่มสิ่งใด ๆ ข้ามา ต้องไม่กระทบ เพราะว่ามันสร้างความไม่พอใจให้กับคนใช้งานแน่ ๆ และ การทดสอบมันสำคัญมาก ๆ
  • การระบุ version เข้าไปใน API เป็นทางเลือกสุดท้ายที่จะทำเสมอ ไม่ใช่วิธีการแรก ๆ ของการเปลี่ยนแปลง เนื่องจากการให้มี API มากกว่า 1 version มันทำให้เกิดความสับสนทั้งคนใช้และคนดูแลเสมอ เคยไหมที่แก้ไข version หนึ่ง แล้วกระทบอีกหลาย version มันคือ กลับไปข้อแรกและข้อสองนั่นเอง
  • ถึงแม้ว่า API จะออกแบบดีเพียงใดก็ตาม ถ้า product มันห่วยก็ไม่มีใครใช้ หรือตรงกันข้าม ถ้า API ห่วยแต่ product มันดี คนก็พร้อมใช้งานเช่นกัน แต่ถ้าทั้งคู่มันดีละ ?
  • ในเรื่องของความปลอดภัยของ API เป็นเรื่องที่ต้องรักษาสมดุลระหว่าง ความปลอดภัยกับความสะดวกในการพัฒนา ซึ่งหนึ่งในแนวทางที่น่าสนใจคือ การใช้งาน API key แต่ต้องจัดการ key ให้ดี ๆ ดความผิดพลาดหรือช่องโหว่ต่าง ๆ ลงไปด้วย ซึ่งแน่นอนว่า มันดีกว่าการมีขั้นตอนที่ซับซ้อน เพราะว่ามันยากทั้งคนใช้งาน คนสร้าง
  • วางแผนรับมือกับปัญหาต่าง ๆ ด้วย หรือ plan for failure แน่นอนว่าจัดการทั้งหมดไม่ได้ แต่เราก็ต้องวางแผนกันไว้เพื่อแก้ไขปัญหา เมื่อเกิดเหตุการณ์เหล่านั้นขึ้นมา ทั้งเรื่องของ Rate limit, Kill switch หรือ พวก circuit breaker รวมทั้งเรื่องของ auto-scaling ต่าง ๆ อีกด้วย เนื่องจากระบบงานที่ทำงานผ่าน network มันพร้อมพังอย่างแน่นอน

ไม่พอนะครับ ใน API แต่ละตัว ควรมีเอกสารอธิบาย
ทั้ง specfication
ทั้งตัวอย่างการใช้งาน
และเอกสารมันต้อง sync กับ code ปัจจุบันด้วยเสมอ

และแนะนำให้ดูแนวทางการศึกษาเพิ่มเติมที่ API Design Roadmap