php实现webservice实例

1. 准备工作

在 php 中实现 webservice,需要先确认以下几点:

  • 确认 php 版本支持 SoapClient 模块。可以通过 phpinfo() 函数检查。
  • 编写 wsdl 文件,定义 webservice 的函数、参数和返回值等信息。

2. 创建 wsdl 文件

创建 webservice 所需的 wsdl 文件需要遵循 WSDL(Web Services Description Language)规范。wsdl 文件的内容很重要,它告诉调用方有哪些接口可用,接口的输入输出参数是什么。

示例 wsdl 文件如下:

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://example.com/stockquote.wsdl" targetNamespace="http://example.com/stockquote.wsdl">
  <message name="GetLastTradePriceInput">
    <part name="symbol" type="xsd:string"/>
  </message>
  <message name="GetLastTradePriceOutput">
    <part name="price" type="xsd:float"/>
  </message>
  <portType name="StockQuotePortType">
    <operation name="GetLastTradePrice">
      <input message="tns:GetLastTradePriceInput"/>
      <output message="tns:GetLastTradePriceOutput"/>
    </operation>
  </portType>
  <binding name="StockQuoteBinding" type="tns:StockQuotePortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="GetLastTradePrice">
      <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="StockQuoteService">
    <port name="StockQuotePort" binding="tns:StockQuoteBinding">
      <soap:address location="http://example.com/stockquote"/>
    </port>
  </service>
</definitions>

其中:

  • message 是方法的输入参数和输出参数。
  • portType 定义WebService的接口。operation指定了方法的细节,比如输入、输出类型等。
  • binding 指向并描述了特定的传输协议和消息封装方式(常用:soap:binding)。
  • service 定义 webservice 能够用哪些协议(bindings)访问,以及访问的具体位置。

3. 编写服务器端代码

php 中提供 SoapServer 类来实现服务器端代码。代码基本思路如下:

<?php
class StockQuote {
    /**
     * @param string $symbol
     * @return float
     */
    public function GetLastTradePrice($symbol) {
        // 实现具体的业务逻辑,进行数据处理
        $price = 10.0;
        return $price;
    }
}

$server = new SoapServer('stockquote.wsdl', array('soap_version' => SOAP_1_2));
$server->setClass('StockQuote');
$server->handle();

其中:

  • SoapServer() 构造函数中第一个参数指定 wsdl 文件的位置,第二个参数指定SOAP协议的版本。
  • setClass() 指定 webservice 中包装的具体类名称。
  • handle() 开始对外提供 webservice 接口,接收请求并返回结果。

4. 编写客户端代码

php 中提供 SoapClient 类来实现客户端代码。代码基本思路如下:

<?php
$client = new SoapClient("stockquote.wsdl",array(
        'location'=>'http://example.com/stockquote', 
        'uri'=>'http://example.com/stockquote'
    ));
$res = $client->GetLastTradePrice("GOOG");
echo $res;

其中:

  • SoapClient() 构造函数中第一个参数指定 wsdl 文件的位置,第二个参数指定 webservice 的端点地址和命名空间.。
  • $client->GetLastTradePrice() 表示调用webservice中的GetLastTradePrice方法,并传递"GOOG"参数。

5. 示例说明

以下示例基于一个简单的计算器 webservice,展示了服务器端代码和客户端代码。

wsdl 文件:

<?xml version="1.0" encoding="utf-8"?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://localhost/WebService/TestWebService.asmx" targetNamespace="http://localhost/WebService/TestWebService.asmx">
  <message name="AddOneInput">
    <part name="num" type="xsd:int"/>
  </message>
  <message name="AddOneOutput">
    <part name="result" type="xsd:int"/>
  </message>
  <portType name="TestWeb">
    <operation name="AddOne">
      <input message="tns:AddOneInput"/>
      <output message="tns:AddOneOutput"/>
    </operation>
  </portType>
  <binding name="TestWebSoap" type="tns:TestWeb">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <operation name="AddOne">
      <soap:operation soapAction="http://localhost/WebService/TestWebService.asmx/AddOne"/>
      <input>
        <soap:body use="literal"/>
      </input>
      <output>
        <soap:body use="literal"/>
      </output>
    </operation>
  </binding>
  <service name="TestWebService">
    <port name="TestWebSoap" binding="tns:TestWebSoap">
      <soap:address location="http://localhost/WebService/TestWebService.asmx"/>
    </port>
  </service>
</definitions>

服务器端代码:

<?php
require_once('lib/nusoap.php');

function AddOne($num)
{
    $num++;
    return array("result" => $num);
}

$server = new soap_server();
$server->configureWSDL('TestWebService', 'http://localhost/WebService/TestWebService.asmx');
$server->wsdl->schemaTargetNamespace = 'http://localhost/WebService/TestWebService.asmx';
$server->register('AddOne',
    array('num'=>'xsd:int'),
    array('result'=>'xsd:int'),
    'http://localhost/WebService/TestWebService.asmx',
    'http://localhost/WebService/TestWebService.asmx#AddOne',
    'rpc',
    'encoded',
    'Add one to input parameter and return');
$server->service(isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '');
?>

客户端代码:

<?php
require_once('lib/nusoap.php');

$num = 5;

$client = new nusoap_client('http://localhost/WebService/TestWebService.asmx?wsdl', true);
$result = $client->call('AddOne', array('num'=>$num));
echo ($result["result"]);
?>

以上就是实现 PHP 中 webservice 的完整攻略,其中包括了代码的编写流程和基本思路。可以根据实际需求进行相应的修改,实现自己的 webservice 接口。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现webservice实例 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 基于php在各种web服务器的运行模式详解

    基于PHP在各种Web服务器的运行模式详解 什么是Web服务器 Web服务器是一个软件应用程序,它接受来自客户端的HTTP请求,并发送响应回去。Web服务器通常部署在专用硬件中,例如Web服务器,但也可以运行在普通电脑上。Web服务器是创建Web应用程序的基础。 PHP与Web服务器 PHP是一种Web编程语言,它可以与不同的Web服务器协同工作,来创建We…

    PHP 2023年5月23日
    00
  • 十天学会php(2)

    我会从以下几个方面详细讲解“十天学会PHP(2)”的完整攻略: 学习目标 学习内容 学习步骤 示例说明 1. 学习目标 “十天学会PHP(2)”旨在帮助初学者深入学习PHP语言,掌握PHP常用的函数和技巧,掌握PHP面向对象编程的基础知识。 2. 学习内容 “十天学会PHP(2)”包含以下内容: PHP常用函数 PHP高级函数 PHP面向对象编程基础 3. …

    PHP 2023年5月30日
    00
  • php解决缓存击穿的问题

    缓存击穿是指缓存中没有的数据,而查询非常频繁的数据,导致大量的请求落到了数据库上,因此很容易导致数据库连接数暴增,甚至导致宕机。 下面是 PHP 解决缓存击穿问题的一般解决方案: // 获取 Key $key = ‘my_key’; // 根据 Key 从 Redis 中获取数据 $data = $redis->get($key); // 如果数据不存…

    PHP 2023年4月17日
    00
  • C#中Response.Write常见问题汇总

    下面是针对C#中Response.Write常见问题的攻略,包含以下内容: Response.Write简介 Response.Write是一种将数据写入响应输出流的方法,通常用于构建动态生成的网页、输出调试信息等。它可以将任何类型的数据作为字符串输出,包括整型、浮点型、布尔型、对象等。 Response.Write常见问题汇总 如何输出HTML标签? 可使…

    PHP 2023年5月27日
    00
  • php输出反斜杠的实例方法

    让我来详细讲解一下“PHP输出反斜杠的实例方法”的完整攻略。 什么是反斜杠? 首先,让我们来了解一下什么是反斜杠。在编程中,反斜杠(\)是一种特殊字符,它可以用来表示一些具有特殊意义的字符。例如,在PHP中,反斜杠可以用来转义一些特殊字符,如双引号、单引号、换行符等。 PHP输出反斜杠的实例方法 在PHP中,如果要输出反斜杠字符,可以使用双反斜杠(\\)来表…

    PHP 2023年5月26日
    00
  • php合并数组array_merge函数运算符加号与的区别

    PHP 中有两种合并数组的方式,分别是使用 array_merge 函数和数组运算符 +(加号)。 array_merge 函数 array_merge 函数会将多个数组合并成一个数组,返回的新数组中,所有的输入的数组的值都会保留,并以它们的原始键作为新数组的键。如果有相同的键,则后面的值会覆盖前面的值。 $firstArray = [‘a’, ‘b’, ‘…

    PHP 2023年5月26日
    00
  • 解析php中如何调用用户自定义函数

    在 PHP 中调用用户自定义函数的过程可以分为定义函数、调用函数两部分。 定义函数 函数声明 在 PHP 中定义函数需要使用关键字 function。函数名字可以是任何标识符,规范的命名方式通常是使用小写字母和下划线,推荐使用驼峰式命名法,并且不能以数字开头。接着是一对括号,括号内可以包括参数。最后是函数体,使用一对花括号括起来。 示例一:定义一个无参数无返…

    PHP 2023年5月27日
    00
  • PHP执行普通shell命令流程解析

    下面是PHP执行普通shell命令流程解析的完整攻略。 流程解析 PHP执行普通shell命令的流程分为以下几步: 使用PHP的系统调用函数system、exec、shell_exec、passthru或popen来执行shell命令,如:system(‘ls’)。 程序调用系统内核中的execve函数,该函数用于执行指定的可执行文件或shell命令,并将其…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部