เราจะใช้ Method GET ในการเรียกข้อมูลจาก server แต่
🚀 RESTful Method GET: มาตรฐานและความท้าทายในโลกใช้งานจริง
ในสถาปัตยกรรม REST นั้น GET คือหัวใจหลักที่ใช้สำหรับการ “ดึงข้อมูล” โดยมีกฎเหล็กคือต้องเป็น Safe และ Idempotent
โดยปกติเราจะส่งเงื่อนไขการกรองข้อมูล ผ่านสิ่งที่เรียกว่า Query Parameters เช่น: GET /api/products?category=electronics&min_price=1000&sort=desc
🛑 เมื่อ GET เริ่ม “เอาไม่อยู่”
เมื่อคุณใช้งาน Library จัดการตารางอย่าง DataTables หรือ Tabulator ในโหมด Server-side Processing ตัว Library จะส่งพารามิเตอร์ไปหา Server จำนวนมาก เช่น
- ลำดับคอลัมน์
- สถานะการ Search ของแต่ละคอลัมน์
- การเรียงลำดับ
- เลขหน้า
ปัญหาที่ตามมา
- URL Length Limit: Browser ส่วนใหญ่และ Web Server อย่าง Nginx มักจำกัดความยาว URL ไว้ที่ประมาณ 2,000 – 8,000 ตัวอักษร หาก Filter ยาวเกินไป Request จะถูกตัดทิ้ง
- Readability & Logs: URL ที่ยาวเป็นกิโลเมตรทำให้อ่าน Log ยาก และอาจหลุดข้อมูลสำคัญไปอยู่ใน History ของ Browser ได้
- Special Characters: การส่ง Array หรือ Object ซับซ้อนผ่าน URL ต้องทำการ Encode จนทำให้อ่านค่าได้ลำบาก
🔄 ทางออก: การใช้ POST แทน GET
แม้ตามทฤษฎี 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",
}
}) ;