Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1511264
  • 博文数量: 129
  • 博客积分: 1449
  • 博客等级: 上尉
  • 技术积分: 3048
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-24 18:36
文章分类

全部博文(129)

文章存档

2015年(3)

2014年(20)

2013年(65)

2012年(41)

分类: 项目管理

2013-09-11 08:20:05

前言
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客户端和服务器端的代码示例

点击(此处)折叠或打开

  1. <?php
  2. /**
  3.  * mini REST call
  4.  *
  5.  * @param mixed $url REST服务器端网址
  6.  * @param mixed $method 方法
  7.  * @param array $params 参数
  8.  * @param mixed $request 请求方式(get, post, put, delete)
  9.  * @param mixed $request 返回格式(json, xml)
  10.  *
  11.  * @author PiscDong ()
  12.  */
  13. function mini_rest_call($url, $method='', $params=array(), $request='get', $format='json'){
  14.     if(substr($url, -1)!='/' && substr($method, 0, 1)!='/')$url.='/';
  15.     $url.=$method;
  16.     $postfields=http_build_query($params);
  17.     if($format!='xml')$format='json';
  18.     if($request!='post' && $request!='put' && $request!='delete')$request='get';
  19.     $ci=curl_init();
  20.     curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE);
  21.     curl_setopt($ci, CURLOPT_RETURNTRANSFER, 1);
  22.     curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 30);
  23.     curl_setopt($ci, CURLOPT_TIMEOUT, 30);
  24.     switch($request){
  25.         case 'get':
  26.             $url.='?'.$postfields;
  27.             break;
  28.         case 'post':
  29.             curl_setopt($ci, CURLOPT_POST, TRUE);
  30.             curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
  31.             break;
  32.         case 'put':
  33.             curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'PUT');
  34.             curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
  35.             $headers[]='X-HTTP-Method-Override: PUT';
  36.             break;
  37.         case 'delete': //未测试
  38.             curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE');
  39.             curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields);
  40.             break;
  41.     }
  42.     $headers[]='User-Agent: mini_rest_client(piscdong.com)';
  43.     $headers[]='Accept: application/'.$format;
  44.     curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
  45.     curl_setopt($ci, CURLOPT_URL, $url);
  46.     $response=curl_exec($ci);
  47.     curl_close($ci);
  48.     if($response!=''){
  49.         if($format=='json'){
  50.             return json_decode($response, true);
  51.         }else{
  52.             return simplexml_load_string($response);
  53.         }
  54.     }
  55. }

点击(此处)折叠或打开

  1. <?php
  2. function array2xml($array){
  3.     $xml='';
  4.     foreach($array as $k=>$v){
  5.         $xml.='<'.$k.'>';
  6.         if(is_array($v)){
  7.             $xml.=array2xml($v);
  8.         }else{
  9.             $xml.=$v;
  10.         }
  11.         $xml.='.$k.'>';
  12.     }
  13.     return $xml;
  14. }

  15. $format='json';
  16. if(isset($_SERVER['HTTP_ACCEPT']) && $_SERVER['HTTP_ACCEPT']=='application/xml')$format='xml';
  17. $return['format']=$format;

  18. $method='';
  19. if(isset($_SERVER['PATH_INFO']) && $_SERVER['PATH_INFO']!=''){
  20.     if(substr($_SERVER['PATH_INFO'], 0, 1)=='/')$method=substr($_SERVER['PATH_INFO'], 1);
  21. }
  22. if($method!=''){
  23.     $return['method']=$method;
  24. }else{
  25.     $return['method_err']='no method';
  26. }

  27. $request='';
  28. if(isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD']!=''){
  29.     switch($_SERVER['REQUEST_METHOD']){
  30.         case 'GET':
  31.             $request='get';
  32.             foreach($_GET as $k=>$v)$return['param_'.$k]=$v;
  33.             break;
  34.         case 'POST':
  35.             $request='post';
  36.             foreach($_POST as $k=>$v)$return['param_'.$k]=$v;
  37.             break;
  38.         case 'PUT':
  39.             $request='put';
  40.             $param=file_get_contents("php://input");
  41.             if($param!=''){
  42.                 parse_str($param, $param_r);
  43.                 foreach($param_r as $k=>$v)$return['param_'.$k]=$v;
  44.             }
  45.             break;
  46.         case 'DELETE':
  47.             $request='delete';
  48.             $param=file_get_contents("php://input");
  49.             if($param!=''){
  50.                 parse_str($param, $param_r);
  51.                 foreach($param_r as $k=>$v)$return['param_'.$k]=$v;
  52.             }
  53.             break;
  54.     }
  55. }
  56. if($request!=''){
  57.     $return['request']=$request;
  58. }else{
  59.     $return['request_err']='no request';
  60. }

  61. if($format=='json'){
  62.     echo json_encode($return);
  63. }else{
  64.     echo '';
  65.     echo array2xml($return);
  66.     echo '';
  67. }

5. 

6. 



阅读(1377) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~