文章

PHP - API 介接


課程簡介

API(Application Programming Interface)是應用程式之間互相通訊的橋樑。PHP 可用於呼叫外部 API 取得資料或提供 API 供其他應用使用。本課程將教學如何使用 PHP 與 API 進行介接,並介紹常用技術如 cURLfile_get_contents()


API 的基本概念

  • RESTful API:基於 HTTP 的輕量級介面,通常使用 JSON 傳遞資料。
  • HTTP 方法
    • GET:取得資源。
    • POST:新增資源。
    • PUT/PATCH:更新資源。
    • DELETE:刪除資源。

使用 PHP 呼叫 API

方法 1:file_get_contents()

適用於簡單 GET 請求。

1
2
3
4
5
6
7
<?php
$url = "https://jsonplaceholder.typicode.com/posts/1";
$response = file_get_contents($url);
$data = json_decode($response, true);

echo "標題:" . $data["title"];
?>

方法 2:cURL

更靈活的工具,可處理各種 HTTP 請求。

cURL GET 請求

1
2
3
4
5
6
7
8
9
10
11
<?php
$url = "https://jsonplaceholder.typicode.com/posts/1";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo "標題:" . $data["title"];
?>

cURL POST 請求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
$url = "https://jsonplaceholder.typicode.com/posts";

$postData = [
    "title" => "PHP 與 API",
    "body" => "這是一篇使用 PHP 發佈的文章",
    "userId" => 1
];

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

$data = json_decode($response, true);
echo "新文章 ID:" . $data["id"];
?>

方法 3:使用第三方套件

使用套件如 Guzzle 簡化 API 介接。

安裝 Guzzle

在專案目錄執行:

1
composer require guzzlehttp/guzzle

使用範例

1
2
3
4
5
6
7
8
9
10
11
<?php
require 'vendor/autoload.php';

use GuzzleHttp\Client;

$client = new Client();
$response = $client->request('GET', 'https://jsonplaceholder.typicode.com/posts/1');
$data = json_decode($response->getBody(), true);

echo "標題:" . $data["title"];
?>

提供 API 功能

1. 基本範例

建立 PHP API,提供簡單 JSON 回應:

1
2
3
4
5
6
7
8
9
10
<?php
header("Content-Type: application/json");

$data = [
    "status" => "success",
    "message" => "歡迎來到我的 API!"
];

echo json_encode($data);
?>

2. RESTful API

範例:簡單 CRUD 操作

建立一個處理使用者資料的 API。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
header("Content-Type: application/json");
$method = $_SERVER["REQUEST_METHOD"];

switch ($method) {
    case "GET":
        echo json_encode(["message" => "取得使用者資料"]);
        break;
    case "POST":
        echo json_encode(["message" => "新增使用者"]);
        break;
    case "PUT":
        echo json_encode(["message" => "更新使用者資料"]);
        break;
    case "DELETE":
        echo json_encode(["message" => "刪除使用者"]);
        break;
    default:
        http_response_code(405);
        echo json_encode(["message" => "方法不被允許"]);
        break;
}
?>

課程重點

1. 處理 API 回應

  • 使用 json_decode() 處理 JSON 資料。
  • 驗證回應狀態碼,例如 200(成功)或 404(未找到)。

2. 安全性注意事項

  • API 金鑰:對於需要授權的 API,使用安全的方式傳遞金鑰(如 HTTP 標頭)。
  • 防止惡意請求:實現速率限制(Rate Limiting)或驗證請求來源。
  • 資料驗證:確保輸入與輸出資料的安全性與完整性。

教學練習

練習 1:呼叫天氣 API

使用 OpenWeatherMap API,取得指定城市的天氣資訊並顯示。


練習 2:建立留言系統 API

設計一個簡單 API,提供留言新增、取得及刪除功能。


練習 3:整合第三方服務

整合支付服務(如 Stripe)或地圖服務(如 Google Maps),完成一個實用範例。


教學重點

  • 掌握 PHP 呼叫外部 API 的多種方法(如 file_get_contents()cURL)。
  • 熟悉 API 的基礎結構與常見操作。
  • 學習提供 API 的設計與實現,並考慮安全性需求。

本文章以 CC BY 4.0 授權