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

[经验分享] 实战WebService III: REST篇(基于php)

[复制链接]

尚未签到

发表于 2017-4-3 08:21:37 | 显示全部楼层 |阅读模式
REST是什么
REST是英文Representational State Transfer的缩写,中文翻译:表述性状态转移。
他是由Roy Thomas Fielding博士在他的论文 《Architectural Styles and the Design of Network-based Software Architectures》中提出的一个术语。

REST本身只是为分布式超媒体系统设计的一种架构风格,而不是标准.
Restful Web Service面向资源,不是面向动作(Action)

REST风格Web Service报文格式
什么,你一点都不懂我说什么?那么先看看Rest基本概念
有效的XML格式都可以说是Rest风格的报文。如YAHOO提供的Restful Web Service的一个例子 : http://api.search.yahoo.com/WebSearchService/V1/webSearch?query=%5C%22XML%20Query%5C%22&appid=YahooDemo
下面是访问后返回结果片断

<?xml version="1.0" encoding="UTF-8" ?>
<ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:yahoo:srch"
xsi:schemaLocation="urn:yahoo:srch http://api.search.yahoo.com/WebSearchService/V1/WebSearchResponse.xsd" type="web" totalResultsAvailable="575000"
totalResultsReturned="10" firstResultPosition="1" moreSearch="/WebSearchService/V1/webSearch?query=%5C%22XML+Query%5C%22&appid=YahooDemo&region=us">
<Result>
<Title>W3C XML Query (XQuery)</Title>
<Summary>Language that allows for flexible query facilities to extract data from real and virtual documents on the Web.</Summary>
<Url>http://www.w3.org/XML/Query</Url>
<ClickUrl>http://uk.wrs.yahoo.com/_ylt=A0Je5Vx_EWpHwV0AkC7dmMwF;_ylu=X3oDMTB2cXVjNTM5BGNvbG8DdwRsA1dTMQRwb3MDMQRzZWMDc3IEdnRpZAM-/SIG=11fuf4pkj/EXP=1198220031/**http%3A//www.w3.org/XML/Query</ClickUrl>
<DisplayUrl>www.w3.org/XML/Query</DisplayUrl>
<ModificationDate>1198051200</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>http://uk.wrs.yahoo.com/_ylt=A0Je5Vx_EWpHwV0AkS7dmMwF;_ylu=X3oDMTBwOHA5a2tvBGNvbG8DdwRwb3MDMQRzZWMDc3IEdnRpZAM-/SIG=16gufb4vc/EXP=1198220031/**http%
3A//66.218.69.11/search/cache%3Fei=UTF-8%26query=%255C%2522XML%2BQuery%255C%2522%26appid=YahooDemo%26u=www.w3.org/XML/Query%26w=%2522xml%2Bquery%2522%26d=DYOEo7XiP-1e%26icp=1%26.intl=us</Url>
<Size>58502</Size>
</Cache>
</Result>
<Result>
<Title>XQuery 1.0: An XML Query Language</Title>
<Summary>Don Chamberlin (XML Query WG), IBM Almaden Research Center, via http://www. ... has been developed by the W3C XML Query Working Group, which is part of the ...</Summary>
<Url>http://www.w3.org/TR/xquery/</Url>
<ClickUrl>http://uk.wrs.yahoo.com/_ylt=A0Je5Vx_EWpHwV0Aky7dmMwF;_ylu=X3oDMTB2ZjQ4dDExBGNvbG8DdwRsA1dTMQRwb3MDMgRzZWMDc3IEdnRpZAM-/SIG=11g15fbj0/EXP=1198220031/**http%3A//www.w3.org/TR/xquery/</ClickUrl>
<DisplayUrl>www.w3.org/TR/xquery/</DisplayUrl>
<ModificationDate>1169193600</ModificationDate>
<MimeType>text/html</MimeType>
<Cache>
<Url>http://uk.wrs.yahoo.com/_ylt=A0Je5Vx_EWpHwV0AlC7dmMwF;_ylu=X3oDMTBwZG5hOWwzBGNvbG8DdwRwb3MDMgRzZWMDc3IEdnRpZAM-/SIG=16hn3aelo/EXP=1198220031
/**http%3A//66.218.69.11/search/cache%3Fei=UTF-8%26query=%255C%2522XML%2BQuery%255C%2522%26appid=YahooDemo%26u=www.w3.org/TR/xquery/%26w=%2522xml%2Bquery%2522%26d=YBKWrbXiP9TA%26icp=1%26.intl=us</Url>
<Size>525624</Size>
</Cache>
</Result>
....
</ResultSet>
<!-- ws02.search.scd.yahoo.com compressed/chunked Wed Dec 19 22:53:51 PST 2007 -->

下面是我使用CakePhp(一个PHP框架)在本机构建了一个rest服务,
当访问http://localhost/hostel/rest/countries/listing 时,得到下面的XML

<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
<countries type='array'>
<country type='struct'>
<id>830</id>
<title>United States</title>
</country>
<country type='struct'>
<id>831</id>
<title>Canada</title>
</country>
....
</countries>
</rsp>

再次强调:Restful Web Service是一种风格,XML是任意的。不过最近好像出了WADL规范应用于Rest,好像WSDL规范SOAP一样,有空可以研究一下。
访问Restful Web Service(客户端代码)
再次确认,你理解了Restful?---风格,是一种风格,所以:
Restful webservice客户端像解析一般的xml一样,获得Restful Web Service返回的XML流,用DOM/SAX/SimpleXML解析它均可。
这里使用php的SimpleXML API操纵前面提到Yahoo服务。
SimpleXML 扩展适合于操纵不很复杂或者嵌套不太深并且没有混合内容的 XML 文档。SimpleXML 比 DOM 更容易编码,就像名称所暗示的那样。如果处理的文档结构已知,就更加直观。libXML2 架构的互操作性大大增强了 DOM 和 SimpleXML 的灵活性,能够随意在 DOM 和 SimpleXML 之间交换导入格式。
下面的代码使用 SimpleXML 扩展解析查询结果。

<?php
//This query does a search for any Web pages relevant to "XML Query"
$query = "http://api.search.yahoo.com/WebSearchService/V1/webSearch?"."query=%5C%22XML%20Query%5C%22&appid=YahooDemo";
$xml = simplexml_load_file($query);
// Load up the root element attributes
foreach($xml->attributes() as $name=>$attr) {
$res[$name]=$attr;
}
//Use one of those "informational" elements to display the total
//number of results for the query.
echo "<p>The query returns ".$res["totalResultsAvailable"]." total results The first 10 are as follows:</p>";
//Unlike with DOM, where we loaded the entire document into the result object,
// with SimpleXML, we get back an object in thefirst place,
// so we can just use the number of results returned to loop through the Result members.
for($i=0; $i<$res['totalResultsReturned']; $i++) {
//The object represents each piece of data as a member variable
//rather than an array element, so the syntax is a little bit
//different from the DOM version.
$thisResult = $xml->Result[$i];
echo "<a href='".$thisResult->ClickUrl."'><b>".
$thisResult->Title."</b></a>: ";
echo $thisResult->Summary;
echo "<br /><br />";
}
?>

输出结果类似如下HTML效果:
DSC0000.jpg
写一个自己的Restful Web Service
别嫌我啰嗦,再一次地,前面说过:Restful Web Service是任意的有效的XML。所以使用php/jsp等服务器端技术,不需要任何框架都可以生成你想要得XML流。如此说来:这个Restful Web Service例子也没什么好写的喽
CakePHP是一个基于PHP的web框架,提供了更好的输出Restful风格的Web Service的能力。Y有兴趣请看官方Cakephp文档

运维网声明 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-359365-1-1.html 上篇帖子: 学php编程,不再是菜鸟程序员 下篇帖子: PHP中设置、使用、删除Cookie方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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