Web Service 是現代應用程式整合的核心技術,PHP 提供了多種實作方式。本文將詳細介紹四種常見的 PHP Web Service 架構:原生 SOAP、PHPRPC、NUSOAP 與 HessianPHP,並提供完整的伺服器端與客戶端程式碼範例,幫助開發者快速上手。
PHP 內建的 SOAP 擴充套件是最標準的實作方式,支援 WSDL 定義,適合企業級應用。使用前需確認 php.ini 中已啟用 extension=soap。
<?php
// 定義服務類別
class MyService {
public function hello($name) {
return "Hello, " . $name;
}
}
// 建立 SOAP 伺服器
$server = new SoapServer(null, array('uri' => 'https://localhost/soap'));
$server->setClass('MyService');
$server->handle();
?>
<?php
$client = new SoapClient(null, array(
'location' => 'https://localhost/soap/server.php',
'uri' => 'https://localhost/soap'
));
echo $client->hello('World'); // 輸出: Hello, World
?>
這是最基礎的 SOAP 通訊模型,實際專案中通常會搭配 WSDL 檔案定義介面契約。
PHPRPC 是一個開源的跨語言 RPC 框架,官網:phprpc.org。下載解壓後,將檔案分為伺服器端與客戶端目錄。
phprpc_server.php 等核心檔案phprpc_client.php 等核心檔案<?php
require_once('phprpc_server.php');
class MyService {
public function add($a, $b) {
return $a + $b;
}
}
$server = new PHPRPC_Server();
$server->add('MyService');
$server->start();
?>
<?php
require_once('phprpc_client.php');
$client = new PHPRPC_Client('https://localhost/phprpc/server.php');
$result = $client->add(10, 20);
echo $result; // 輸出: 30
?>
PHPRPC 支援自動生成 WSDL,適合快速開發內部微服務。
NUSOAP 是純 PHP 實作的 SOAP 庫,不需安裝擴充套件,相容性極佳。最新版本 0.9.5 可從官網下載,解壓後將 lib 目錄分別複製到伺服器端與客戶端專案中。
<?php
require_once('lib/nusoap.php');
$server = new nusoap_server();
$server->configureWSDL('MyService', 'urn:MyService');
$server->register('hello',
array('name' => 'xsd:string'),
array('return' => 'xsd:string'),
'urn:MyService'
);
function hello($name) {
return 'Hello, ' . $name;
}
$server->service($HTTP_RAW_POST_DATA);
?>
<?php
require_once('lib/nusoap.php');
$client = new nusoap_client('https://localhost/nusoap/server.php?wsdl', true);
$result = $client->call('hello', array('name' => 'NUSOAP'));
echo $result; // 輸出: Hello, NUSOAP
?>
NUSOAP 適合無法安裝 PHP SOAP 擴充套件的虛擬主機環境。
Hessian 採用二進位協定,效能優於 XML 為基礎的 SOAP。雖然嚴格說不屬於傳統 Web Service(缺乏 WSDL 等標準),但常被歸類為 RPC 解決方案。下載 HessianPHP v2.0.3,解壓後將 src 目錄重命名為 HessianPHP 並部署到兩端。
<?php
require_once('HessianPHP/HessianService.php');
class MyService {
public function multiply($a, $b) {
return $a * $b;
}
}
$server = new HessianService('MyService');
$server->handle();
?>
<?php
require_once('HessianPHP/HessianClient.php');
$client = new HessianClient('https://localhost/hessian/server.php');
$service = $client->getService('MyService');
echo $service->multiply(5, 6); // 輸出: 30
?>
HessianPHP 適合高效能、低頻寬的內部服務通訊,支援 Java、Python 等多語言互通。
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 原生 SOAP | 標準化、支援 WSDL、企業級 | XML 開銷大、配置複雜 | 異構系統整合、銀行/電信介接 |
| PHPRPC | 輕量、跨語言、自動 WSDL | 社群較小、文件較少 | 內部微服務、快速原型 |
| NUSOAP | 純 PHP、無需擴充套件 | 效能較差、維護停滯 | 虛擬主機、舊專案維護 |
| HessianPHP | 二進位高效、跨語言 | 非標準、除錯困難 | 高效能內部 RPC、多語言混合環境 |
根據專案需求選擇:追求標準相容選 SOAP,求輕量快速選 PHPRPC,受限環境用 NUSOAP,極致效能考慮 Hessian。