9.มาจัดกลุ่ม API กัน (2/2)
💬 หลังจากที่เราได้รู้ไปละว่าเราสามารถจัดกลุ่ม API เพื่อช่วยให้คนที่เข้ามาใช้งาน API สามารถเข้าใจการทำงานของ API เราได้ง่ายขึ้น คราวนี้เราจะมาลองดูกันว่า ถ้าเราจัดกลุ่ม และนำ verb มาช่วยด้วยมันจะทำให้ API ของเราเข้าใจได้ง่ายเป็นสากลได้ยังไงกันบ้างครับ
😢 ปัญหา
ตัวอย่างของ API ที่เรามีปัจจุบัน
Verb
Path
คำอธิบาย
GET
/api/Product/GetProducts
ดึงข้อมูลสินค้าทั้งหมด
GET
/api/Product/Get/{id}
ดึงข้อมูลสินค้า 1 ชิ้น
POST
/api/Product/CreateNewProduct
สร้างสินค้าใหม่
PUT
/api/Product/ChangeProduct/{id}
เปลี่ยนแปลงข้อมูลสินค้า
DELETE
/api/Product/DeleteProduct/{id}
ลบสินค้า
สมมุติว่าเราต้องมาใช้ API ที่อยู่ในตารางด้านบน เราจะพบปัญหาว่า เราจะไม่มีทางรู้เลยว่า API นั้นๆมันมีไว้ใช้ทำอะไรนอกจากไปอ่านคำอธิบายของมัน ถึงจะเข้าใจ
😄 วิธีแก้ปัญหา
จากตัวอย่างที่ว่ามาด้านบน เราลองใช้ verb ต่างๆเข้ามาช่วยดูซิ ซึ่งหน้าที่ของ verb แต่ละตัวมีหมายความตารางด้านล่างนี้
Verb
ความหมาย
GET
ขอข้อมูล
POST
สร้างข้อมูลใหม่
PUT
อัพเดทข้อมูล
DELETE
ลบข้อมูล
ดังนั้นผมจะลองเขียน API ใหม่ โดยให้ verb เป็นตัวกำหนดพฤติกรรมของมันดู เราก็ได้จะออกมาเป็นตารางด้านล่างนี้
Verb
Path
คำอธิบาย
GET
/api/Product
ดึงข้อมูลสินค้าทั้งหมด
GET
/api/Product/{id}
ดึงข้อมูลสินค้า 1 ชิ้น
POST
/api/Product
สร้างสินค้าใหม่
PUT
/api/Product/{id}
เปลี่ยนแปลงข้อมูลสินค้า
DELETE
/api/Product/{id}
ลบสินค้า
จากตารางด้านบนเราจะเห็นว่า API ของผมเหลือแค่แบบซ้ำๆกัน แต่ว่าเราใช้ verb เป็นตัวช่วยในการแยกการทำงานออกจากกัน ดังนั้น
ถ้าผมอยากดึงข้อมูลสินค้า 1 ตัวผมก็เรียกใช้ /api/Product/{id} ถ้าผมอยากดึงรายการสินค้าทั้งหมดผมก็ใช้ /api/Product
จะเห็นว่าถ้าเราเอาคอนเซ็ปนี้ไปใช้กับ API อื่นๆบ้าง เช่นการสั่งซื้อสินค้า เราก็จะได้เป็น
Verb
Path
คำอธิบาย
GET
/api/ProductOrder
ดึงข้อมูลการสั่งซื้อสินค้าทั้งหมด
GET
/api/ProductOrder/{id}
ดึงข้อมูลการสั่งซื้อสินค้า 1 ชิ้น
POST
/api/ProductOrder
สร้างการสั่งซื้อสินค้าใหม่
ซึ่งเราจะเห็นได้ว่า แม้ว่าผมจะมี Product API และ Product Order API ที่ทำงานไม่เหมือนกันก็ตาม แต่ด้วยการใช้ verb เข้ามาช่วย มันจะทำให้การทำความเข้าใจในการติดต่อกับ API ลดลง และในที่สุดเราก็แทบจะไม่จำเป็นต้องใส่คำอธิบายลงไปใน API เลยแต่ในขณะที่คนมาใช้ API ของเราก็ยังเข้าใจว่ามันทำงานยังไงอยู่นั่นเอง เช่น
ถ้าผมอยากดึงข้อมูลการสั่งซื้อสินค้า 1 ตัวผมก็เรียกใช้ /api/ProductOrder/{id} ถ้าผมอยากดึงรายการสั่งซื้อสินค้าทั้งหมดผมก็ใช้ /api/ProductOrder
Last updated
Was this helpful?