💬 หลังจากที่เราได้รู้ไปละว่าเราสามารถจัดกลุ่ม API เพื่อช่วยให้คนที่เข้ามาใช้งาน API สามารถเข้าใจการทำงานของ API เราได้ง่ายขึ้น คราวนี้เราจะมาลองดูกันว่า ถ้าเราจัดกลุ่ม และนำ verb มาช่วยด้วยมันจะทำให้ 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