当前位置:首页 > PHP教程 > php高级应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-10 11:34:09 浏览: 评论:0 

这篇文章主要介绍了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头信息,如:

Content-Type: application/json; charset=utf-8

Content-Type: application/xml; charset=utf-8

Content-Type: text/html; charset=utf-8

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

  1. <?php 
  2. // 请求初始化 
  3. $url = 'https://www.phpfensi.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.  { 
  57.  // 利用 substr 去掉 开始 与 结尾 的 " 
  58.  $data_fields = explode('","', trim(substr($row, 1, -1))); 
  59.  if (count($data_fields) === count($headings)) 
  60.  { 
  61.   $data[] = array_combine($headings$data_fields); 
  62.  } 
  63.  } 
  64.  
  65.  return $data
  66.  
  67. /** 
  68.  * 格式化json输出 
  69.  */ 
  70. function _json($string
  71.  return json_decode(trim($string), true); 
  72.  
  73. /** 
  74.  * 反序列化输出 
  75.  */ 
  76. function _serialize($string
  77.  return unserialize(trim($string)); 
  78.  
  79. /** 
  80.  * 执行PHP脚本输出 
  81.  */ 
  82. function _php($string
  83.  $string = trim($string); 
  84.  $populated = array(); 
  85.  eval("\$populated = \"$string\";"); 
  86.  
  87.  return $populated
  88. }

Tags: PHP自动识别 Restful

分享到: