php以json或者xml 形式返回给app。明白这点就很好说了,就是把数据包装成json或者xml,返回给APP

定义抽象APP基类:

  1. <?php
  2. /**
  3. * 定义API抽象类
  4. */
  5. abstract class Api {
  6. const JSON = 'Json';
  7. const XML = 'Xml';
  8. const ARR = 'Array';
  9. /**
  10. * 定义工厂方法
  11. * param string $type 返回数据类型
  12. */
  13. public static function factory($type = self::JSON) {
  14. $type = isset($_GET['format']) ? $_GET['format'] : $type;
  15. $resultClass = ucwords($type);
  16. require_once('./Response/' . $type . '.php');
  17. return new $resultClass();
  18. }
  19. abstract function response($code, $message, $data);
  20. }

以xml形式返回给APP:

  1. <?php
  2. class Xml extends Api {
  3. public function response($code, $message = '', $data = array()) {
  4. if(!is_numeric($code)) {
  5. return '';
  6. }
  7. $result = array(
  8. 'code' => $code,
  9. 'message' => $message,
  10. 'data' => $data
  11. );
  12. header('Content-Type:text/xml');
  13. $xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
  14. $xml .= "<root>";
  15. $xml .= self::xmlToEncode($result);
  16. $xml .= "</root>";
  17. echo $xml;
  18. }
  19. public static  function xmlToEncode($result) {
  20. $xml = $attr = '';
  21. foreach($result as $key => $value) {
  22. //判断键值对,如果是数字键值不允许
  23. if(is_numeric($key)) {
  24. $attr = " id='" . $key . "'";
  25. $key = "item";
  26. }
  27. $xml .= "<{$key}{$attr}>";
  28. //以递归形式返回,主要是因为数组在xml中显示是array,必须显示出来具体键值对
  29. $xml .= is_array($value) ? self::xmlToEncode($value) : $value;
  30. $xml .= "</{$key}>\n";
  31. }
  32. return $xml;
  33. }
  34. }

以json格式返回数据:

  1. <?php
  2. /**
  3. * 按xml方式输出通信数据
  4. */
  5. class Json extends Api {
  6. public function response($code, $message = '', $data = array()) {
  7. if(!(is_numeric($code))) {
  8. return '';
  9. }
  10. $result = array(
  11. 'code' => $code,
  12. 'message' => $message,
  13. 'data' => $data
  14. );
  15. echo json_encode($result);
  16. exit;
  17. }
  18. }

也可以采用这种方式组装返回数据:

    1. <?php
    2. class Response {
    3. const JSON = "json";
    4. /**
    5. * 按综合方式输出通信数据
    6. * @param integer $code 状态码
    7. * @param string $message 提示信息
    8. * @param array $data 数据
    9. * @param string $type 数据类型
    10. * return string
    11. */
    12. public static function show($code, $message = '', $data = array(), $type = self::JSON) {
    13. if(!is_numeric($code)) {
    14. return '';
    15. }
    16. $type = isset($_GET['format']) ? $_GET['format'] : self::JSON;
    17. $result = array(
    18. 'code' => $code,
    19. 'message' => $message,
    20. 'data' => $data,
    21. );
    22. if($type == 'json') {
    23. self::json($code, $message, $data);
    24. exit;
    25. } elseif($type == 'array') { //适合调试代码
    26. var_dump($result);
    27. } elseif($type == 'xml') {
    28. self::xmlEncode($code, $message, $data);
    29. exit;
    30. } else {
    31. // TODO
    32. }
    33. }
    34. /**
    35. * 按json方式输出通信数据
    36. * @param integer $code 状态码
    37. * @param string $message 提示信息
    38. * @param array $data 数据
    39. * return string
    40. */
    41. public static function json($code, $message = '', $data = array()) {
    42. if(!is_numeric($code)) {
    43. return '';
    44. }
    45. $result = array(
    46. 'code' => $code,
    47. 'message' => $message,
    48. 'data' => $data
    49. );
    50. echo json_encode($result);
    51. exit;
    52. }
    53. /**
    54. * 按xml方式输出通信数据
    55. * @param integer $code 状态码
    56. * @param string $message 提示信息
    57. * @param array $data 数据
    58. * return string
    59. */
    60. public static function xmlEncode($code, $message, $data = array()) {
    61. if(!is_numeric($code)) {
    62. return '';
    63. }
    64. $result = array(
    65. 'code' => $code,
    66. 'message' => $message,
    67. 'data' => $data,
    68. );
    69. header("Content-Type:text/xml");
    70. $xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
    71. $xml .= "<root>\n";
    72. $xml .= self::xmlToEncode($result);
    73. $xml .= "</root>";
    74. echo $xml;
    75. }
    76. public static function xmlToEncode($data) {
    77. $xml = $attr = "";
    78. foreach($data as $key => $value) {
    79. if(is_numeric($key)) {
    80. $attr = " id='{$key}'";
    81. $key = "item";
    82. }
    83. $xml .= "<{$key}{$attr}>";
    84. $xml .= is_array($value) ? self::xmlToEncode($value) : $value;
    85. $xml .= "</{$key}>\n";
    86. }
    87. return $xml;
    88. }
    89. }

PHP开发APP接口(一)的更多相关文章

  1. 《PHP开发APP接口》笔记

    PHP开发APP接口 [TOC] 课程地址 imooc PHP开发APP接口 学习要点 APP接口简介 封装通信接口方法 核心技术 APP接口实例 服务器端 -> 数据库|缓存 -> 调用 ...

  2. PHP开发APP接口(二)

    这里将会调用前面博客的数据库连接单例.文件缓存类和开发APP接口(一) <?php // http://app.com/list.php?page-=1&pagesize=12 requ ...

  3. PHP开发APP接口

    第1章 APP接口简介 - 课程简介 (:) - APP接口介绍 (:) - 客户端APP通信 (:) 最近学习 - 客户端APP通信格式区别 (:) - APP接口做的哪些事儿 (:) 第2章 封装 ...

  4. PHP开发APP接口学习笔记

    习要点概述1.APP接口简介 2.封装通信接口方法 3.核心技术 4.APP接口实例 服务器和客户端进行接口数据通信:服务器 -->数据库|缓存 -->调用接口 -->客户端 服务器 ...

  5. PHP开发APP接口实现--基本篇

    最近一段时间一直在做APP接口,总结一下APP接口开发以来的心得,与大家分享: 1. 客户端/服务器接口请求流程: 安卓/IOS客户端   –> PHP接口 –> 服务器端  –> ...

  6. 关于开发APP接口版本不兼容的问题

    关于 APP接口版本兼容的问题. iOS和android 要不断开发新版本,很多服务端开发都是在以前接口的逻辑上进行修改. 新的APP和接口开发后,接口如何兼容老的APP? 有的公司 每次发布完APP ...

  7. PHP开发APP接口之返回数据

    首先说明一下客户端APP通信的格式 1.xml:扩展标记语言(1.用来标记数据,定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,xml格式统一,跨平台和语言,非常适合数据传输和通信,早已 ...

  8. php开发APP接口(总结一)

    一.什么是app接口:服务端与客户端的数据交互. 大部分APP接口是通过http协议通信的. http通信的三要素: URL:   通信的地址 Method:通信的方式(get | post | pu ...

  9. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [5] 版本设计分析及数据表设计

    APP 版本升级以及 APP 演示 ① 版本升级分析以及数据表设计 ② 版本升级接口开发以及 APP 演示 /** * version_upgrade 版本升级信息表 */ CREATE TABLE ...

  10. PHP 开发 APP 接口 学习笔记与总结 - APP 接口实例 [7] APP 错误日志接口

    APP 上线以后可能遇到的问题: ① APP 强退 ② 数据加载失败 ③ APP 潜在问题 错误日志需要记录的内容 数据表 error_log 字段: id app_id:app 类别 id did: ...

随机推荐

  1. 学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践

    双机热备的概念简单说一下,就是要保持两个数据库的状态 自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做的好处多. 1. 可以做灾备,其中一个坏了可以切换 ...

  2. TDirectory.GetParent获取指定目录的父目录

    使用函数: System.IOUtils.TDirectory.GetParent class function GetParent(const Path: string): string; stat ...

  3. 安装 SQL Server 2012 的硬件和软件要求(官方全面)

    以下各节列出了安装和运行 SQL Server 2012 的最低硬件和软件要求. 有关 SharePoint 集成模式下 Analysis Services 的要求的详细信息,请参阅硬件和软件要求(S ...

  4. 韦东山教程ARM的时钟设置出现的问题及其解决方法

    时钟设置是一个非常重要的环节,如果系统没有合适的时钟,根本无法工作.   S3C2440的时钟复杂,分为FCLK,HCLK,PCLK.    在程序测试中,曾出现这样一个错误.系统当前FCLK为400 ...

  5. OC 之 const

    1. 修饰变量 一般设置传参数的时候 若设置为const, 则在调用过程中不允许修改参数值;(readonly) // *前const: 不能通过指针, 改变p指向的值 const int *p = ...

  6. 在游戏中使用keybd_event的问题

    转自在游戏中使用keybd_event的问题 今天发现在游戏中,keybd_event不能使用,结果发现游戏是使用directinput实现读取键盘的,关键还是扫描码的问题,我抄了一段老外的代码,经测 ...

  7. 【bzoj 3299】 [USACO2011 Open]Corn Maze玉米迷宫(最短路)

    就一个最短路,并且边长都是1,所以每个点只搜一次. /************************************************************** Problem: 3 ...

  8. BOM的来源是不可能出现的字符,GB2312双字节高位都是1,Unicode理论的根本缺陷导致UTF8的诞生

    Unicode字符编码规范   http://www.aoxiang.org 2006-4-2 10:48:02Unicode是一种字符编码规范 . 先从ASCII说起.ASCII是用来表示英文字符的 ...

  9. linux内核--进程地址空间(三)

    引言:上篇博文中,我们简单的介绍了Linux虚拟存储器的概念及组成情况,下面来分析分析进程的创建和终结及跟进程地址空间的联系. 这里首先介绍一个比较重要的概念:存储器映射 在Linux系统中,通过将一 ...

  10. nyist 740 “炫舞家“ST(动态规划)

    dp[i][j][k]:表示第i次踩踏后两脚的位置j,k 先固定一只脚的位置j,第i次踩踏后,状态为dp[i][j][a[i]]或者dp[i][a[i]][j],其中a[i]表示第i个输入的元素,则有 ...