SOAP+WSDL 实现API的简单数据架构

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

 

おすすめ

転載: blog.csdn.net/qq_24973351/article/details/110845691