文档章节

PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、ser

 蜗牛奔跑
发布于 2016/01/14 16:37
字数 525
阅读 30
收藏 0

如题,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端(客户端)接收到上述头信息后,再酌情自动化处理,参考代码如下:

view source?

001

<?php

002

// 请求初始化

003

$url = 'http://blog.snsgou.com/user/123456';

004

$ch = curl_init();

005

curl_setopt($ch, CURLOPT_URL, $url);

006

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

007

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);

008

 

009

// 返回的 http body 内容

010

$response = curl_exec($ch);

011

 

012

// 返回的 http header 的 Content-Type 的内容

013

$contentType = curl_getinfo($ch, 'content_type');

014

 

015

// 关闭请求资源

016

curl_close($ch);

017

 

018

// 结果自动格式输出

019

$autoDetectFormats = array(

020

    'application/xml'   => 'xml',

021

    'text/xml'          => 'xml',

022

    'application/json'  => 'json',

023

    'text/json'         => 'json',

024

    'text/csv'          => 'csv',

025

    'application/csv'   => 'csv',

026

    'application/vnd.php.serialized' => 'serialize'

027

);

028

 

029

if (strpos($contentType, ';'))

030

{

031

    list($contentType) = explode(';', $contentType);

032

}

033

 

034

$contentType = trim($contentType);

035

 

036

if (array_key_exists($contentType, $autoDetectFormats))

037

{

038

    echo '_' . $autoDetectFormats[$contentType]($response);

039

}

040

 

041

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

042

// 常用 格式化 方法

043

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++

044

 

045

/**

046

 * 格式化xml输出

047

 */

048

function _xml($string)

049

{

050

    return $string ? (array)simplexml_load_string($string, 'SimpleXMLElement', LIBXML_NOCDATA) : array();

051

}

052

 

053

/**

054

 * 格式化csv输出

055

 */

056

function _csv($string)

057

{

058

    $data = array();

059

 

060

    $rows = explode("\n", trim($string));

061

    $headings = explode(',', array_shift($rows));

062

    foreach( $rows as $row )

063

    {

064

        // 利用 substr 去掉 开始 与 结尾 的 "

065

        $data_fields = explode('","', trim(substr($row, 1, -1)));

066

        if (count($data_fields) === count($headings))

067

        {

068

            $data[] = array_combine($headings, $data_fields);

069

        }

070

    }

071

 

072

    return $data;

073

}

074

 

075

/**

076

 * 格式化json输出

077

 */

078

function _json($string)

079

{

080

    return json_decode(trim($string), true);

081

}

082

 

083

/**

084

 * 反序列化输出

085

 */

086

function _serialize($string)

087

{

088

    return unserialize(trim($string));

089

}

090

 

091

/**

092

 * 执行PHP脚本输出

093

 */

094

function _php($string)

095

{

096

    $string = trim($string);

097

    $populated = array();

098

    eval("\$populated = \"$string\";");

099

 

100

    return $populated;

101

}

 


本文转载自:

粉丝 38
博文 615
码字总数 118352
作品 0
海淀
私信 提问
如何用Google APIs和Google的应用系统进行集成(5)----如何把Google Tasks的JSON Schema转换成XML的Schema(XSD)?

前面说了一些Google API的介绍,但是在实际的开发当中,我们可能需要把Google RESTful API返回的JSON数据转换成XML数据输入到第三方系统,这在企业应用集成里面非常的常见。那么里面就有一个...

chancein007
2014/06/09
0
0
论如何用JFinal搭建一个上手就能用的RESTful风格后台开发框架

JFinal,重新定义新国货。 目录 JFinal 概述 JFinal 特点 第一个JFinal项目 注意事项 <手动折叠> 一、JFinal概述 JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、...

Leaomato
2016/12/02
127
0
swagger入门和实践(含docker部署swagger)

简介 Swagger 是最流行的 API 开发工具,它遵循 OpenAPI Specification(OpenAPI 规范,也简称 OAS)。 Swagger 可以贯穿于整个 API 生态,如 API 的设计、编写 API 文档、测试和部署。 Swag...

数据架构师
2018/09/23
0
0
如何处理JSON中的特殊字符

这篇文章主要介绍了如何处理JSON中的特殊字符,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 JSON 是适用于 Ajax 应用程序的一种有效格式,原因是它使 Java...

码农般的学良
2016/12/01
14
0
在Eclipse中使用Jersey和Tomcat构建RESTful WebService及其调用

在Eclipse中使用Jersey和Tomcat构建RESTful WebService及其调用 RESTful Web 服务简介 REST 在 2000 年由 Roy Fielding 在博士论文中提出,他是 HTTP 规范 1.0 和 1.1 版的首席作者之一。 RE...

Carl_
2015/05/13
593
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周二乱弹 —— 他只能用这个办法劝你注意身体了

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @-冰冰棒- :#今日歌曲推荐# Kodaline《High Hopes》 《High Hopes》- Kodaline 手机党少年们想听歌,请使劲儿戳(这里) @xiaoshiyue :仙女...

小小编辑
22分钟前
682
14
Spring Boot Actuator 整合 Prometheus

简介 Spring Boot 自带监控功能 Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等。这一节结合 Prometheus 、Grafana 来更加直观...

程序员果果
31分钟前
9
0
Linux文件查找命令详解

对于文件查找,我们最好用的还是属于find命令了,在说find命令之前,先把另外几个查找命令介绍一下。 目录 0x01 查询命令介绍 0x02 find命令介绍 0x01 查询命令介绍 在介绍之前,首先先了解一...

无心的梦呓
32分钟前
6
0
快速掌握的测试用例优先级划分方法

怎么样的设计才能算测试用例 引自:IEEE Standard 610 (1990): A set of test inputs, execution conditions, and expected results developed for a particular objective, such as to exe......

测者陈磊
35分钟前
4
0
[mycat]Attribute value "roadNodeId,version" of type NMTOKEN must be a name token

不能逗号配两个字段的主键 primaryKey="roadNodeId,version" Caused by: io.mycat.config.util.ConfigException: org.xml.sax.SAXParseException; lineNumber: 7; columnNumber: 105; Attrib......

Danni3
41分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部