创建一个简单的SOAP客户端
与实现REST客户端或服务器的过程相比,使用SOAP是非常容易的,因为有一个PHP SOAP扩展提供了这两种功能。
如何做...
在这个例子中,我们将对美国国家气象服务提供的现有SOAP服务进行SOAP请求。
1.首先要考虑的是识别WSDL文档。WSDL是描述服务的XML文档。
$wsdl = 'http://graphical.weather.gov/xml/SOAP_server/'
. 'ndfdXMLserver.php?wsdl';2.接下来,我们使用 WSDL 创建一个 soap 客户端实例。
$soap = new SoapClient($wsdl, array('trace' => TRUE));3.然后,我们可以自由地初始化一些变量,以应对天气预报的请求。
$units = 'm';
$params = '';
$numDays = 7;
$weather = '';
$format = '24 hourly';
$startTime = new DateTime();4. 然后,我们可以发出LatLonListCityNames()SOAP请求,在WSDL中被标识为一个操作,以获取服务支持的城市列表。该请求以 XML 格式返回,建议创建一个 SimpleXLMElement 实例。
$xml = new SimpleXMLElement($soap->LatLonListCityNames(1));5. 不幸的是,城市列表和它们对应的经纬度是在单独的XML节点中。因此,我们使用array_combine()PHP函数来创建一个关联数组,其中经纬度是键,城市名称是值。然后我们可以使用这个数组来呈现一个HTML SELECT下拉列表,使用asort()来对列表进行字母排序。
6. 然后,我们可以从网络请求中获得城市数据,如下所示。
7.我们希望进行的 SOAP 调用是 NDFDgenByDay()。我们可以通过检查 WSDL 来确定提供给 SOAP 服务器的参数的性质。
8. 如果$currentLatLon的值被设置,我们就可以处理这个请求。我们用 try {} catch {} 块来处理请求,以防出现异常。
如何运行...
将前面所有的代码复制到chap_07_simple_soap_client_weather_service.php文件中。然后你可以添加视图逻辑来显示城市列表的表单以及结果。
这是在浏览器中请求俄亥俄州克利夫兰市天气预报的结果。

参考
关于SOAP和REST之间的区别,请参考http://stackoverflow.com/questions/209905/representational-state-transfer-rest-and-simple-object-access-protocol-soap?lq=1。
最后更新于