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; }