คุณสมบัติของ API ที่เป็น Idempotent

นิจพล (อังกฤษ: idempotent หรือ idempotence) คือสมบัติอย่างหนึ่งของการดำเนินการทางคณิตศาสตร์และวิทยาการคอมพิวเตอร์ ซึ่งจะให้ผลลัพธ์เป็นค่าเดิมเสมอแม้ว่าจะกระทำการดำเนินการดังกล่าวกี่ครั้งก็ตาม

นี่ คำจำกัดความในวิกิพีเดีย ซึ่งแปลได้ค่อนข้างตรงตัว คราวนี้ลองนึกถึง RESTFul API ที่เราออกแบบกันดูครับ ว่า HTTP Method ไหนบ้าง ที่มีคุณสมบัติ Idempotent และคำว่า Idempotent ในบริบทของ RESTFul API นั้น คืออะไรกัน


Idempotent ในบริบทของ RESTFul API

หากเกิดเหตุการณ์ที่เราเรียก Multiple request แล้วได้รับผลลัพธ์เหมือนเดิมทุกครั้ง ราวกับว่าผลลัพธ์นั้นเหมือนการเรียกครั้งเดียว สิ่งนี้เรียกว่า Idempotent

ไม่ว่าจะ request ไปกี่ครั้ง ก็ไม่ทำให้ state ของ server นั้นเปลี่ยนแปลง หรือ เกิดขึ้นใหม่ ทำให้ retry กี่ครั้งก็ได้

HTTP Method ตัวไหนบ้างที่ Idempotent

[Idempotent]
- GET
- PUT
- DELETE
- HEAD
- OPTIONS
- TRACE
[Not Idempotent]
- POST

POST

ทุกครั้งที่มีการ call method post ไปยัง server ควรจะสร้าง State ใหม่เสมอ เช่น การสร้าง /customer ผลลัพธ์ควรสร้าง state customer ใหม่ และ response กลับมาด้วยค่าใหม่

GET, HEAD, OPTIONS, TRACE

ไม่ว่าจะเรียกกี่ครั้งก็ได้รับผลลัพธ์เดิมเสมอ และเป็น Safe Idenpotent ด้วย เนื่องจากไม่เปลี่ยนแปลงข้อมูล

DELETE

การเรียกครั้งแรกทำการลบข้อมูลออกจาก Server และผลลัพธ์อาจ return ในรูปแบบ (200) OK หรือ (204) No Contentครั้งที่สอง return (400) Not found แต่ทำไมยังเรียกมันว่า Idempotent หล่ะ? ก็เพราะว่า การเรียกครั้งต่อๆไป ผลลัพธ์ยังได้แบบเดิมทุกครั้งครับ

PUT

ดูเหมือนว่าการเรียกครั้งแรกนั้นจะทำการเปลี่ยนแปลง state ทั้งหมด ตาม ID ที่ระบุ แต่การเรียกครั้งถัดไปหาก Payload ยังเหมือนเดิม return value ก็ยังไม่เปลี่ยนแปลง

และทั้งหมดเป็นคุณสมบัติของ Idempotent ในโลกของ RESTFul API ครับ หากผู้อ่านมีคำแนะนำ เพิ่มเติมสามารถโพสต์ความเห็นได้เลยครับ


Teerapong Singthong 👨🏻‍💻

Written by

LINE Engineer x Software Craftsmanship

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade