首页 > 开发 > PHP > 正文

PHP实现自动识别Restful API的返回内容类型

2024-05-04 23:30:58
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP实现自动识别Restful API的返回内容类型,并实现自动自动渲染成 json、xml、html、serialize、csv、php等数据格式输出,需要的朋友可以参考下

如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据?

其实这也不难,因为Rest API也是基于http协议的,只要我们按照协议走,就能做到自动化识别 API 的内容,方法如下:

1、API服务端要返回明确的 http Content-Type头信息,如:

 

 
  1. Content-Type: application/json; charset=utf-8 
  2. Content-Type: application/xml; charset=utf-8 
  3. Content-Type: text/html; charset=utf-8 

2、PHP端(客户端)接收到上述头信息后,再酌情自动化处理,参考代码如下:

 

  1. <?php 
  2. // 请求初始化 
  3. $url = 'http://www.vevb.com'
  4. $ch = curl_init(); 
  5. curl_setopt($ch, CURLOPT_URL, $url); 
  6. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  7. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30); 
  8.  
  9. // 返回的 http body 内容 
  10. $response = curl_exec($ch); 
  11.  
  12. // 返回的 http header 的 Content-Type 的内容 
  13. $contentType = curl_getinfo($ch'content_type'); 
  14.  
  15. // 关闭请求资源 
  16. curl_close($ch); 
  17.  
  18. // 结果自动格式输出 
  19. $autoDetectFormats = array
  20. 'application/xml' => 'xml'
  21. 'text/xml' => 'xml'
  22. 'application/json' => 'json'
  23. 'text/json' => 'json'
  24. 'text/csv' => 'csv'
  25. 'application/csv' => 'csv'
  26. 'application/vnd.php.serialized' => 'serialize' 
  27. ); 
  28.  
  29. if (strpos($contentType';')) 
  30. list($contentType) = explode(';'$contentType); 
  31.  
  32. $contentType = trim($contentType); 
  33.  
  34. if (array_key_exists($contentType$autoDetectFormats)) 
  35. echo '_' . $autoDetectFormats[$contentType]($response); 
  36.  
  37. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
  38. // 常用 格式化 方法 
  39. //+++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
  40.  
  41. /** 
  42. * 格式化xml输出 
  43. */ 
  44. function _xml($string
  45. return $string ? (array)simplexml_load_string($string'SimpleXMLElement', LIBXML_NOCDATA) : array(); 
  46.  
  47. /** 
  48. * 格式化csv输出 
  49. */ 
  50. function _csv($string
  51. $data = array(); 
  52.  
  53. $rows = explode("/n", trim($string)); 
  54. $headings = explode(','array_shift($rows)); 
  55. foreach$rows as $row ) 
  56. // 利用 substr 去掉 开始 与 结尾 的 " 
  57. $data_fields = explode('","', trim(substr($row, 1, -1))); 
  58. if (count($data_fields) === count($headings)) 
  59. $data[] = array_combine($headings$data_fields); 
  60.  
  61. return $data
  62.  
  63. /** 
  64. * 格式化json输出 
  65. */ 
  66. function _json($string
  67. return json_decode(trim($string), true); 
  68.  
  69. /** 
  70. * 反序列化输出 
  71. */ 
  72. function _serialize($string
  73. return unserialize(trim($string)); 
  74.  
  75. /** 
  76. * 执行PHP脚本输出 
  77. */ 
  78. function _php($string
  79. $string = trim($string); 
  80. $populated = array(); 
  81. eval("/$populated = /"$string/";"); 
  82.  
  83. return $populated
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表