แม้ตามทฤษฎี RESTful จะบอกว่าการดึงข้อมูลควรใช้ GET แต่ในทางปฏิบัติเมื่อ Filter มีความซับซ้อน เรานิยมขยับมาใช้ POST เพื่อส่งเงื่อนไขผ่าน Request Body แทน
ตัวอย่างการประยุกต์ใช้กับ Library ยอดนิยม
DataTables
DataTables มีความยืดหยุ่นสูง เพียงแค่เปลี่ยน type ในส่วนของ ajax ข้อมูลพารามิเตอร์ทั้งหมดจะถูกย้ายจาก URL ไปอยู่ใน Payload ของ POST ทันที
JavaScript
$ ('#exampleTable') .DataTable ({
serverSide: true,
ajax: {
url: '/api/resource/search',
type: 'POST', // เปลี่ยนจาก GET เป็น POST
data: function (d) {
// d คือ Object ขนาดใหญ่ที่ DataTables สร้างให้โดยอัตโนมัติ
return JSON.stringify (d) ;
},
contentType: "application/json; charset=utf-8",
}
}) ;
Tabulator
Tabulator ออกแบบมาให้รองรับ JSON เป็นหลัก การเปลี่ยนมาใช้ POST จึงทำได้สะอาดตามาก
JavaScript
var table = new Tabulator ("#example-table", {
ajaxURL: "/api/resource/search",
ajaxConfig: "POST", // ใช้ POST เพื่อส่ง Body
ajaxContentType: "json", // ส่งข้อมูลในรูปแบบ JSON
pagination: "remote", // ให้ Server จัดการแบ่งหน้า
filterMode: "remote", // ให้ Server จัดการ Filter
}) ;
📝 ตารางเปรียบเทียบ: GET vs POST สำหรับ Filtering
คุณสมบัติ
GET
POST
ขีดจำกัดข้อมูล
จำกัดตามความยาว URL
ไม่จำกัด
ความปลอดภัย
ข้อมูลโชว์บน URL / History
ข้อมูลซ่อนอยู่ใน Request Body
ความเหมาะสม
ค้นหาทั่วไป
ค้นหาขั้นสูง / รายงาน
Caching
ทำได้ง่ายผ่าน Browser / CDN
ทำได้ยากกว่า
นี่คือบทความสรุปเนื้อหาเกี่ยวกับ RESTful Method GET และแนวทางการปรับเปลี่ยนมาใช้ POST เมื่อต้องรับมือกับข้อมูล Filter จำนวนมหาศาลครับ
🔄 ทางออก: การใช้ POST แทน GET (The Pragmatic Approach)
แม้ตามทฤษฎี RESTful จะบอกว่าการดึงข้อมูลควรใช้ GET แต่ในทางปฏิบัติเมื่อ Filter มีความซับซ้อน (Complex Search) เรานิยมขยับมาใช้ POST เพื่อส่งเงื่อนไขผ่าน Request Body แทน
ตัวอย่างการประยุกต์ใช้กับ Library ยอดนิยม
1. DataTables (jQuery)
DataTables มีความยืดหยุ่นสูง เพียงแค่เปลี่ยน type ในส่วนของ ajax ข้อมูลพารามิเตอร์ทั้งหมดจะถูกย้ายจาก URL ไปอยู่ใน Payload ของ POST ทันที
JavaScript
JavaScript
$ ('#exampleTable') .DataTable ({
serverSide: true,
ajax: {
url: '/api/resource/search',
type: 'POST', // เปลี่ยนจาก GET เป็น POST
data: function (d) {
// d คือ Object ขนาดใหญ่ที่ DataTables สร้างให้โดยอัตโนมัติ
return JSON.stringify (d) ;
},
contentType: "application/json; charset=utf-8",
}
}) ;
2. Tabulator
Tabulator ออกแบบมาให้รองรับ JSON เป็นหลัก การเปลี่ยนมาใช้ POST จึงทำได้สะอาดตามาก
JavaScript
JavaScript
var table = new Tabulator ("#example-table", {
ajaxURL: "/api/resource/search",
ajaxConfig: "POST", // ใช้ POST เพื่อส่ง Body
ajaxContentType: "json", // ส่งข้อมูลในรูปแบบ JSON
pagination: "remote", // ให้ Server จัดการแบ่งหน้า
filterMode: "remote", // ให้ Server จัดการ Filter
}) ;
📝 ตารางเปรียบเทียบ: GET vs POST สำหรับ Filtering
คุณสมบัติ
GET (Standard)
POST (Complex Search)
ขีดจำกัดข้อมูล
จำกัดตามความยาว URL (น้อย)
ไม่จำกัด (ขึ้นอยู่กับ Server Config)
ความปลอดภัย
ข้อมูลโชว์บน URL / History
ข้อมูลซ่อนอยู่ใน Request Body
ความเหมาะสม
ค้นหาทั่วไป (Simple Search)
ค้นหาขั้นสูง / รายงาน (Complex Filter)
Caching
ทำได้ง่ายผ่าน Browser/CDN
ทำได้ยากกว่า (ต้องตั้งค่าพิเศษ)
⚠️ ข้อควรระวังสำหรับ System Admin
หากคุณตัดสินใจเปลี่ยนมาใช้ POST เพื่อรับส่งข้อมูล JSON ขนาดใหญ่ อย่าลืมตรวจสอบค่าคอนฟิกใน Nginx