PHP实现自动识别Restful API的返回内容类型
如题,PHP如何自动识别第三方RestfulAPI的内容,自动渲染成json、xml、html、serialize、csv、php等数据?
其实这也不难,因为RestAPI也是基于http协议的,只要我们按照协议走,就能做到自动化识别API的内容,方法如下:
1、API服务端要返回明确的httpContent-Type头信息,如:
Content-Type:application/json;charset=utf-8 Content-Type:application/xml;charset=utf-8 Content-Type:text/html;charset=utf-8
2、PHP端(客户端)接收到上述头信息后,再酌情自动化处理,参考代码如下:
<?php
//请求初始化
$url='https://www.nhooo.com';
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);
//返回的httpbody内容
$response=curl_exec($ch);
//返回的httpheader的Content-Type的内容
$contentType=curl_getinfo($ch,'content_type');
//关闭请求资源
curl_close($ch);
//结果自动格式输出
$autoDetectFormats=array(
'application/xml'=>'xml',
'text/xml'=>'xml',
'application/json'=>'json',
'text/json'=>'json',
'text/csv'=>'csv',
'application/csv'=>'csv',
'application/vnd.php.serialized'=>'serialize'
);
if(strpos($contentType,';'))
{
list($contentType)=explode(';',$contentType);
}
$contentType=trim($contentType);
if(array_key_exists($contentType,$autoDetectFormats))
{
echo'_'.$autoDetectFormats[$contentType]($response);
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
//常用格式化方法
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++
/**
*格式化xml输出
*/
function_xml($string)
{
return$string?(array)simplexml_load_string($string,'SimpleXMLElement',LIBXML_NOCDATA):array();
}
/**
*格式化csv输出
*/
function_csv($string)
{
$data=array();
$rows=explode("\n",trim($string));
$headings=explode(',',array_shift($rows));
foreach($rowsas$row)
{
//利用substr去掉开始与结尾的"
$data_fields=explode('","',trim(substr($row,1,-1)));
if(count($data_fields)===count($headings))
{
$data[]=array_combine($headings,$data_fields);
}
}
return$data;
}
/**
*格式化json输出
*/
function_json($string)
{
returnjson_decode(trim($string),true);
}
/**
*反序列化输出
*/
function_serialize($string)
{
returnunserialize(trim($string));
}
/**
*执行PHP脚本输出
*/
function_php($string)
{
$string=trim($string);
$populated=array();
eval("\$populated=\"$string\";");
return$populated;
}