HTTP Method คืออยากทำอะไรกับ resource
5 method หลัก GET/POST/PUT/PATCH/DELETE + CRUD + safe + idempotent ลองกดแต่ละ method ดู effect
บทก่อนเราเห็นบรรทัดแรกของ request มีคำว่า GET นั่นคือ HTTP Methodคำแรกของ request ที่บอก server ว่า “อยากทำอะไรกับ resource”
HTTP มี method อยู่หลายตัว แต่ที่ใช้จริงในชีวิตประจำวันมี 5 ตัวหลักGET, POST, PUT, PATCH, DELETEเราจะเจาะทีละตัวว่าแต่ละตัวใช้เมื่อไหร่ และเรียนคำสำคัญที่ชื่อ idempotentที่ทำให้เข้าใจความต่างระหว่าง method ได้ชัดขึ้น
Mental model: verb ในประโยค
ถ้า URL เป็นคำนาม (ชี้ไปที่ของ) method เป็นคำกริยา (ทำอะไรกับของนั้น)
GET /orders/123= “ดู order หมายเลข 123”POST /orders= “สร้าง order ใหม่ในรายการ orders”PUT /orders/123= “แทนที่ order 123 ทั้งก้อน”PATCH /orders/123= “แก้บางส่วน ของ order 123”DELETE /orders/123= “ลบ order 123 ออก”
5 Method หลักที่ใช้บ่อย
GET ขออ่านข้อมูล
- ใช้เมื่ออยาก ดูข้อมูล โดยไม่เปลี่ยนแปลงอะไรบน server
- ไม่มี body ข้อมูลเสริมจะส่งผ่าน query string แทน
- ตัวอย่าง: เปิดหน้าเว็บ ดูเมนู ค้นหา โหลดรูป
- safe (ไม่เปลี่ยนอะไรบน server) และ idempotent (ทำซ้ำได้ผลเหมือนเดิม)
- cache ได้ browser และ proxy ระหว่างทางเก็บ response ไว้ได้ โหลดครั้งที่ 2 เร็วขึ้น
POST สร้างของใหม่ หรือทำ action
- ใช้เมื่ออยาก สร้าง resource ใหม่ หรือทำ action ที่มีผลต่อ server
- ข้อมูลส่งผ่าน body
- ตัวอย่าง: สั่งกาแฟ (สร้าง order ใหม่), login, submit form, upload รูป
- ไม่ safe (เปลี่ยน state บน server) และ ไม่ idempotentส่งซ้ำ 3 ครั้งจะได้ 3 order
- cache ไม่ได้ browser จะถาม “ยืนยัน resubmit ไหม” ถ้ากด refresh
PUT แทนที่ของเดิมทั้งก้อน
- ใช้เมื่ออยาก แก้ของเดิม โดยส่งข้อมูลใหม่ไปทับทั้งชิ้น
- ตัวอย่าง: แก้ profile โดยส่ง
{name, email, phone}ไปแทนของเดิมทั้งหมด ถ้าไม่ส่ง phone ไปด้วย server จะถือว่า phone หายไปเลย - ไม่ safe (เปลี่ยน state) แต่ idempotentส่ง 3 ครั้งด้วยข้อมูลเดียวกัน state ปลายทางเหมือนส่งครั้งเดียว
PATCH แก้เฉพาะบางส่วน
- ใช้เมื่ออยาก แก้แค่บางฟิลด์ ไม่ต้องส่งของเดิมไปทั้งก้อน
- ตัวอย่าง: อยากเปลี่ยนแค่ size ของ order 123 จาก M เป็น L ส่ง
{size: "L"}ไป ส่วนอื่นๆ ของ order คงเดิม - ไม่ safe ส่วนใหญ่ idempotent แต่ขึ้นกับวิธีที่ server ออกแบบ (ถ้า PATCH สั่งให้ “บวกจำนวน 1” จะไม่ idempotent)
DELETE ลบออก
- ใช้เมื่ออยาก ลบ resource
- ตัวอย่าง: ยกเลิก order, ลบ comment, ลบรูป
- ไม่ safe แต่ idempotent ลบของเดียวกัน 3 ครั้ง state ปลายทางคือ “ไม่มีของนั้น” เหมือนลบครั้งเดียว (แม้ว่าครั้งที่ 2-3 server อาจตอบ 404 ก็ตาม)
Safe vs Idempotent ต่างกันยังไง
สองคำนี้มักสับสน จำให้ชัด
- Safe = ไม่เปลี่ยนอะไร บน server เลย ทำหรือไม่ทำ state ของ server เหมือนเดิมไม่ขยับ
- Idempotent = ทำซ้ำกี่ครั้งก็ได้ผลเหมือนทำครั้งเดียวอาจเปลี่ยน state ก็ได้ แต่การทำซ้ำไม่ทำให้ state ไปต่อ
| Method | Safe | Idempotent | มี body | Cache ได้ |
|---|---|---|---|---|
GETอ่านข้อมูล | ||||
POSTสร้างของใหม่ | ||||
PUTแทนที่ทั้งก้อน | ||||
PATCHแก้บางส่วน | ||||
DELETEลบ |
ลอง method จริง ดู effect ต่อ state
สมมติแอพกาแฟมี order อยู่ 1 รายการ ลองกด method ต่างๆ ดูว่า state เปลี่ยนยังไง
- #1Americano (M)
CRUD: 4 action พื้นฐานของทุกระบบ
ในโลก software มีคำว่า CRUD ที่เป็น 4 action หลักกับข้อมูล method ของ HTTP สอดคล้องกับ CRUD พอดี
- Create (สร้าง) →
POST - Read (อ่าน) →
GET - Update (แก้) →
PUTหรือPATCH - Delete (ลบ) →
DELETE
แอพกาแฟของเราใช้ทั้ง 4 action เช่นกัน: Read เมนู (GET), Create order (POST), Update order (PATCH), Delete order (DELETE)
คำศัพท์จากบทนี้
- Method verb ของ request บอก server ว่าจะทำอะไรกับ resource
- Safe method ที่ไม่เปลี่ยน state บน server (GET, HEAD)
- Idempotent ทำซ้ำได้ผลเหมือนทำครั้งเดียว (GET, PUT, DELETE)
- CRUD Create, Read, Update, Delete 4 action พื้นฐานกับข้อมูล
- Cache ได้ response เก็บไว้ reuse รอบถัดไปได้
สรุป
- HTTP method = verb ของ request บอกว่าจะทำอะไรกับ resource
- 5 method หลัก:
GET,POST,PUT,PATCH,DELETE - GET = อ่าน, POST = สร้าง, PUT/PATCH = แก้, DELETE = ลบ
- Safe = ไม่เปลี่ยน state Idempotent = ทำซ้ำผลเหมือนเดิม
- POST ไม่ idempotent ที่เหลือ idempotent
- สอดคล้องกับ CRUD ในโลก software
ตอนนี้รู้แล้วว่า request บอกได้ว่าจะ “ทำอะไร” พอ server ประมวลผลเสร็จมันจะตอบกลับ response ต้องบอก client ให้ได้ว่าผลเป็นยังไง สำเร็จ? ไม่เจอ? โดนปฏิเสธ? พัง? บทถัดไปเราจะเจาะ status code เลข 3 หลักที่ใส่ในบรรทัดแรกของ response ที่บอก client ทุกอย่างที่ต้องรู้