9.มาจัดกลุ่ม API กัน (2/2)
Last updated
Last updated
💬 หลังจากที่เราได้รู้ไปละว่าเราสามารถจัดกลุ่ม API เพื่อช่วยให้คนที่เข้ามาใช้งาน API สามารถเข้าใจการทำงานของ API เราได้ง่ายขึ้น คราวนี้เราจะมาลองดูกันว่า ถ้าเราจัดกลุ่ม และนำ verb มาช่วยด้วยมันจะทำให้ API ของเราเข้าใจได้ง่ายเป็นสากลได้ยังไงกันบ้างครับ
สมมุติว่าเราต้องมาใช้ API ที่อยู่ในตารางด้านบน เราจะพบปัญหาว่า เราจะไม่มีทางรู้เลยว่า API นั้นๆมันมีไว้ใช้ทำอะไรนอกจากไปอ่านคำอธิบายของมัน ถึงจะเข้าใจ
จากตัวอย่างที่ว่ามาด้านบน เราลองใช้ verb ต่างๆเข้ามาช่วยดูซิ ซึ่งหน้าที่ของ verb แต่ละตัวมีหมายความตารางด้านล่างนี้
ดังนั้นผมจะลองเขียน API ใหม่ โดยให้ verb เป็นตัวกำหนดพฤติกรรมของมันดู เราก็ได้จะออกมาเป็นตารางด้านล่างนี้
จากตารางด้านบนเราจะเห็นว่า API ของผมเหลือแค่แบบซ้ำๆกัน แต่ว่าเราใช้ verb เป็นตัวช่วยในการแยกการทำงานออกจากกัน ดังนั้น
ถ้าผมอยากดึงข้อมูลสินค้า 1 ตัวผมก็เรียกใช้ /api/Product/{id} ถ้าผมอยากดึงรายการสินค้าทั้งหมดผมก็ใช้ /api/Product
จะเห็นว่าถ้าเราเอาคอนเซ็ปนี้ไปใช้กับ API อื่นๆบ้าง เช่นการสั่งซื้อสินค้า เราก็จะได้เป็น
ซึ่งเราจะเห็นได้ว่า แม้ว่าผมจะมี Product API และ Product Order API ที่ทำงานไม่เหมือนกันก็ตาม แต่ด้วยการใช้ verb เข้ามาช่วย มันจะทำให้การทำความเข้าใจในการติดต่อกับ API ลดลง และในที่สุดเราก็แทบจะไม่จำเป็นต้องใส่คำอธิบายลงไปใน API เลยแต่ในขณะที่คนมาใช้ API ของเราก็ยังเข้าใจว่ามันทำงานยังไงอยู่นั่นเอง เช่น
ถ้าผมอยากดึงข้อมูลการสั่งซื้อสินค้า 1 ตัวผมก็เรียกใช้ /api/ProductOrder/{id} ถ้าผมอยากดึงรายการสั่งซื้อสินค้าทั้งหมดผมก็ใช้ /api/ProductOrder
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}
ลบสินค้า
Verb
ความหมาย
GET
ขอข้อมูล
POST
สร้างข้อมูลใหม่
PUT
อัพเดทข้อมูล
DELETE
ลบข้อมูล
Verb
Path
คำอธิบาย
GET
/api/Product
ดึงข้อมูลสินค้าทั้งหมด
GET
/api/Product/{id}
ดึงข้อมูลสินค้า 1 ชิ้น
POST
/api/Product
สร้างสินค้าใหม่
PUT
/api/Product/{id}
เปลี่ยนแปลงข้อมูลสินค้า
DELETE
/api/Product/{id}
ลบสินค้า
Verb
Path
คำอธิบาย
GET
/api/ProductOrder
ดึงข้อมูลการสั่งซื้อสินค้าทั้งหมด
GET
/api/ProductOrder/{id}
ดึงข้อมูลการสั่งซื้อสินค้า 1 ชิ้น
POST
/api/ProductOrder
สร้างการสั่งซื้อสินค้าใหม่