API 的数据架构分为两种:
方式 1: SOAP+WSDL
SOAP 基于 XML的协议,它使应用程序通过 HTTP 或 HTTPS 来交换信息。
WSDL(Web Services Description Language,网络服务描述语言)是一门基于 XML 的语言, 用于描述 Web Services 以及如何对它们进行访问。 SOAP+WSDL 使用 XML 语言构建数据架构和封装数据,是传统的 Web Services 的实现方式。
方式 2: REST+JSON/Plain XML
REST 绕开了 SOAP,直接与 HTTP 或 HTTPS 建立了紧密联系,力求使用更简洁和轻盈的架构实现 web service。实施过程与 SOAP+WSDL 的过程是基本一致的。区别主要在于数据架构和网络协议。
本文主要讲解的是第一种SOAP+WSDL的简单数据架构,要实现一个SOAP 型的接口,有两种方式:一种有WSDL文件方式、一中无WSDL文件方式
一、没有WSDL文件方式
服务端代码如下(NoWsdlServer.php):
<?php
class NoWsdlServer{
private $authenticated = false;
public function getPowData($param){
$this->validate();
return '{"code":0,"res":'.pow($param,2).'}';
}
// 授权
public function auth($password)
{
if($password != '123456789'){
throw new SoapFault('Server', 'The password is incorrect');
}else{
$this->authenticated = true;
}
}
// 验证
public function validate(){
if(!$this->authenticated){
throw new SoapFault('403', '403 Forbidden');
}
}
}
$srv = new SoapServer(null, array('uri' => ''));
$srv->setClass('NoWsdlServer');
$srv->handle();
客户端如下(client.php):
<?php
$array = array(
'uri' => 'http://kongfu.site',
'location' => 'http://kongfu.site/NoWsdlServer.php',
'trace' => true,
'encoding'=>'utf-8',
);
$client = new SoapClient(null,$array);
//一个只包含构造器方法的数据容器
$header = new SoapHeader('http://kongfu.site', 'auth', '123456789', false, SOAP_ACTOR_NEXT);
$client->__setSoapHeaders(array($header));
try {
$param = 2;
echo $client->getPowData($param);
} catch (Exception $e) {
echo $e->getMessage();
}
运行client.php结果:4
二、有WSDL文件方式
1.先点击下载SoapDiscovery.class.php文件,用来自动生成WSDL文件。
2.先准备一个服务端文件(Service.php)文件,如下:
<?php
class Service {
public function Count($a, $b) {
return $a + $b;
}
}
2.创建createWsdl.php内容如下:
<?php
include("Service.php");
include("SoapDiscovery.class.php");
//第一个参数是类名(生成的wsdl文件就是以它来命名的),即Service类,第二个参数是服务的名字(这个可以随便写)。
$disco = new SoapDiscovery('Service', 'soap');
$disco->getWSDL();
运行后将生成一个Service.wsdl的文件。
3.在服务端(Service.php)加入实例化等语句,如下:
<?php
class Service {
public function Count($a, $b) {
return $a + $b;
}
}
$server = new SoapServer('Service.wsdl', array('soap_version' => SOAP_1_2));
//注册Service类的所有方法
$server->setClass("Service");
//处理请求
$server->handle();
4.创建客户端程序(client.php):
<?php
//关闭wsdl缓存
ini_set('soap.wsdl_cache_enabled', "0");
$soap = new SoapClient('http://kongfu.site/Service.php?wsdl');
echo $soap->Count(8,2);
运行client.php 结果 :10