แสดงบทความที่มีป้ายกำกับ JSON แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ JSON แสดงบทความทั้งหมด

วันเสาร์ที่ 5 เมษายน พ.ศ. 2568

เชื่อมต่อ PHP กับ API ภายนอกแบบง่ายๆ ด้วย cURL

ถ้าพูดถึงการพัฒนาเว็บแอปพลิเคชันสมัยใหม่ API (Application Programming Interface) เป็นสิ่งที่ขาดไม่ได้เลย ไม่ว่าจะเป็นการดึงข้อมูลจาก OpenWeather, Google Maps, หรือแม้แต่เชื่อมต่อ Payment Gateway อย่าง Stripe หรือ PayPal 🔗

วันนี้เราจะมาทำความรู้จักกับ cURL ซึ่งเป็นเครื่องมือสำคัญที่ช่วยให้ PHP สามารถเรียกใช้ API ได้ง่ายๆ แบบนักพัฒนามืออาชีพ! 🏆

🔥 ทำไมต้องใช้ cURL?

PHP มีฟังก์ชัน file_get_contents() ที่ใช้ดึงข้อมูลจาก URL ได้ แต่มีข้อจำกัด เช่น

❌ ไม่รองรับการส่ง HTTP Headers
❌ ไม่สามารถทำ HTTP POST, PUT, DELETE ได้ง่ายๆ
❌ ไม่รองรับ SSL/TLS อย่างดี


cURL ช่วยแก้ปัญหานี้! ✅

✔️ รองรับทุกประเภทของ HTTP Request (GET, POST, PUT, DELETE)
✔️ รองรับ Bearer Token, API Key, และ OAuth
✔️ รองรับการส่ง JSON, XML, Form Data
✔️ ปลอดภัย และ ควบคุมการเชื่อมต่อได้ดีกว่า


🛠️ 1. เช็คว่า PHP รองรับ cURL หรือไม่

ก่อนเริ่มต้น ให้เช็คว่าเซิร์ฟเวอร์ของคุณเปิดใช้งาน cURL หรือยัง

รันคำสั่งนี้ใน PHP

<?php
phpinfo();
?>

แล้วมองหา cURL support => enabled ✅
ถ้ายังไม่เปิดใช้งาน ให้เพิ่มหรือแก้ไขไฟล์ php.ini

extension=curl

จากนั้น Restart Apache หรือ Nginx


🌎 2. การใช้ cURL ดึงข้อมูลจาก API ภายนอก (HTTP GET)

สมมติว่าเราต้องการดึงข้อมูลสภาพอากาศจาก OpenWeather API 🌤️

สร้างไฟล์ get_weather.php

<?php
$apiKey = "your_api_key";  // เปลี่ยนเป็น API Key ของคุณ
$city = "Bangkok";
$url = "https://api.openweathermap.org/data/2.5/weather?q=$city&appid=$apiKey&units=metric";

$ch = curl_init();  // เริ่มใช้งาน cURL
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);

if ($data && isset($data['main']['temp'])) {
    echo "🌡️ อุณหภูมิใน $city ตอนนี้: " . $data['main']['temp'] . "°C";
} else {
    echo "ไม่สามารถดึงข้อมูลได้ ❌";
}
?>

🔥 อธิบายโค้ด

  • curl_init() → เริ่มใช้งาน cURL
  • curl_setopt($ch, CURLOPT_URL, $url); → ตั้งค่า URL
  • curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); → ให้คืนค่ากลับมาเป็น string
  • curl_exec($ch); → รันคำสั่ง
  • curl_close($ch); → ปิดการเชื่อมต่อ
  • json_decode($response, true); → แปลง JSON เป็น Array


📤 3. ส่งข้อมูลไปยัง API (HTTP POST)

สมมติว่าคุณต้องส่งข้อมูลไปยัง Webhook ของ Discord 🎤

<?php
$webhookUrl = "https://discord.com/api/webhooks/your_webhook_url";
$data = ["content" => "Hello from PHP! 👋"];

$ch = curl_init($webhookUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo "Response: " . $response;
?>

🔥 อธิบายโค้ด

  • CURLOPT_POST → ใช้ส่งแบบ POST
  • CURLOPT_POSTFIELDS → ข้อมูลที่ต้องการส่ง
  • CURLOPT_HTTPHEADER → กำหนดว่าเราส่ง JSON


🔑 4. การใช้ API Key และ Bearer Token

สมมติว่าเราต้องเรียก GitHub API เพื่อดึงข้อมูล User 👨‍💻

<?php
$token = "your_github_personal_access_token";
$url = "https://api.github.com/user";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Authorization: Bearer $token",
    "User-Agent: PHP-cURL"
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
print_r($data);
?>

💡 หมายเหตุ:

  • บาง API ต้องการให้ใส่ User-Agent ไม่งั้นจะถูกปฏิเสธ
  • GitHub ใช้ Bearer Token แทน API Key


⚡ 5. ส่งข้อมูลแบบ JSON และรับค่ากลับมา

สมมติว่าคุณต้องการเชื่อมต่อ Chatbot API ของ AI 🤖

<?php
$url = "https://api.example.com/chatbot";
$data = [
    "message" => "Hello, how are you?",
    "user_id" => 12345
];

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-Type: application/json"]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);
curl_close($ch);

echo "Chatbot response: " . $response;
?>


🛡️ 6. จัดการข้อผิดพลาด (Error Handling)

บางครั้ง API อาจล่ม หรือส่งข้อมูลผิด เราต้องมีการจัดการ Error

<?php
$ch = curl_init("https://api.example.com/data");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($ch);

if (curl_errno($ch)) {
    echo "cURL Error: " . curl_error($ch);
} else {
    echo "Response: " . $response;
}

curl_close($ch);
?>

✅ curl_errno($ch) → เช็คว่ามีข้อผิดพลาดไหม
✅ curl_error($ch) → ดึงข้อความ error


✅ สรุป

✔️ ใช้ cURL ดึงข้อมูลจาก API ภายนอกได้ทุกแบบ
✔️ รองรับ GET, POST, PUT, DELETE
✔️ ใช้ Bearer Token และ API Key ได้ง่าย
✔️ รองรับการส่งข้อมูลแบบ JSON และ Form Data
✔️ ควรมี Error Handling ทุกครั้ง

วันอาทิตย์ที่ 30 มีนาคม พ.ศ. 2568

เขียน RESTful API ด้วย PHP แบบมือโปร

ถ้าคุณเป็นนักพัฒนา PHP แล้วเคยต้องสร้าง API เพื่อให้ระบบอื่น ๆ มาเรียกใช้ แต่ยังงง ๆ ว่า "ต้องทำยังไงให้ API ใช้งานง่าย ปลอดภัย และเป็นมาตรฐาน?" 🤔

บทความนี้จะพาคุณไปทำความเข้าใจ RESTful API และวิธีสร้างมันขึ้นมาด้วย PHP แบบมือโปร 💡
พร้อมตัวอย่างโค้ดจริง (มี CRUD: Create, Read, Update, Delete) ที่สามารถใช้งานได้ทันที!


1. RESTful API คืออะไร? แล้วทำไมต้องใช้มัน? 🤷‍♂️

✅ RESTful API คืออะไร?

RESTful API เป็น API ที่ออกแบบตามหลัก REST (Representational State Transfer)
REST ช่วยให้ API ทำงานได้อย่างเป็นมาตรฐาน โดยใช้ HTTP Method ในการควบคุมข้อมูล เช่น:

HTTP Method ใช้ทำอะไร? ตัวอย่าง
GET ดึงข้อมูล /users (ดึงข้อมูลผู้ใช้ทั้งหมด)
POST เพิ่มข้อมูล /users (เพิ่มผู้ใช้ใหม่)
PUT อัปเดตข้อมูล /users/1 (แก้ไขข้อมูลผู้ใช้ ID=1)
DELETE ลบข้อมูล /users/1 (ลบผู้ใช้ ID=1)


✅ RESTful API มีประโยชน์ยังไง?

✔ รองรับหลายแพลตฟอร์ม (Frontend, Mobile, IoT)
✔ โค้ดสะอาดและเข้าใจง่าย (ใช้ HTTP Method ตามมาตรฐาน)
✔ สเกลได้ง่าย (รองรับปริมาณผู้ใช้เยอะ ๆ ได้)


2. เตรียมตัวก่อนเริ่มสร้าง RESTful API ด้วย PHP 🛠️

📌 สิ่งที่ต้องมี

✅ PHP 7 หรือใหม่กว่า
✅ MySQL หรือ Database ที่รองรับ
✅ Composer (ใช้สำหรับติดตั้งไลบรารี)

📌 ติดตั้ง Composer และ Slim Framework

เราจะใช้ Slim Framework ช่วยจัดการ API ให้ง่ายขึ้น

composer require slim/slim:^4.0 slim/psr7

📌 Slim คืออะไร?

Slim เป็น Micro Framework สำหรับ PHP ที่ช่วยให้สร้าง RESTful API ได้เร็วและง่ายกว่าเขียนเองตั้งแต่ต้น

3. เริ่มสร้าง RESTful API ด้วย PHP

3.1 สร้างโครงสร้างโปรเจกต์

จัดโครงสร้างไฟล์ให้เป็นระเบียบแบบนี้

restful-api-php/
│── public/
│   ├── index.php  (ไฟล์หลักของ API)
│── src/
│   ├── Database.php  (จัดการฐานข้อมูล)
│   ├── UserController.php  (ควบคุม API ผู้ใช้)
│── composer.json

3.2 เชื่อมต่อฐานข้อมูล (Database.php)

สร้างไฟล์ src/Database.php สำหรับจัดการการเชื่อมต่อ MySQL

<?php
class Database {
    private $host = "localhost";
    private $db_name = "restful_api";
    private $username = "root";
    private $password = "";
    public $conn;

    public function getConnection() {
        $this->conn = null;
        try {
            $this->conn = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->db_name, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $exception) {
            echo "Database error: " . $exception->getMessage();
        }
        return $this->conn;
    }
}
?>

3.3 สร้าง API สำหรับจัดการผู้ใช้ (UserController.php)

สร้างไฟล์ src/UserController.php และเพิ่มโค้ดนี้

<?php
require_once "Database.php";

class UserController {
    private $db;

    public function __construct() {
        $database = new Database();
        $this->db = $database->getConnection();
    }

    // ดึงข้อมูลผู้ใช้ทั้งหมด
    public function getUsers($response) {
        $query = "SELECT * FROM users";
        $stmt = $this->db->prepare($query);
        $stmt->execute();
        $users = $stmt->fetchAll(PDO::FETCH_ASSOC);

        return $response->withJson($users);
    }

    // เพิ่มผู้ใช้ใหม่
    public function createUser($request, $response) {
        $data = $request->getParsedBody();
        $query = "INSERT INTO users (name, email) VALUES (:name, :email)";
        $stmt = $this->db->prepare($query);
        $stmt->bindParam(":name", $data['name']);
        $stmt->bindParam(":email", $data['email']);
        $stmt->execute();

        return $response->withJson(["message" => "User created successfully"]);
    }
}
?>

3.4 ตั้งค่า Route ใน index.php

สร้างไฟล์ public/index.php และตั้งค่า API Route

<?php
require '../vendor/autoload.php';
require '../src/UserController.php';

$app = new \Slim\App();

// สร้าง instance ของ UserController
$userController = new UserController();

// Route: GET /users (ดึงข้อมูลผู้ใช้ทั้งหมด)
$app->get('/users', function ($request, $response, $args) use ($userController) {
    return $userController->getUsers($response);
});

// Route: POST /users (เพิ่มผู้ใช้ใหม่)
$app->post('/users', function ($request, $response, $args) use ($userController) {
    return $userController->createUser($request, $response);
});

// เริ่มต้น API
$app->run();
?>

📌 วิธีทดสอบ API

1️⃣ รันเซิร์ฟเวอร์ด้วย PHP

php -S localhost:8000 -t public

2️⃣ ทดสอบดึงข้อมูลผู้ใช้

เปิดเว็บเบราว์เซอร์แล้วไปที่ http://localhost:8000/users

3️⃣ ทดสอบเพิ่มผู้ใช้ใหม่

ใช้ Postman หรือ cURL ส่ง POST ไปที่ /users พร้อม JSON:

{
    "name": "John Doe",
    "email": "john@example.com"
}


4. จัดการข้อผิดพลาดใน API (Error Handling)

เราควรให้ API ตอบกลับข้อความที่ชัดเจน เมื่อเกิดข้อผิดพลาด

// กรณีหา Resource ไม่เจอ
$app->get('/users/{id}', function ($request, $response, $args) use ($userController) {
    $user = $userController->getUserById($args['id']);
    
    if (!$user) {
        return $response->withJson(["error" => "User not found"], 404);
    }

    return $response->withJson($user);
});


5. สรุป: RESTful API ด้วย PHP แบบมือโปร

🔥 สิ่งที่คุณได้เรียนรู้
✅ RESTful API คืออะไร และใช้ HTTP Method ยังไง
✅ วิธีสร้าง API ด้วย PHP + Slim Framework
✅ วิธีเชื่อมต่อฐานข้อมูลและจัดการข้อมูลด้วย CRUD
✅ วิธีทำ Error Handling ให้ API ใช้งานง่าย

💡 API เป็นหัวใจสำคัญของเว็บยุคใหม่ ถ้าอยากพัฒนา PHP แบบมือโปร ต้องเข้าใจ RESTful API! 🚀