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实现的单一入口应用程序实例分析

    这里给出”php实现的单一入口应用程序实例分析”的完整攻略。 什么是单一入口应用程序 单一入口应用程序是指,所有请求都经过一个入口文件进行处理,这样能够更好的管理和维护项目的路由。 单一入口应用程序实现 创建项目文件夹 创建一个项目文件夹,里面包含index.php文件作为入口文件和controller文件夹用来存放控制器。 project/ ├── ind…

    PHP 2023年5月23日
    00
  • php单文件版在线代码编辑器

    介绍 php单文件版在线代码编辑器是一个简单的在线代码编辑器,可以帮助用户编写、测试和调试PHP、HTML、CSS和JavaScript代码,而无需离开网站。它的主要优点是轻量级和易于使用。 安装和配置 安装过程非常简单,只需要将单文件版在线代码编辑器的文件直接下载并提取到网站目录中。然后,我们需要进行一些基本的配置,以确保在线编辑器正常工作。 打开conf…

    PHP 2023年5月23日
    00
  • 在PHP中读取和写入WORD文档的代码

    要在PHP中读取和写入WORD文档,我们可以使用第三方库PHPWord。以下是详细的攻略: 1. 安装PHPWord 可以通过Composer安装PHPWord: composer require phpoffice/phpword 安装好后,我们需要在PHP代码中引入library: require_once ‘vendor/autoload.php’; …

    PHP 2023年5月26日
    00
  • PHP 读取Postgresql中的数组

    要在PHP中读取PostgreSQL中的数组,需要按照以下步骤进行操作: 编写SQL查询语句 首先需要编写一条SQL查询语句,来获取PostgreSQL数组中的值。例如,假设你有一个名为”pets”的数组,它包含了每种宠物的名称和年龄,那么你可以使用以下查询语句来获取这个数组中包含的宠物名称: SELECT pets->>’name’ AS pe…

    PHP 2023年5月26日
    00
  • PHP语法速查表

    下面是“PHP语法速查表”的完整攻略。 简介 “PHP语法速查表”是一个简洁明了的PHP语法速查表,它可以帮助PHP开发者快速查找各种常用语法及特性。 页面结构 “PHP语法速查表”页面由三个部分组成: 页头 页头包括一个标题及一张图片(可选),通常用于展示网站的名称及 logo 等信息。 <!DOCTYPE html> <html>…

    PHP 2023年5月24日
    00
  • php小技巧之过滤ascii控制字符

    PHP小技巧之过滤ASCII控制字符 前言 在编写PHP代码时,为了保证程序安全性和健壮性,通常需要对用户提交的数据进行过滤和验证。而其中比较常见的需求之一就是过滤ASCII控制字符。 ASCII控制字符是指ASCII字符集中的0-31和127号字符,包括换行符、回车符、制表符等不可见字符和控制字符。这些字符在页面中显示出来通常没有意义,而且可能会对代码的安…

    PHP 2023年5月26日
    00
  • PHP页面间传递参数实例代码

    当我们构建一个复杂的网站时,经常需要在不同的页面之间传递数据。PHP页面间传递参数是一种常用的方式,可以帮助我们实现数据共享。 下面是两个示例说明: 示例1 – GET方法传参 从页面A跳转到页面B <!– 在页面A中使用超链接跳转到页面B,并传入参数 –> <a href="pageB.php?name=Tom&ag…

    PHP 2023年5月23日
    00
  • PHP实现的策略模式示例

    下面给您讲解一下“PHP实现的策略模式示例”的完整攻略。 首先,什么是策略模式? 策略模式是一种行为设计模式,可以让一组算法在运行时动态切换,使得算法可以独立于使用它们的客户端而变化。策略模式通常涉及以下几个角色: Context(上下文):环境,负责组合策略和维护它们之间的关系 Strategy(策略):策略的抽象基础,通常定义一个算法家族,这些算法具有可…

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