PHP 开发 APP 接口 学习笔记与总结 - JSON 结合 XML 方式封装通信接口
要求:
1.在一个类中封装多种数据通信方法(JSON,XML),并且只通过一个入口选择需要的数据通信格式
2.客户端开发工程师可以自行选择数据传输格式(GET 方式)
response.php
<?php class Response{
const JSON = 'json';
//封装的综合方法,默认的数据类型为json
public static function show($code,$message = '',$data,$type = self::JSON){ if(!is_numeric($code)){
return '';
}
//供测试数组使用
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
);
//通过get参数判断通信数据类型
$typelist = array('json','xml','array'); // array为测试使用
if(isset($_GET['type'])){
if(in_array(strtolower($_GET['type']),$typelist)){
$type = strtolower($_GET['type']);
}else{
$type = self::JSON;
}
}else{
$type = self::JSON;
} if($type == 'json'){
self::json($code,$message = '',$data);
}else if($type == 'xml'){
self::xml($code,$message = '',$data);
}else if($type == 'array'){
var_dump($result); //仅供测试
}
} /**
* 按json方式输出通信数据
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* return string
*/
//设置静态方法
public static function json($code,$message = '',$data = array()){
if(!is_numeric($code)){
return '';
}
//状态码、信息、数据组成的新数组
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
); echo json_encode($result);
exit();
} /**
* 按 xml 方式输出通信数据
* @param integer $code 状态码
* @param string $message 提示信息
* @param array $data 数据
* return string
*/
public static function xml($code,$message,$data){ if(!is_numeric($code)){
return '';
} $result = array(
'code' => $code,
'message' => $message,
'data' => $data
); //修改 http 头信息
header("Content-Type:text/xml");
//xml头信息
$xml = "<?xml version='1.0' encoding='utf-8'?>";
//根节点开始标签
$xml .= "<root>"; $xml .= self::xmlToEncode($result); //根节点结束标签
$xml .= "</root>"; echo $xml;
exit();
} //解析$result至xml
public static function xmlToEncode($data){
$xml = $attr = "";
foreach($data as $k=>$v){
//如果$k是数字(data(code,message,data中的data)数据里面还含有索引数组),要进行如下判断
if(is_numeric($k)){
$attr = "id='{$k}'";
$k = 'item ';
} $xml .= "<{$k}{$attr}>";
//如果$v是数组,则递归调用该方法
if(is_array($v)){
$xml .= self::xmlToEncode($v);
}else{
$xml .= $v;
}
$xml .= "</{$k}>";
} return $xml;
}
}
test.php
<?php
require 'response.php'; $data = array(
'id'=>1,
'name'=>'Mary',
'type'=>array(1,3,6)
); Response::show(200,'数据返回成功',$data);
测试url:
http://127.0.0.17/php/APP/test.php
http://127.0.0.17/php/APP/test.php?type=json
http://127.0.0.17/php/APP/test.php?type=xml
http://127.0.0.17/php/APP/test.php?type=array
http://127.0.0.17/php/APP/test.php?type=XML (返回 xml 数据)
http://127.0.0.17/php/APP/test.php?type=arr (返回 json 数据)
PHP 开发 APP 接口 学习笔记与总结 - JSON 结合 XML 方式封装通信接口的更多相关文章
- PHP 开发 APP 接口 学习笔记与总结 - JSON 方式封装通信接口
1.通信数据的标准格式 ( JSON ),包括: code:状态码(200,400等) message:提示信息(例如:数据返回成功.邮箱格式错误等) data:返回数据 2.JSON 方式封装通信接 ...
- PHP开发APP接口学习笔记
习要点概述1.APP接口简介 2.封装通信接口方法 3.核心技术 4.APP接口实例 服务器和客户端进行接口数据通信:服务器 -->数据库|缓存 -->调用接口 -->客户端 服务器 ...
- PHP 开发 APP 接口 学习笔记与总结 - Redis 缓存
Redis 可以定期将数据备份到磁盘中(持久化),同时不仅仅支持简单的key/value 类型的数据,同时还提供list,set,hash等数据结构的存储:Memcache 只是简单的key/valu ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [2] 首页 APP 接口开发方案 ① 读取数据库方式
方案一:读取数据库方式 从数据库读取信息→封装→生成接口数据 应用场景: 数据时效性比较高的系统 方案二:读取缓存方式 从数据库获取信息(第一次设置缓存或缓存失效时)→封装(第一次设置缓存或缓存失效时 ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [5] 版本设计分析及数据表设计
APP 版本升级以及 APP 演示 ① 版本升级分析以及数据表设计 ② 版本升级接口开发以及 APP 演示 /** * version_upgrade 版本升级信息表 */ CREATE TABLE ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [3] 首页 APP 接口开发方案 ② 读取缓存方式
以静态缓存为例. 修改 file.php line:11 去掉 path 参数(方便),加上缓存时间参数: public function cacheData($k,$v = '',$cacheTim ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [7] APP 错误日志接口
APP 上线以后可能遇到的问题: ① APP 强退 ② 数据加载失败 ③ APP 潜在问题 错误日志需要记录的内容 数据表 error_log 字段: id app_id:app 类别 id did: ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [6] 版本升级接口开发
判定 app 是否需要加密:通过 app 表中的 status 字段来判定,加密的字符串为 app 表中的 key 字段. 在获取的客户端和服务器端(数据库表中相应字段)的版本号不一致时,返回 dat ...
- PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [4] 首页 APP 接口开发方案 ③ 定时读取缓存方式
用于 linux 执行 crontab 命令生成缓存的文件 crop.php <?php //让crontab 定时执行的脚本程序 require_once 'db.php'; require_ ...
随机推荐
- Instruments_Automation使用入门
Instruments 是应用程序用来动态跟踪和分析 Mac OS X 和 iOS 代码的实用工具. 这是一个灵活而强大的工具,它让你可以跟踪一个或多个进程,并检查收集的数据. 这样,Instrume ...
- tomcat The file is absent or does not have execute permission
[root@centos02 bin]# ./startup.sh Cannot find ./catalina.sh The file is absent or does not have exec ...
- C# Window Form播放音乐的4种方式
C#播放背景音乐通常有四种方式: 1.播放系统事件声音 2.使用System.Media.SoundPlayer播放wav------------------------仅仅是对波形音乐 3.使用MC ...
- 如何将消息发送给Whatsapp联系人
如何将消息发送给Whatsapp联系人 (由于本人喜欢word文档编辑,不喜欢网络编辑,所以仍然提供pdf版文档,方便查阅http://files.cnblogs.com/franksunny/sen ...
- BZOJ 1010: [HNOI2008]玩具装箱toy 斜率优化DP
1010: [HNOI2008]玩具装箱toy Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再 ...
- 【codevs2822】爱在心中 tarjan 缩点+理解
[codevs2822]爱在心中 2014年1月26日5580 题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸, ...
- Ajax 学习之创建XMLHttpRequest对象------Ajax的核心
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- NGUI创建Camera参数为Simple 2D的UI UI对象的结构UI Root(2D)
NGUI创建Camera参数为Simple 2D的UI UI对象的结构UI Root(2D) 使用NGUI创建的Camera参数为Simple 2D的UI,会在游戏的场景中生成1个名为UI Root( ...
- MP3/视频播放
简单的视频.MP3播放 <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equ ...
- 详解Adorner Layer(zz)
首先,千万不要觉得Adorner离你很远,因为最简单的WPF界面也会用到Adorner.在WPF中,下面的几个很常见的功能,都是用Adorner实现的. 1. 光标(caret) 2. ...