REST ใช้ HTTP method มาตรฐานเป็นคำกริยาที่กระทำต่อทรัพยากร การแมปที่พบบ่อยเข้ากับ CRUD (Create, Read, Update, Delete) คือ:
REST ใช้ HTTP method มาตรฐานเป็นคำกริยาที่กระทำต่อทรัพยากร การแมปที่พบบ่อยเข้ากับ CRUD (Create, Read, Update, Delete) คือ:
| CRUD | Method | การใช้งานทั่วไป |
|---|
| Create | POST | เพิ่มทรัพยากรใหม่เข้าใน collection |
| Read | GET | ดึงทรัพยากรหนึ่งชิ้นหรือรายการ |
| Update (เต็ม) | PUT | แทนที่ทรัพยากรทั้งหมด |
| Update (บางส่วน) | PATCH | แก้ไขบางฟิลด์ |
| Delete | DELETE | ลบทรัพยากร |
POST /users HTTP/1.1
Content-Type: application/json
{ "name": "Ann", "email": "[email protected]" }
HTTP/1.1 201 Created
Location: /users/42
{ "id": 42, "name": "Ann", "email": "[email protected]" }
PUT /users/42 ส่ง representation ทั้งหมด ไปและแทนที่มัน ส่วน PATCH /users/42 ส่ง เฉพาะฟิลด์ที่จะเปลี่ยน (เช่น { "email": "[email protected]" })
นี่คือสองคุณสมบัติที่ต่างกัน:
GET, HEAD, OPTIONS เป็น safeGET, PUT, DELETE, HEAD เป็น idempotentMethod Safe? Idempotent?
GET yes yes
HEAD yes yes
PUT no yes (replacing with the same body twice = same result)
DELETE no yes (deleting twice = still deleted)
PATCH no no* (depends on the patch; not guaranteed)
POST no no (posting twice usually creates two resources)
ผู้สัมภาษณ์ถามข้อนี้เพื่อดูว่าคุณเข้าใจความหมาย (semantics) ของ HTTP ลึกพอที่จะสร้าง API ที่เชื่อถือได้หรือไม่ การแยก safe/idempotent ไม่ใช่เรื่องวิชาการ: มันกำกับโดยตรงว่า client, proxy, และ CDN ได้รับอนุญาตให้ทำอะไร method safe สามารถ cache และ prefetch ได้อย่างอิสระ ส่วน method idempotent สามารถ retry อัตโนมัติ ได้หลัง network timeout โดยไม่เสี่ยงต่อการทำ side effect ซ้ำ — จึงเป็นเหตุว่าทำไม client จึง retry PUT หรือ DELETE ได้อย่างปลอดภัย แต่ต้องระวังเมื่อ retry POST (อาจสร้าง order สองรายการ) ความผิดพลาดคลาสสิกคือการใช้ GET เพื่อกระตุ้น side effect (เช่น GET /users/42/delete) ซึ่งทำลาย caching และทำให้ crawler แก้ไขข้อมูลโดยไม่ตั้งใจ การเลือก method ที่ถูกต้อง — และเคารพสัญญา safe/idempotent ของมัน — คือสิ่งที่ทำให้ API คาดเดาได้และปลอดภัยพอที่จะสร้างเครื่องมือรอบ ๆ มัน
คลังคำถามสัมภาษณ์งาน IT พร้อมคำตอบโดยละเอียด — ตั้งแต่ระดับ Junior ถึง Senior
บริจาค