前言
1. 本人一贯坚持党的正确领导并对美方的错误做法深表遗憾
2. 本笔记是从网络摘录, 不代表本人观点, 如有不和谐之处请指出我会主动删除相关内容.
3.
此解释权最终归本人所有
To create a resource on the server, use POST.
To retrieve a resource, use GET.
To change the state of a resource or to update it, use PUT.
To remove or delete a resource, use DELETE.
宗旨:
REST 从资源的角度来观察整个网络,分布在各处的资源由URI确定,而客户端的应用通过URI来获取资源的表形。获得这些表形致使这些应用程序转变了其状态。随着不断获取资源的表形,客户端应用不断地在转变着其状态,所谓表形化的状态转变(Representational State Transfer)。
要点及标准:
REST是一种设计风格而不是一个标准。REST通常基于使用HTTP,URI,和XML以及HTML这些现有的广泛流行的协议和标准。
资源是由URI来指定。对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
通过操作资源的表形来操作资源。资源的表现形式则是XML或者HTML,取决于是读者是机器还是人,
消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。
参考:
1. 深入浅出REST.
作者 ,译者 发布于 十二月 25, 2007
2. 如何获取(GET)一杯咖啡——星巴克REST案例分析
3. RESTful Web services: The basics
http://www.ibm.com/developerworks/webservices/library/ws-restful/?S_TACT=105AGX52&S_CMP=content
4. 迷你REST客户端和服务器端的代码示例
-
<?php
-
/**
-
* mini REST call
-
*
-
* @param mixed $url REST服务器端网址
-
* @param mixed $method 方法
-
* @param array $params 参数
-
* @param mixed $request 请求方式(get, post, put, delete)
-
* @param mixed $request 返回格式(json, xml)
-
*
-
* @author PiscDong ()
-
*/
-
function mini_rest_call($url, $method='', $params=array(), $request='get', $format='json'){
-
if(substr($url, -1)!='/' && substr($method, 0, 1)!='/')$url.='/';
-
$url.=$method;
-
$postfields=http_build_query($params);
-
if($format!='xml')$format='json';
-
if($request!='post' && $request!='put' && $request!='delete')$request='get';
-
$ci=curl_init();
-
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
-
curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
-
curl_setopt($ci, CURLOPT_TIMEOUT, 30);
-
switch($request){
-
case 'get':
-
$url.='?'.$postfields;
-
break;
-
case 'post':
-
curl_setopt($ci, CURLOPT_POST, TRUE);
-
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
-
break;
-
case 'put':
-
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'PUT');
-
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
-
$headers[]='X-HTTP-Method-Override: PUT';
-
break;
-
case 'delete': //未测试
-
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
-
curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
-
break;
-
}
-
$headers[]='User-Agent: mini_rest_client(piscdong.com)';
-
$headers[]='Accept: application/'.$format;
-
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
-
curl_setopt($ci, CURLOPT_URL, $url);
-
$response=curl_exec($ci);
-
curl_close($ci);
-
if($response!=''){
-
if($format=='json'){
-
return json_decode($response, true);
-
}else{
-
return simplexml_load_string($response);
-
}
-
}
-
}
-
<?php
-
function array2xml($array){
-
$xml='';
-
foreach($array as $k=>$v){
-
$xml.='<'.$k.'>';
-
if(is_array($v)){
-
$xml.=array2xml($v);
-
}else{
-
$xml.=$v;
-
}
-
$xml.=''.$k.'>';
-
}
-
return $xml;
-
}
-
-
$format='json';
-
if(isset($_SERVER['HTTP_ACCEPT']) && $_SERVER['HTTP_ACCEPT']=='application/xml')$format='xml';
-
$return['format']=$format;
-
-
$method='';
-
if(isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO']!=''){
-
if(substr($_SERVER['PATH_INFO'], 0, 1)=='/')$method=substr($_SERVER['PATH_INFO'], 1);
-
}
-
if($method!=''){
-
$return['method']=$method;
-
}else{
-
$return['method_err']='no method';
-
}
-
-
$request='';
-
if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']!=''){
-
switch($_SERVER['REQUEST_METHOD']){
-
case 'GET':
-
$request='get';
-
foreach($_GET as $k=>$v)$return['param_'.$k]=$v;
-
break;
-
case 'POST':
-
$request='post';
-
foreach($_POST as $k=>$v)$return['param_'.$k]=$v;
-
break;
-
case 'PUT':
-
$request='put';
-
$param=file_get_contents("php://input");
-
if($param!=''){
-
parse_str($param, $param_r);
-
foreach($param_r as $k=>$v)$return['param_'.$k]=$v;
-
}
-
break;
-
case 'DELETE':
-
$request='delete';
-
$param=file_get_contents("php://input");
-
if($param!=''){
-
parse_str($param, $param_r);
-
foreach($param_r as $k=>$v)$return['param_'.$k]=$v;
-
}
-
break;
-
}
-
}
-
if($request!=''){
-
$return['request']=$request;
-
}else{
-
$return['request_err']='no request';
-
}
-
-
if($format=='json'){
-
echo json_encode($return);
-
}else{
-
echo '';
-
echo array2xml($return);
-
echo '';
-
}
5.
6.
阅读(1377) | 评论(0) | 转发(0) |