WebService和WebAPI以及Webervice的应用框架

1、TCP、UDP、HTTP与Soap协议

TCP

面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于端到端的通讯。

  • TCP提供的是一种可靠的数据流服务。
  • 采用“带重传的肯定确认”技术来实现传输的可靠性。
  • TCP还采用一种称为“滑动窗口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。

UDP

面向无连接的通讯协议,UDP数据包括目的端口号和源端口号信息,由于通讯不需要连接,所以可以实现广播发送。

  • UDP通讯时不需要接收方确认,属于不可靠的传输,可能会出现丢包现象,实际应用中要求程序员编程验证。

HTTP

是一个通信协议,通过网络传输信息。

SOAP

是一个基于XML的协议交换消息,可以使用HTTP来传输这些信息。事实上HTTP是SOAP消息的最常见的传输工具。

关系

  1. soap将信息进行XML的序列化后,再用http协议的方式再打包进行传送,传送的方式还是tcp或者udp。做个比喻就好理解了。tcp 和 udp 都是公路,暂且把tcp认为是一般公路,udp高速公路,soap和http就都是汽车,那么soap和http都可以在tcp和udp上跑。说soap可以通过http来传送,实际就是说soap是小轿车,http是装轿车的卡车,把soap的信息装到http里面,然后再运输,当然走的道路还是tcp或udp。说soap可以通过http协议来传输,这句话不太准确,比较准确第说法是:soap信息可以通过http协议包装后通过tcp或udp传输。
  2. SOAP被描述为:简单的对象访问协议,简单对象访问协议(SOAP)是一种轻量的、简单的、基于 XML 的协议,它被设计成在 WEB 上交换结构化的和固化的信息。 SOAP 可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议( HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。它还支持从消息系统到远程过程调用(RPC)等大量的应用程序。SOAP协议可以简单地理解为:SOAP=RPC+HTTP+XML,即采用HTTP作为通信协议,RPC(Remote Procedure Call Protocol  远程过程调用协议)作为一致性的调用途径,XML作为数据传送的格式,从而允许服务提供者和服务客户经过防火墙在Internet上进行通信交互。

SOAP与HTTP的区别

  • 都是底层的通信协议,请求包的格式不同,soap包是XML格式,http纯文本格式
  • soap 的 可以传递结构化的 数据,http只能传输纯文本数据;
  • SOAP:简单对象访问协议             http是标准超文本传输协议
  • SOAP相对http(post/get)由于要进行xml解析,速度可能会有所降低。 

2、webservice接口与HTTP接口

2.1、webservice接口测试:

测试webservice接口,可以使用soapUI来进行测试,下面简单用soapUI来调用webservice接口:

      1.打开soapUI,新建一个soap工程:

2.我们以天气预报的wsdl地址为例,导入soapUI查看其中的所有接口信息;

   wsdl地址 http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl

3、查看接口及报文,输入参数直接进行调用

发送报文:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://WebXml.com.cn/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:getSupportCity>
         <!--Optional:-->
         <web:byProvinceName>北京</web:byProvinceName>
      </web:getSupportCity>
   </soapenv:Body>
</soapenv:Envelope>

接收报文:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
   <soap:Body>
      <getSupportCityResponse xmlns="http://WebXml.com.cn/">
         <getSupportCityResult>
            <string>北京 (54511)</string>
            <string>上海 (58367)</string>
            <string>天津 (54517)</string>
            <string>重庆 (57516)</string>
         </getSupportCityResult>
      </getSupportCityResponse>
   </soap:Body>
</soap:Envelope>
  • 1、根元素:Envelope。
  • 2、Header元素::不是强制出现,由程序员控制,主要用于携带一些额外的信息,比如用户名、密码
  • 3、Body:调用正确,body元素内容应该遵守WSDL要求的格式。

2.2、HTTP接口

     这里不再做详细介绍,就是我们常用的post、get、delete、put等接口,结果返回状态和json。例如使用postman测试:

  • http://api.xxxxxxxx.com:6895/api/live/stop
  • 返回结果如下:
{ 
     "errcode" : "0", 
     "errdesc" : "OK"
 }

3、php中四种webservice实现的简单架构方法及实例

3.1、PHP本身的SOAP

所有的webservice都包括服务端(server)和客户端(client)。要使用php本身的soap首先要把该拓展安装好并且启用。下面看具体的code

服务端

<?php   
class test   
{   
    function show()   
    {   
        return 'the data you request!';   
    }   
}   
function getUserInfo($name)   
{   
    return 'fbbin';   
}   
//实例化的参数手册上面有,这个是没有使用wsdl的,所以第一个参数为null,如果有使用wsdl,那么第一个参数就是这个wsdl文件的地址。   
$server = new SoapServer(null, array('uri' ='http://soap/','location'='http://localhost/test/server.php'));   
$server->setClass('test');   
//$server->addFunction('getUserInfo');   
$server->handle();   
?>

客户端

$soap = new SoapClient(null, array('location'='http://localhost/test/server.php','uri' ='http://soap/'));     
  
echo $soap->show();   
//得到:'the data you request!'   
  
//echo $soap->getUserInfo('sss');  

3.2、PHPRPC

首先到官网(http://www.phprpc.org/zh_CN/ )上面去下载最新版的phprpc,解压之后会有相关的文件,我们把文件进行划分(服务端和客户端文件)如下

服务端文件

dhparams   
dhparams.php   
phprpc_server.php   
bigint.php   
compat.php   
phprpc_date.php   
xxtea.php

客户端文件

phprpc_client.php   
bigint.php   
compat.php   
phprpc_date.php   
xxtea.php 

我们把服务端文件放在服务端文件夹中,然后把客户端文件放在客户端文件夹中,之后再服务端文件夹中新建个文件(server.php)作为服务,然后再客户端新建个文件(client.php)作为客户端,各自代码如下:

//服务端: 
include_once"phprpc_server.php"; //加载phprpc文件   
$server = new PHPRPC_Server();   
$server->add('getUser');   
$server->setDebugMode(true);   
$server->start();   
function getUser( )   
{   
    return ‘the data you request!’;   
}   
  
//客户端:   
include_once "phprpc_client.php";   
$client = new PHPRPC_Client('http://127.0.0.1/phpservice/phprpcserver/server.php');   
$data = $client->getUser();   
var_dump($data);   
//得到:the data you request!

3.3、开源的NUSOAP

首先到网上去下载最新版的nusoap,现在的最新版本是0.9.5的,解压之后会得到一个lib文件夹,把这个文件分别放到服务端和客户端各一份,然后再服务端和客户端分别建立server.php和client.php文件,作为通信文件。

//服务端
ini_set("soap.wsdl_cache_enabled", 0);//关闭缓存   
require_once("lib/nusoap.php"); //加载nusoap文件   
$server = new soap_server;   
$server->configureWSDL('nusoasp');//设定服务的名称,使用的wsdl来通信,如果不适用wsdl将会更简单,网上有很多的例子   
$server->register('getUserInfo', array('name'="xsd:string", 'email'="xsd:string"), array('return'="xsd:string"));   
$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';   
$server->service( $HTTP_RAW_POST_DATA );   
function getUserInfo($name, $email)   
{   
    return ‘the data you request!’;   
}  


//客户端
require_once("lib/nusoap.php");   
$client = new soapclient('http://localhost/phpservice/nusoapserver/server.php?wsdl');   
$pagram = array('fbbin', 'fbbin@foxmail.com');   
$string = $client->call('getUserInfo', $pagram);   
//得到:the data you request!  

3.4、HessianPHP

hessian其实我个人认为他不是一个webservice,只能说是类似而已。因为它不具备webservice的那些特性。它支持的语言比较多我们现在只需要研究php版本的HessianPHP就行了,下载最新版本是v2.0.3的,解压之后会得到一个src的目录,这个目录使我们需要使用的一个核心文件夹。
我们把名字重命名为HessianPHP然后分别分别放到server和client端,然后分别建立server.php和client.php文件。

//服务端
include_once 'HessianPHP/HessianService.php';//加载核心文件   
class TestService   
{   
    public function __construct()   
    {   
  
    }   
  
    public function add($numa, $numb)   
    {   
        return $numa + $numb;   
    }   
  
    public function check()   
    {   
        return 'leroiliu@163.com';   
    }   
}   
$test = new TestService();   
$hessian = new HessianService( $test, array('displayInfo' => true) );   
$hessian->handle();//注意这里不是网上的$hessian->service(),可能是版本不一样,改了吧!我也是看了源码才知道!   


//客户端
include_once 'HessianPHP/HessianClient.php';   
$url = "http://localhost/phpservice/hessianserver/server.php";   
$options = new HessianOptions();   
$client = new HessianClient( $url, $options );   
$num = $client->add( 3, 5 );   
echo $num;//得到:8;   
echo $client->check();//得到:leroiliu@163.com;  

以上四种方式为web开发过程中常用到的webservice通信方式。用的最多的是nusoap,phprpc在性能上面和nusoap基本上差不多,只不过,phprpc在商业上是收费的。还有个hessianPHP采用的二进制方式传输数据流,其实也是各有千秋啊。更多的详细资料去找百度和谷歌吧。

 

 

 

 

参考资料:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值