Skip to content

Latest commit

 

History

History
57 lines (40 loc) · 5.51 KB

grouping-api-02.md

File metadata and controls

57 lines (40 loc) · 5.51 KB

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