设为首页 收藏本站
查看: 687|回复: 0

[经验分享] PHP中的WebService

[复制链接]

尚未签到

发表于 2015-8-28 09:19:52 | 显示全部楼层 |阅读模式
  Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。Web Service是自描述、 自包含的可用网络模块, 可以执行具体的业务功能。Web Service也很容易部署, 因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。Web Service减少了应用接口的花费。Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。[1]
  WSDL,网络服务描述语言是一个用来描述Web服务和说明如何与Web服务通信的XML(标准通用标记语言的子集)语言。为用户提供详细的接口说明书。[2]
  1、Seb Service 公共接口的使用
  Web Service技术应用已经非常广泛,使用java调用比较方便,在eclipse中新建Web Service Client根据向导配置即可,如图:
DSC0000.jpg
  在PHP中使用则相对比较复杂一点,网上也有朋友开源的PHP 写的WSDLInterpreter等,其实PHP自身有SoapClient类可以直接使用,下面的就是摘自http://www.zendstudio.net/[3]:



<?php
/**
* 从开放的天气预报服务中获得数据
*
**/
$c = new SoapClient( 'http://www.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl',
array( 'trace' => true, 'exceptions' => true ) );
//查看接口中的方法
//var_dump( $c->__getFunctions() );
//查看接口方法的使用
//var_dump( $c->__getTypes() );
//不需要参数的情况
$pr =$c->getRegionProvince();
//var_dump( $pr->getRegionProvinceResult->string );
//带有参数的情况
$scs = $c->getSupportCityString( array( 'theRegionCode' => '福建' ) );
var_dump( $scs->getSupportCityStringResult->string );
//也可以这样做
$we = $c->__call('getWeather', array( array( 'theCityCode' => 2210 ) ) );
var_dump( $we );
?>
  
  2、相关扩展
  (下面都是借花献佛的摘抄了)[3]
  1) 实现php的soapServer和SoapClient
服务端:



<?php
$ss = new SoapServer( null, array( 'uri' => 'http://zendstudio.Net' ) );
$ss->setClass( 't', '参数1', '参数2' );
$ss->handle();
//$request = file_get_contents( 'php://input' );
//file_put_contents( 'request.txt', $request );
class t{
function __construct( $p1, $p2 ){
}
function im8( $g ){
return 'OK----'. $g;
}
}
?>
  客户端:



<?php
$ss = new SoapClient( null, array( 'uri' => 'http://zendstudio.Net', 'location' => 'http://localhost/soap.php' ) );
$header = new SoapHeader( 'zendHeader', 'mmcYY', '12345678' );
$ss->__setSoapHeaders( $header );
echo $ss->im8( 'gently' );
?>
  
  2) 在php的soap客户端和服务端添加SoapHeader头
实例化一个SoapHeader,然后使用SoapServer的addSoapHeader方法添加进去即可,这个头一般是学习php soap的一个难点,通常我们做的最多的是用soap的方式和其他程序通信,用php如何构造soapheader显得有些不容易,以至于依赖于这个头的服务端总是返回不正确。
  3) 从php的服务端如何获取SoapHeader
这个大概就是很多人认为php对soap支持不完整的一个原因,目前的php版本无法直接获取SoapHeader,因此我想了一个笨方法,先通过使用php://input,获取所有POST上来的数据,然后使用正则表达式分离出SoapHeader的XML部分,然后再整理出想要的格式。
  另外,在PHP的SoapServer端可以通过转存$_SERVER和上面讲到的php://input获取soap的“原始”通信内容。
  
  参考:
  [1] Web Service[EB/OL].[2014-04-01].http://baike.baidu.com/link?url=61fuMHphEG7AgK40xVxpvVnT5dlJSqFEVGN9LpsRGGXg87sdw_clM7ov8SCOioVyAZH8ZtA1_3SAopPE5y2dza
  [2] WSDL[EB/OL].[2014-04-01].http://baike.baidu.com/link?url=HgL3uLMQMa8FF1Kwe5pmu_ejvmdzxXm3R0uT0P61LveNcdDYhfL7RRn0DaJZEKQZ
  [3] 入门级的讲讲soap这个php webservice[EB/OL].[2014-04-01].http://www.zendstudio.net/archives/php-webservice-soap/
  
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-105327-1-1.html 上篇帖子: php程序员面试题 下篇帖子: php验证码类(漂亮、实用)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表