ข้ามไปยังเนื้อหา

Methods, CRUD และ Idempotency

REST API ส่วนใหญ่คือการ create, read, update และ delete บน resource ต่าง ๆ ความยากอยู่ที่การจับคู่การกระทำเหล่านั้นเข้ากับ HTTP method ให้ถูก เพื่อให้ทั้ง client, proxy และ logic การ retry ของคุณเองทำงานได้อย่างถูกต้อง

flowchart LR
  Create -->|POST /articles| C[201 Created]
  Read -->|GET /articles or /articles/42| R[200 OK]
  Update -->|PUT or PATCH /articles/42| U[200 OK]
  Delete -->|DELETE /articles/42| D[204 No Content]
การจับคู่แบบมาตรฐานจาก CRUD สู่ HTTP methods

การจับคู่นี้ไม่ได้เกิดขึ้นแบบสุ่ม แต่ละ method มาพร้อมการรับประกันเรื่อง safety (เปลี่ยนแปลงข้อมูลหรือไม่?) และ idempotency (ทำซ้ำแล้วผลเหมือนทำครั้งเดียวหรือไม่?) การรับประกันเหล่านี้แหละที่ทำให้ client retry request ที่หายไปได้อย่างปลอดภัย และทำให้ proxy cache response ได้

  • GET & POST — การอ่านอย่างปลอดภัยและการสร้าง resource
  • PUT, PATCH & DELETE — การแทนที่ การอัปเดตบางส่วน และการลบ
  • Idempotency & safety — คุณสมบัติที่ทำให้การ retry ปลอดภัย
  • Bulk & async — การทำงานแบบ batch และงานที่ใช้เวลานาน
HTTP method ใดที่ตามธรรมเนียมใช้สร้าง resource ใหม่ใน collection?
DELETE ที่สำเร็จและไม่ส่ง body กลับมา โดยทั่วไปใช้ status ใด?