🔹 เกริ่นนำ
การส่งข้อมูล JSON จาก API ด้วย response()->json()
เป็นวิธีพื้นฐาน แต่หากต้องการควบคุมโครงสร้าง response ให้เป็นระเบียบ สม่ำเสมอ และง่ายต่อการจัดการ Laravel มีระบบ API Resource และ Resource Collections ที่ช่วยจัดรูปแบบข้อมูลให้อัตโนมัติ
บทนี้จะแนะนำการใช้ Http Resources
เพื่อจัดรูปแบบข้อมูล API อย่างมืออาชีพ และเหมาะกับระบบขนาดกลางถึงใหญ่
🔸 การสร้าง Resource
php artisan make:resource PostResource
จะได้ไฟล์ app/Http/Resources/PostResource.php
🔸 ตัวอย่าง PostResource
use Illuminate\Http\Resources\Json\JsonResource;
class PostResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
'title' => $this->title,
'content' => $this->content,
'created_at' => $this->created_at->toDateTimeString()
];
}
}
🔸 การใช้ Resource กับ Model เดี่ยว
return new PostResource($post);
🔸 การใช้ Resource กับหลายรายการ (Collection)
return PostResource::collection(Post::all());
Laravel จะจัดการให้ทุก record ใน collection ถูกแปลงผ่าน resource อย่างสม่ำเสมอ
🔸 เพิ่ม metadata เพิ่มเติม
return PostResource::collection(Post::all())
->additional([
'status' => 'success'
]);
💡 ใช้ Resource เพื่อแยก logic ของ response ออกจาก Controller ทำให้โค้ดสะอาดและทดสอบง่ายขึ้น