PUT กับ POST - ความแตกต่างระหว่างพวกเขา
ความแตกต่างที่สำคัญระหว่าง PUT และ POST
- เมธอด PUT จะถูกเรียกเมื่อคุณต้องการแก้ไขทรัพยากรเดียว ในขณะที่เมธอด POST จะถูกเรียกเมื่อคุณต้องเพิ่มทรัพยากรลูก
- การตอบกลับด้วยวิธีการ POST สามารถแคชได้ แต่คุณไม่สามารถแคชการตอบกลับด้วยวิธีการ PUT ได้
- คุณสามารถใช้แบบสอบถาม UPDATE ใน PUT ในขณะที่คุณสามารถใช้สร้างแบบสอบถามใน POST
- ในวิธี PUT ไคลเอนต์จะตัดสินใจว่าทรัพยากร URI ใดที่ควรมี และในวิธี POST เซิร์ฟเวอร์จะตัดสินใจว่าทรัพยากร URI ใดที่ควรมี
- PUT ทำงานเฉพาะเจาะจง ในขณะที่ POST ทำงานเป็นนามธรรม
- หากคุณส่งคำขอ PUT เดียวกันหลายครั้ง ผลลัพธ์จะยังคงเหมือนเดิม แต่หากคุณส่งคำขอ POST เดียวกันหลายครั้ง คุณจะได้รับผลลัพธ์ที่แตกต่างกัน
- วิธี PUT เป็นแบบ idempotent ในขณะที่วิธี POST ไม่ใช่ idempotent

วิธี PUT คืออะไร?
วิธี PUT ใช้เพื่ออัปเดตทรัพยากรที่มีอยู่บนเซิร์ฟเวอร์ โดยทั่วไปแล้วจะแทนที่สิ่งที่มีอยู่ใน URL เป้าหมายด้วยสิ่งอื่น คุณสามารถใช้เพื่อสร้างทรัพยากรใหม่หรือเขียนทับทรัพยากรที่มีอยู่ได้ PUT ร้องขอว่าเอนทิตีที่แนบมาจะต้องถูกเก็บไว้ภายใต้ URI ที่ร้องขอที่ให้มา (Uniform Resource Identifier)
วิธีการ POST คืออะไร?
POST เป็นวิธีการที่รองรับโดย HTTP และ
แสดงให้เห็นว่าเว็บเซิร์ฟเวอร์ยอมรับข้อมูลที่รวมอยู่ในเนื้อหาของข้อความซึ่งได้รับการร้องขอ POST มักใช้โดย World Wide Web เพื่อส่งข้อมูลที่ผู้ใช้สร้างขึ้นไปยังเว็บเซิร์ฟเวอร์หรือเมื่อคุณอัปโหลดไฟล์
ความแตกต่างระหว่าง PUT และ POST ใน REST API
นี่คือข้อแตกต่างที่สำคัญระหว่างวิธี PUT และ POST:
PUT | POST |
---|---|
วิธีนี้เป็นแบบ idempotent | วิธีการนี้ไม่ใช่ idempotent |
วิธีการ PUT คือการเรียกใช้เมื่อคุณต้องแก้ไขทรัพยากรเดียว ซึ่งเป็นส่วนหนึ่งของการรวบรวมทรัพยากรอยู่แล้ว | วิธีการ POST จะถูกเรียกใช้เมื่อคุณต้องเพิ่มทรัพยากรลูกภายใต้การรวบรวมทรัพยากร |
RFC-2616 แสดงให้เห็นว่าวิธี PUT ส่งคำขอสำหรับเอนทิตีที่แนบมาซึ่งจัดเก็บไว้ใน URI คำขอที่ให้มา | วิธีการนี้ขอให้เซิร์ฟเวอร์ยอมรับเอนทิตีที่อยู่ในคำขอ |
ไวยากรณ์วิธี PUT คือ PUT /questions/{question-id} | ไวยากรณ์ของวิธีการ POST คือ POST /questions |
คุณไม่สามารถแคชการตอบสนองของวิธี PUT | คำตอบของวิธี POST สามารถแคชได้ |
PUT /vi/juice/orders/1234 ระบุว่าคุณกำลังอัปเดตทรัพยากรที่ระบุโดย "1234" | POST /vi/juice/orders ระบุว่าคุณกำลังสร้างทรัพยากรใหม่และส่งคืนตัวระบุเพื่ออธิบายทรัพยากร |
หากคุณส่งคำขอเดียวกันหลายครั้ง ผลลัพธ์จะยังคงเหมือนเดิม | หากคุณส่งคำขอ POST เดียวกันมากกว่าหนึ่งครั้ง คุณจะได้รับผลลัพธ์ที่แตกต่างกัน |
PUT ทำงานเฉพาะเจาะจง | POST ทำงานเป็นนามธรรม |
เราใช้แบบสอบถาม UPDATE ใน PUT | เราใช้สร้างแบบสอบถามใน POST |
ในวิธี PUT ลูกค้าจะตัดสินใจว่าทรัพยากร URI ใดที่ควรมี | ในวิธีการ POST เซิร์ฟเวอร์จะตัดสินใจว่าทรัพยากร URI ใดที่ควรมี |
ตัวอย่างของ PUT
นี่คือตัวอย่างเว็บเซิร์ฟเวอร์ของวิธี PUT:
HTTP ใส่ http://www.google.com/users/234
HTTP ใส่ http://www.google.com/users/234/accounts/567
ขอร้อง
PUT /new.html HTTP/1.1 Host: example.com Content-type: text/html Content-length: 20 <p>New File</p>
คำตอบ
หากทรัพยากรเป้าหมายมีการนำเสนอในปัจจุบันและได้รับการแก้ไขด้วยสถานะของการนำเสนอแบบปิด เซิร์ฟเวอร์ควรส่งการตอบกลับสองครั้ง รหัสตอบกลับแรกคือ 200 (ตกลง) และรหัสตอบกลับที่สองคือ 204 (ไม่มีเนื้อหา)
หากทรัพยากรเป้าหมายไม่มีการแสดงใดๆ เซิร์ฟเวอร์ควรแจ้งให้ผู้ใช้ทราบโดยการส่งรหัส 201 (สร้างแล้ว) ตอบกลับ
HTTP/1.1 201 Created Content-Location: /new.html
ตัวอย่างของ POST
นี่คือตัวอย่างของวิธีการ POST:
HTTP โพสต์ http://www.google.com/users
HTTP โพสต์ http://www.google.com/users/234/accounts
แบบฟอร์มที่ใช้ประเภทเนื้อหาเริ่มต้นของ application/x-www-form-urlencoded:
POST /test HTTP/1.1 Host: abc.example Content-Type: application/x-www-form-urlencoded Content-Length: 40 field1=value1&field2=value2
ทดสอบ API ด้วยคำขอ PUT
ต่อไปนี้เป็นขั้นตอนในการทดสอบ API ด้วยคำขอ PUT:

ขั้นตอน 1) อัปเดตทรัพยากรด้วยคำขอ PUT
ขั้นตอน 2) ใช้วิธี GET สำหรับทรัพยากร หากคำขอ PUT สำเร็จ คุณจะได้รับข้อมูลใหม่ วิธีนี้จะล้มเหลวหากข้อมูลที่ให้มาในคำขอไม่ถูกต้อง ดังนั้นจึงจะไม่อัพเดทอะไรเลย
ทดสอบ API ด้วยคำขอ POST
ต่อไปนี้เป็นขั้นตอนในการทดสอบ API ด้วยคำขอ POST:

ขั้นตอน 1) สร้างทรัพยากรโดยใช้คำขอ POST และตรวจสอบให้แน่ใจว่าส่งคืนรหัสสถานะ 200
ขั้นตอน 2) สร้างคำขอ GET สำหรับทรัพยากรนั้นและบันทึกข้อมูลในรูปแบบที่ถูกต้อง
ขั้นตอน 3) คุณต้องเพิ่มการทดสอบเพื่อให้แน่ใจว่าคำขอ POST ล้มเหลวด้วยข้อมูลที่ไม่ถูกต้อง
ข้อดีของวิธี PUT
นี่คือข้อดี/ประโยชน์ของการใช้วิธี PUT:
- ช่วยให้คุณจัดเก็บเอนทิตีที่ให้มาภายใต้ URI ที่ให้มา
- หากเอนทิตีที่ให้มามีอยู่แล้ว คุณสามารถดำเนินการอัปเดต หรือคุณสามารถสร้างด้วย URI นั้นได้
- คุณสามารถสร้างทรัพยากรได้บ่อยเท่าที่คุณต้องการ
- การสร้างทรัพยากรด้วยวิธี PUT นั้นง่ายมาก
- คุณไม่จำเป็นต้องตรวจสอบว่าผู้ใช้คลิกปุ่มส่งหลายครั้งหรือไม่
- สามารถระบุเอนทิตีที่แนบมาพร้อมกับคำขอได้
ข้อดีของวิธี POST
ต่อไปนี้เป็นข้อดี/ประโยชน์ของการใช้วิธี POST:
- เมธอดนี้ช่วยให้คุณกำหนด URI ของทรัพยากรได้
- การระบุส่วนหัวตำแหน่งทรัพยากรใหม่ทำได้ง่ายมากโดยใช้ส่วนหัวตำแหน่ง
- คุณสามารถส่งคำขอเพื่อยอมรับเอนทิตีเป็นผู้ใต้บังคับบัญชาใหม่ของทรัพยากร ซึ่งระบุโดย URI
- คุณสามารถส่งข้อมูลที่ผู้ใช้สร้างขึ้นไปยังเว็บเซิร์ฟเวอร์
- มันมีประโยชน์มากเมื่อคุณไม่ทราบ URL ที่จะเก็บทรัพยากรใด ๆ
- ใช้ POST เมื่อคุณต้องการเซิร์ฟเวอร์ ซึ่งควบคุมการสร้าง URL ของทรัพยากรของคุณ
- POST เป็นวิธีการที่ปลอดภัย เนื่องจากคำขอไม่อยู่ในประวัติเบราว์เซอร์
- คุณสามารถส่งข้อมูลจำนวนมากได้อย่างง่ายดายโดยใช้โพสต์
- คุณสามารถเก็บข้อมูลส่วนตัวได้
- วิธีนี้สามารถใช้ในการส่งข้อมูลไบนารี่และข้อมูล ASCII