Skip to main content

เนื้อหาภาษาไทย / Thai content

System guide Content reviewed

การสร้าง API Resources ใน Laravel

บทความนี้แนะนำ API Resources ใน Laravel ซึ่งเป็นเครื่องมือสำหรับแปลงข้อมูล Model ให้เป็น JSON response ที่สวยงามและเป็นระเบียบ โดยเน้นที่การแปลงข้อมูล, การสร้าง...

การสร้าง API Resources ใน Laravel

ในบทเรียนก่อนหน้านี้ เราได้เรียนรู้เกี่ยวกับการใช้ PHP Framework เช่น Laravel/Symfony เบื้องต้นแล้ว ในบทนี้ เราจะมาเจาะลึกถึงวิธีการสร้าง API Resources ใน Laravel ซึ่งเป็นเครื่องมือที่ช่วยให้การแปลงข้อมูลจาก Model ของเราไปเป็น JSON Response ที่สวยงามและเป็นระเบียบเป็นเรื่องง่าย

API Resources คืออะไร?

API Resources ใน Laravel คือ Class ที่ทำหน้าที่เป็นตัวกลางในการแปลงข้อมูลจาก Model (เช่น ข้อมูลจากฐานข้อมูล) ให้เป็นรูปแบบ JSON ที่ API ของเราจะส่งกลับไปยัง Client คุณสมบัติเด่นของ API Resources คือ:

  • การแปลงข้อมูล (Data Transformation): ช่วยให้เราสามารถเลือกเฉพาะ Fields ที่ต้องการส่งกลับ และปรับแต่งรูปแบบของข้อมูลให้เหมาะสมกับ API
  • การสร้างรูปแบบที่สอดคล้องกัน (Consistent Format): ทำให้ API ของเราส่ง JSON Response ที่มีรูปแบบเดียวกันเสมอ ไม่ว่าข้อมูลจะมาจาก Model ใด
  • การจัดการความสัมพันธ์ (Relationship Handling): ช่วยให้เราสามารถจัดการความสัมพันธ์ระหว่าง Model ได้อย่างง่ายดาย เช่น การดึงข้อมูล User ที่เกี่ยวข้องกับ Post
  • การนำกลับมาใช้ใหม่ (Reusability): สามารถนำ API Resources กลับมาใช้ใหม่ได้ในหลาย Endpoint ทำให้โค้ดของเราสะอาดและบำรุงรักษาง่าย

ทำไมต้องใช้ API Resources?

การสร้าง JSON Response ด้วยวิธีปกติ (เช่น การใช้ json_encode() โดยตรงบน Object) อาจทำให้โค้ดของเราซับซ้อนและยากต่อการบำรุงรักษา โดยเฉพาะอย่างยิ่งเมื่อ API ของเรามี Model หลายตัวที่มีความสัมพันธ์กัน API Resources ช่วยแก้ปัญหานี้ด้วยการ:

  • ลดความซับซ้อนของโค้ด: ทำให้ Controller ของเราสะอาดขึ้น โดยไม่ต้องกังวลเรื่องการแปลงข้อมูล
  • เพิ่มความสามารถในการบำรุงรักษา: เมื่อมีการเปลี่ยนแปลงโครงสร้างข้อมูล เราสามารถแก้ไข API Resources ได้เพียงจุดเดียว
  • สร้าง API ที่เป็นระเบียบ: ทำให้ API ของเราง่ายต่อการใช้งานและเข้าใจสำหรับ Developer คนอื่นๆ

การสร้าง API Resources

Laravel มี Artisan Command ที่ช่วยให้เราสร้าง API Resources ได้อย่างง่ายดาย:

php artisan make:resource UserResource

คำสั่งนี้จะสร้างไฟล์ app/Http/Resources/UserResource.php ซึ่งเป็น Class ที่เราจะใช้ในการแปลงข้อมูล User Model

โครงสร้างของ API Resources:

ไฟล์ UserResource.php จะมีลักษณะดังนี้:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;

class UserResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'name' => $this->name,
            'email' => $this->email,
            // เพิ่ม Fields อื่นๆ ที่ต้องการ
        ];
    }
}

คำอธิบาย:

  • namespace App\Http\Resources;: กำหนด Namespace ของ Class
  • use Illuminate\Http\Request; และ use Illuminate\Http\Resources\Json\JsonResource;: Import Class ที่จำเป็น
  • class UserResource extends JsonResource: กำหนด Class UserResource ให้สืบทอดมาจาก JsonResource
  • toArray(Request $request): array: Method นี้คือหัวใจสำคัญของ API Resources ทำหน้าที่แปลงข้อมูลจาก Model ให้เป็น Array ที่จะถูกแปลงเป็น JSON

การปรับแต่ง toArray() Method:

ภายใน toArray() Method เราสามารถกำหนด Fields ที่ต้องการส่งกลับ และปรับแต่งรูปแบบของข้อมูลได้ตามต้องการ ตัวอย่างเช่น:

public function toArray(Request $request): array
{
    return [
        'id' => $this->id,
        'full_name' => $this->name, // เปลี่ยนชื่อ Field
        'email' => $this->email,
        'created_at' => $this->created_at->format('Y-m-d H:i:s'), // ปรับรูปแบบวันที่
    ];
}

ในตัวอย่างนี้ เราได้:

  • เปลี่ยนชื่อ Field name เป็น full_name
  • ปรับรูปแบบของ Field created_at ให้เป็น Y-m-d H:i:s

การใช้งาน API Resources

เมื่อเราสร้าง API Resources เสร็จแล้ว เราสามารถนำไปใช้ใน Controller ของเราได้ดังนี้:

use App\Models\User;
use App\Http\Resources\UserResource;

public function show(int $id)
{
    $user = User::findOrFail($id);

    return new UserResource($user);
}

คำอธิบาย:

  • use App\Models\User; และ use App\Http\Resources\UserResource;: Import Class ที่จำเป็น
  • $user = User::findOrFail($id);: ดึงข้อมูล User จากฐานข้อมูล
  • return new UserResource($user);: สร้าง Instance ของ UserResource โดยส่ง User Model ไปให้

Laravel จะทำการแปลงข้อมูล User Model ให้เป็น JSON โดยใช้ toArray() Method ใน UserResource และส่งกลับไปยัง Client

การใช้งาน API Resources กับ Collection:

ถ้าเราต้องการส่งกลับข้อมูล User หลายคน เราสามารถใช้ API Resources กับ Collection ได้ดังนี้:

use App\Models\User;
use App\Http\Resources\UserResource;
use Illuminate\Http\Resources\Json\AnonymousResourceCollection;

public function index(): AnonymousResourceCollection
{
    $users = User::all();

    return UserResource::collection($users);
}

คำอธิบาย:

  • $users = User::all();: ดึงข้อมูล User ทั้งหมดจากฐานข้อมูล
  • return UserResource::collection($users);: ใช้ Static Method collection() ของ UserResource เพื่อสร้าง Collection ของ API Resources

Laravel จะทำการแปลงข้อมูล User แต่ละคนใน Collection ให้เป็น JSON โดยใช้ toArray() Method ใน UserResource และส่งกลับไปยัง Client ในรูปแบบ Array

การจัดการความสัมพันธ์ (Relationships)

API Resources สามารถจัดการความสัมพันธ์ระหว่าง Model ได้อย่างง่ายดาย ตัวอย่างเช่น ถ้าเรามี Model Post ที่มีความสัมพันธ์กับ Model User (Post เป็นของผู้ใช้คนใดคนหนึ่ง) เราสามารถสร้าง PostResource ที่ดึงข้อมูล User ที่เกี่ยวข้องได้ดังนี้:

<?php

namespace App\Http\Resources;

use Illuminate\Http\Request;
use Illuminate\Http\Resources\Json\JsonResource;
use App\Http\Resources\UserResource; // Import UserResource

class PostResource extends JsonResource
{
    /**
     * Transform the resource into an array.
     *
     * @return array<string, mixed>
     */
    public function toArray(Request $request): array
    {
        return [
            'id' => $this->id,
            'title' => $this->title,
            'content' => $this->content,
            'user' => new UserResource($this->user), // ดึงข้อมูล User ที่เกี่ยวข้อง
        ];
    }
}

ในตัวอย่างนี้ เราได้:

  • Import UserResource
  • เพิ่ม Field user ใน toArray() Method โดยสร้าง Instance ของ UserResource และส่ง $this->user (ความสัมพันธ์ระหว่าง Post และ User) ไปให้

เมื่อเราเรียกใช้ PostResource Laravel จะทำการแปลงข้อมูล Post และ User ที่เกี่ยวข้องให้เป็น JSON โดยใช้ toArray() Method ใน PostResource และ UserResource

สรุป

API Resources เป็นเครื่องมือที่สำคัญในการสร้าง API ที่สวยงามและเป็นระเบียบใน Laravel ช่วยให้เราสามารถแปลงข้อมูลจาก Model ให้เป็น JSON Response ได้อย่างง่ายดาย และจัดการความสัมพันธ์ระหว่าง Model ได้อย่างมีประสิทธิภาพ ในบทถัดไป เราจะเรียนรู้เกี่ยวกับการใช้ Eloquent ORM ใน Laravel ซึ่งเป็นเครื่องมือที่ช่วยให้เราจัดการข้อมูลในฐานข้อมูลได้ง่ายยิ่งขึ้น

Office.in.th Custom Service

Want to build or adapt a system from this structure?

Office.in.th designs and develops enterprise web applications, API integrations, and public- and private-sector management systems, with long-term support.

See our software development service