본문으로 건너뛰기

เนื้อหาภาษาไทย / 태국어 콘텐츠

시스템 가이드 검수 완료된 콘텐츠

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

บทความนี้อธิบายถึงวิธีการสร้าง API Controller ใน Laravel โดยเน้นที่การใช้ Artisan command เพื่อสร้าง Controller พร้อม method พื้นฐานสำหรับ CRUD operations (Crea...

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

ในบทที่แล้ว เราได้เรียนรู้เกี่ยวกับการใช้ Eloquent ORM เพื่อจัดการฐานข้อมูลอย่างมีประสิทธิภาพใน Laravel ตอนนี้เราจะมาเรียนรู้วิธีการสร้าง API Controller ซึ่งเป็นส่วนประกอบสำคัญในการสร้าง API ด้วย Laravel Controller คือส่วนที่รับผิดชอบในการรับ Request จาก Client, ประมวลผลข้อมูล, และส่ง Response กลับไป ทำให้ Controller เป็นจุดศูนย์กลางของการทำงานของ API เรามาดูกันว่า API Controller คืออะไร สร้างได้อย่างไร และกำหนด Route อย่างไร

API Controller คืออะไร

API Controller ใน Laravel คือ Class ที่ทำหน้าที่เป็นตัวกลางระหว่าง Request ที่เข้ามาจาก Client และ Model ที่จัดการข้อมูลในฐานข้อมูล โดย Controller จะ:

  • รับ Request HTTP (GET, POST, PUT, DELETE)
  • ตรวจสอบและ Validate ข้อมูลที่ส่งเข้ามา
  • เรียกใช้ Model เพื่อดึง, สร้าง, แก้ไข, หรือลบข้อมูล
  • แปลงข้อมูลเป็นรูปแบบ JSON
  • ส่ง JSON Response กลับไปยัง Client

การใช้ Controller ช่วยให้ code ของเราเป็นระเบียบ แยกส่วนการทำงาน (Separation of Concerns) และง่ายต่อการบำรุงรักษา แทนที่จะเขียน logic ทั้งหมดใน Route Definition เราสามารถย้าย logic ไปไว้ใน Controller ได้

การสร้าง API Controller

Laravel มี Artisan Command ที่ช่วยให้เราสร้าง Controller ได้อย่างง่ายดาย ใน Terminal ให้พิมพ์คำสั่ง:

php artisan make:controller Api/ProductController --api

คำสั่งนี้จะสร้าง Controller ชื่อ ProductController ใน Folder app/Http/Controllers/Api และ Option --api จะสร้าง Controller ที่มี Method พื้นฐานสำหรับ CRUD (Create, Read, Update, Delete) API โดยอัตโนมัติ ซึ่งจะช่วยประหยัดเวลาในการเขียน code พื้นฐาน

เมื่อสร้าง Controller แล้ว ไฟล์ app/Http/Controllers/Api/ProductController.php จะมีลักษณะดังนี้:

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        //
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        //
    }

    /**
     * Display the specified resource.
     */
    public function show(string $id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     */
    public function update(Request $request, string $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     */
    public function destroy(string $id)
    {
        //
    }
}

จะเห็นว่า Controller มี Method พื้นฐานสำหรับจัดการ Resource (ในที่นี้คือ Product) ได้แก่:

  • index(): แสดงรายการ Product ทั้งหมด
  • store(Request $request): สร้าง Product ใหม่
  • show(string $id): แสดง Product ที่มี ID ที่กำหนด
  • update(Request $request, string $id): แก้ไข Product ที่มี ID ที่กำหนด
  • destroy(string $id): ลบ Product ที่มี ID ที่กำหนด

ต่อไป เราจะมาเติม code ลงในแต่ละ Method เพื่อให้ Controller ทำงานได้จริง

ตัวอย่าง: การ Implement Method index()

Method index() มีหน้าที่แสดงรายการ Product ทั้งหมด เราจะใช้ Eloquent ORM เพื่อดึงข้อมูล Product จากฐานข้อมูล และส่งกลับเป็น JSON Response

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Product; // Import the Product model
use Illuminate\Http\Request;

class ProductController extends Controller
{
    /**
     * Display a listing of the resource.
     */
    public function index()
    {
        $products = Product::all(); // ดึงข้อมูล Product ทั้งหมดจากฐานข้อมูล

        return response()->json($products); // ส่งกลับเป็น JSON Response
    }

    // ... (Other methods)
}

ใน Code นี้ เราได้ Import Product Model และใช้ Method all() เพื่อดึงข้อมูล Product ทั้งหมดจากฐานข้อมูล จากนั้นเราใช้ Function response()->json() เพื่อแปลงข้อมูลเป็น JSON Response และส่งกลับไปยัง Client

ตัวอย่าง: การ Implement Method store(Request $request)

Method store(Request $request) มีหน้าที่สร้าง Product ใหม่ เราจะรับข้อมูล Product จาก Request, Validate ข้อมูล, สร้าง Product ใหม่ในฐานข้อมูล, และส่งกลับ JSON Response

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Models\Product;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator; // Import the Validator facade

class ProductController extends Controller
{
    // ... (Other methods)

    /**
     * Store a newly created resource in storage.
     */
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'name' => 'required|string|max:255',
            'description' => 'nullable|string',
            'price' => 'required|numeric|min:0',
        ]);

        if ($validator->fails()) {
            return response()->json(['errors' => $validator->errors()], 422); // ส่งกลับ Error Response พร้อม HTTP Status Code 422
        }

        $product = Product::create([
            'name' => $request->name,
            'description' => $request->description,
            'price' => $request->price,
        ]);

        return response()->json($product, 201); // ส่งกลับ JSON Response พร้อม HTTP Status Code 201 (Created)
    }

    // ... (Other methods)
}

ใน Code นี้ เราได้ใช้ Validator Facade เพื่อ Validate ข้อมูลที่ส่งเข้ามา ถ้า Validation ไม่ผ่าน เราจะส่งกลับ Error Response พร้อม HTTP Status Code 422 (Unprocessable Entity) ถ้า Validation ผ่าน เราจะสร้าง Product ใหม่โดยใช้ Product::create() และส่งกลับ JSON Response พร้อม HTTP Status Code 201 (Created)

การ Define Routes

หลังจากสร้าง Controller แล้ว เราต้อง Define Route เพื่อเชื่อมโยง URL กับ Method ใน Controller ไฟล์ routes/api.php คือที่ที่เราจะกำหนด Route สำหรับ API ของเรา

ตัวอย่าง: การ Define Route สำหรับ ProductController

use App\Http\Controllers\Api\ProductController;
use Illuminate\Support\Facades\Route;

Route::apiResource('products', ProductController::class);

Route::apiResource() เป็น Method ที่สร้าง Route สำหรับ CRUD API โดยอัตโนมัติ โดยจะสร้าง Route สำหรับ Method index(), store(), show(), update(), และ destroy()

Route ที่ถูกสร้างขึ้นจะมีลักษณะดังนี้:

  • GET /api/products: เรียกใช้ ProductController@index
  • POST /api/products: เรียกใช้ ProductController@store
  • GET /api/products/{product}: เรียกใช้ ProductController@show
  • PUT /api/products/{product}: เรียกใช้ ProductController@update
  • DELETE /api/products/{product}: เรียกใช้ ProductController@destroy

{product} คือ Route Parameter ที่จะถูกส่งไปยัง Method show(), update(), และ destroy()

ข้อควรระวัง: Laravel 9 ขึ้นไป จะถือว่า route parameter ชื่อ {product} เป็น string ดังนั้น หากต้องการให้ Laravel ดึงข้อมูล Product จาก database โดยอัตโนมัติ (Route Model Binding) จะต้อง type-hint parameter ใน controller method ให้เป็น Product $product (Import Product Model ด้วย) Laravel จะจัดการ query หา product ที่มี id ตรงกับค่า {product} ให้เอง

    public function show(Product $product)
    {
        return response()->json($product);
    }

การใช้ API Controller ช่วยให้การสร้าง API ใน Laravel เป็นเรื่องง่ายและมีประสิทธิภาพ เราสามารถแยกส่วนการทำงาน, Validate ข้อมูล, และจัดการ Response ได้อย่างเป็นระบบ ในบทต่อไป เราจะเรียนรู้เกี่ยวกับการใช้ Symfony Serializer Component เพื่อแปลง Object เป็น JSON ในรูปแบบที่ซับซ้อนมากขึ้น

Office.in.th Custom Service

이 구조를 바탕으로 시스템을 개발하거나 맞춤 변경하고 싶으신가요?

Office.in.th는 엔터프라이즈 웹 애플리케이션, API 연동, 공공/민간 업무 관리 시스템을 설계·개발하며 장기 지원을 제공합니다.

소프트웨어 개발 서비스 보기