Skip to main content

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

System guide Content reviewed

การสร้าง API ด้วย PHP

การสร้าง API ด้วย PHP

ในยุคที่การสื่อสารระหว่างแอปพลิเคชันต่างๆ เป็นสิ่งสำคัญ การสร้าง API (Application Programming Interface) จึงเป็นทักษะที่ขาดไม่ได้สำหรับนักพัฒนา PHP API ช่วยให้แอปพลิเคชันของคุณสามารถแลกเปลี่ยนข้อมูลกับแอปพลิเคชันอื่นๆ ได้อย่างมีประสิทธิภาพและเป็นมาตรฐาน ในบทนี้ เราจะมาเรียนรู้วิธีการสร้าง RESTful API อย่างง่ายด้วย PHP ตั้งแต่การจัดการ Routing, Request Handling ไปจนถึง Response Formatting

RESTful API คืออะไร?

REST (Representational State Transfer) คือรูปแบบสถาปัตยกรรมสำหรับการสร้าง web services ที่เน้นการใช้ HTTP verbs (GET, POST, PUT, DELETE) เพื่อดำเนินการกับ resources ต่างๆ โดย RESTful API จะมีคุณสมบัติดังนี้:

  • Stateless: แต่ละ request ที่ส่งไปยัง API จะต้องมีข้อมูลทั้งหมดที่จำเป็นในการประมวลผล โดยไม่ต้องอาศัยข้อมูลจาก request ก่อนหน้า
  • Cacheable: Response จาก API สามารถ cache ได้ เพื่อเพิ่มประสิทธิภาพในการทำงาน
  • Uniform Interface: ใช้ HTTP verbs และ standard data formats (เช่น JSON) อย่างสอดคล้องกัน
  • Layered System: Client สามารถเชื่อมต่อกับ API ผ่าน layers ต่างๆ โดยไม่ต้องทราบโครงสร้างภายใน

ข้อดีของการสร้าง API ด้วย PHP

  • ความง่ายในการเรียนรู้: PHP เป็นภาษาที่ค่อนข้างง่ายต่อการเรียนรู้และมี syntax ที่เข้าใจได้ง่าย
  • เครื่องมือและ Library: มีเครื่องมือและ library มากมายที่ช่วยให้การสร้าง API ด้วย PHP ง่ายขึ้น เช่น Slim, Laravel, Symfony
  • Community ขนาดใหญ่: มี community ขนาดใหญ่ที่พร้อมให้ความช่วยเหลือและแบ่งปันความรู้

Routing: การจัดการเส้นทาง URL

Routing คือกระบวนการในการจับคู่ URL ที่ผู้ใช้เรียกเข้ามากับฟังก์ชันหรือ controller ที่เหมาะสมในการประมวลผล request นั้นๆ ในการสร้าง API เราจำเป็นต้องกำหนด routing เพื่อให้ API ของเรารู้ว่าจะต้องทำอะไรเมื่อมี request เข้ามาที่ URL ต่างๆ

ตัวอย่าง:

<?php

// กำหนด header ให้เป็น JSON
header('Content-Type: application/json');

$request_method = $_SERVER['REQUEST_METHOD'];
$request_uri = $_SERVER['REQUEST_URI'];

// แยก URI ออกจาก parameters (ถ้ามี)
$uri_parts = explode('?', $request_uri);
$path = $uri_parts[0];

// Routing แบบง่าย
switch ($path) {
    case '/products':
        // เรียกฟังก์ชันจัดการ products
        handleProductsRequest($request_method);
        break;
    case '/users':
        // เรียกฟังก์ชันจัดการ users
        handleUsersRequest($request_method);
        break;
    default:
        // ไม่พบ endpoint
        http_response_code(404);
        echo json_encode(['message' => 'Endpoint not found']);
        break;
}

function handleProductsRequest($method) {
    switch ($method) {
        case 'GET':
            // ดึงข้อมูล products ทั้งหมด
            getProducts();
            break;
        case 'POST':
            // สร้าง product ใหม่
            createProduct();
            break;
        default:
            http_response_code(405); // Method Not Allowed
            echo json_encode(['message' => 'Method not allowed']);
            break;
    }
}

function handleUsersRequest($method) {
    // ... (คล้ายกับ handleProductsRequest)
}

function getProducts() {
    // สมมติว่าเรามีข้อมูล products ใน array
    $products = [
        ['id' => 1, 'name' => 'Product A', 'price' => 10],
        ['id' => 2, 'name' => 'Product B', 'price' => 20],
    ];

    echo json_encode($products);
}

function createProduct() {
    // ดึงข้อมูลจาก request body
    $data = json_decode(file_get_contents("php://input"));

    // ตรวจสอบข้อมูล
    if (empty($data->name) || empty($data->price)) {
        http_response_code(400); // Bad Request
        echo json_encode(['message' => 'Please provide name and price']);
        return;
    }

    // สมมติว่าเราบันทึกข้อมูลลง database
    // ...

    http_response_code(201); // Created
    echo json_encode(['message' => 'Product created successfully', 'product' => $data]);
}

?>

คำอธิบาย:

  • เราใช้ $_SERVER['REQUEST_METHOD'] เพื่อตรวจสอบ HTTP verb ที่ใช้ (GET, POST, PUT, DELETE)
  • เราใช้ $_SERVER['REQUEST_URI'] เพื่อตรวจสอบ URL ที่ผู้ใช้เรียกเข้ามา
  • เราใช้ switch statement เพื่อกำหนด routing ตาม URL
  • ฟังก์ชัน handleProductsRequest และ handleUsersRequest จะจัดการ request ที่เกี่ยวข้องกับ products และ users ตามลำดับ
  • ฟังก์ชัน getProducts จะดึงข้อมูล products และส่งกลับในรูปแบบ JSON
  • ฟังก์ชัน createProduct จะสร้าง product ใหม่ โดยรับข้อมูลจาก request body และบันทึกลง database (ในตัวอย่างนี้เราสมมติว่าบันทึกลง database)
  • http_response_code() ใช้เพื่อกำหนด HTTP status code ให้กับ response
  • file_get_contents("php://input") ใช้เพื่ออ่านข้อมูลจาก request body
  • json_decode() ใช้เพื่อแปลง JSON string เป็น PHP object
  • json_encode() ใช้เพื่อแปลง PHP array หรือ object เป็น JSON string

Trade-offs: การใช้ switch statement สำหรับ routing เหมาะสำหรับ API ขนาดเล็ก แต่สำหรับ API ขนาดใหญ่ที่มีจำนวน endpoint มาก การใช้ framework อย่าง Slim หรือ Laravel จะช่วยให้การจัดการ routing ง่ายขึ้นและมีประสิทธิภาพมากขึ้น

Request Handling: การจัดการข้อมูลที่ส่งมาจาก Client

Request handling คือกระบวนการในการรับและประมวลผลข้อมูลที่ส่งมาจาก client ข้อมูลเหล่านี้อาจอยู่ในรูปแบบต่างๆ เช่น URL parameters, request body (JSON, XML, form data), HTTP headers

ตัวอย่าง: การรับข้อมูลจาก request body (JSON)

<?php

// ... (routing code จากตัวอย่างก่อนหน้า)

function createProduct() {
    // ดึงข้อมูลจาก request body
    $data = json_decode(file_get_contents("php://input"));

    // ตรวจสอบข้อมูล
    if (empty($data->name) || empty($data->price)) {
        http_response_code(400); // Bad Request
        echo json_encode(['message' => 'Please provide name and price']);
        return;
    }

    // ... (บันทึกข้อมูลลง database)
}

?>

คำอธิบาย:

  • file_get_contents("php://input") ใช้เพื่ออ่านข้อมูลจาก request body
  • json_decode() ใช้เพื่อแปลง JSON string เป็น PHP object
  • เราตรวจสอบว่าข้อมูล name และ price ถูกส่งมาหรือไม่ ถ้าไม่ถูกส่งมา เราจะส่ง response กลับไปพร้อมกับ HTTP status code 400 (Bad Request)

Response Formatting: การจัดรูปแบบข้อมูลที่ส่งกลับไปให้ Client

Response formatting คือกระบวนการในการจัดรูปแบบข้อมูลที่ส่งกลับไปให้ client ให้เป็นรูปแบบที่ client สามารถเข้าใจได้ รูปแบบที่นิยมใช้กันคือ JSON (JavaScript Object Notation) เพราะเป็นรูปแบบที่ง่ายต่อการ parse และใช้งาน

ตัวอย่าง: การส่ง response ในรูปแบบ JSON

<?php

// กำหนด header ให้เป็น JSON
header('Content-Type: application/json');

// ... (routing code จากตัวอย่างก่อนหน้า)

function getProducts() {
    // สมมติว่าเรามีข้อมูล products ใน array
    $products = [
        ['id' => 1, 'name' => 'Product A', 'price' => 10],
        ['id' => 2, 'name' => 'Product B', 'price' => 20],
    ];

    echo json_encode($products);
}

?>

คำอธิบาย:

  • เรากำหนด header Content-Type: application/json เพื่อบอก client ว่า response ที่เราส่งกลับไปเป็น JSON
  • json_encode() ใช้เพื่อแปลง PHP array เป็น JSON string

สรุป

ในบทนี้ เราได้เรียนรู้วิธีการสร้าง RESTful API อย่างง่ายด้วย PHP ตั้งแต่การจัดการ Routing, Request Handling ไปจนถึง Response Formatting ตัวอย่างที่เราได้เห็นเป็นเพียงพื้นฐาน แต่สามารถนำไปต่อยอดและปรับปรุงให้ API ของคุณมีความซับซ้อนและมีประสิทธิภาพมากยิ่งขึ้นได้ ในบทต่อไป เราจะมาเรียนรู้เกี่ยวกับการใช้ Git สำหรับ Version Control ซึ่งเป็นเครื่องมือที่สำคัญสำหรับนักพัฒนาทุกคน

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