龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

迷你REST客户端及服务器端

时间:2014-07-22 14:49来源: 作者: 点击:
分享到:
正在做的项目中要用到REST,项目中用到了REST和CURL两个库,这是我研究后自己简化的客户端及服务器端,请大家指正mini_rest_call.php 客户端rest_server.php 服务器端
正在做的项目中要用到REST,项目中用到了REST和CURL两个库,这是我研究后自己简化的客户端及服务器端,请大家指正

mini_rest_call.php 客户端
rest_server.php 服务器端
<?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 (http://www.piscdong.com/)
 */
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);
		}
	}
}

2. [文件] rest_server.php ~ 2KB     下载(18)     跳至 [1] [2] [全屏预览]

<?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 '<?xml version="1.0" encoding="utf-8"?><xml>';
	echo array2xml($return);
	echo '</xml>';
}
精彩图集

赞助商链接