1.JSON方式封装通信接口:

封装: response.php

<?php
// JSON方式封装通信接口
// 定义 response类
class Response {// 定义一个静态方法,作用:按json方式产生数据 // 规范通信数据:参数一:状态码,参数二:消息提示(初始值为空),参数三:组装后的数据(初始值为空数组)// 注释码:/*** 按json方式输出通信数据* @param integer(数字类型) $code 状态码* @param string(字符串类型) $message 提示信息* @param array(数组类型) $data 数据* return(返回值) string(字符串类型)*/public static function json($code,$message = '',$data = array()){// 判断$code是否为数字if(!is_numeric($code)){return '';}//将三个参数组装成一个新的数组$result = array('code' => $code,'message' => $message,'data' => $data);// 通过json_encode(),产生json数据echo json_encode($result);// exit 终止程序且不输出exit;}
}?>

调用:test.php

<?php
// 加载Response类文件
require_once('./response.php');
// 定义一个数组变量
$arr = array('id' => 1,'name' => 'zhangsan'
);// 调用类文件中的json()方法
Response::json(200,'数据返回成功',$arr);
?>

2.XML方式封装通信接口

2.0.1 PHP生成xml数据

封装: response.php

public static function xml(){// header 发送一个http头信息,将类型改为"text/xml",用于暴露xml节点header("Content-Type:text/xml");// 生成xml数据(通过字符串拼接的方法,首先定义一个变量$xml,存储xml数据)// \n 用于换行$xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; // 头信息$xml .= "<root>\n"; // 根节点$xml .= "<code>200</code>\n"; // 主体1$xml .= "<message>数据返回成功</message>\n"; // 主体2$xml .= "<data>\n"; // 主体3$xml .= "<id>1</id>\n";$xml .= "<name>zhangsan</name>\n";$xml .= "</data>\n";$xml .= "</root>";// 输出拼接后的xml数据echo $xml;}

2.0.2 xml方式封装通信数据接口

封装: response.php

<?php
// 定义 response类
class Response {// xml方式封装通信接口// 定义一个静态方法,作用:按xml方式产生数据 // 规范通信数据:参数一:状态码,参数二:消息提示(初始值为空),参数三:组装后的数据(初始值为空数组)// 注释码:/*** 按xml方式输出通信数据* @param integer(数字类型) $code 状态码* @param string(字符串类型) $message 提示信息* @param array(数组类型) $data 数据* return(返回值) string(字符串类型)*/public static function xmlEncode($code,$message,$data = array()){// 判断$code是否为数字if(!is_numeric($code)){return '';}//将三个参数组装成一个新的数组$result = array('code' => $code,'message' => $message,'data' => $data);// 生成xml数据// 发送header头信息,用于暴露xml节点header("Content-Type:text/xml");// 定义变量$xml,用于存储拼接后的xml数据$xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; // 头信息$xml .= "<root>\n"; // 根节点// 使用xmlToEncode()方法解析$result$xml .= self::xmlToEncode($result);$xml .= "</root>";// 输出拼接后的xml数据echo $xml;}// 将$result拼接成新的xml数据// 参数:$data(新的数据),例如:$resultpublic static function xmlToEncode($data){// 解析$result// 定义变量$xml存储数据$xml = "";// 初始化 $attr,当$key不为数字时,$attr为空$attr = "";// foreach循环遍历$data数组foreach ($data as $key => $value) {// 判断$key为数字的情况if(is_numeric($key)){// 添加属性$attr = "id='{$key}'";$key = "item";}// $key是一个节点,$value是节点的一个数据,使用{}用于识别变量$xml .= "<{$key}{$attr}>\n"; // 开始标签// $value是数组,使用递归,循环输出(判断是否为数组,如果是,则再次调用xmlToEncode方法)// 在一个类的方法(函数)的上下文中,静态变量和函数被访问使用self:: ,通过is_array()判断$value是否为数组$xml .= is_array($value) ? self::xmlToEncode($value):$value; // 节点的数据$xml .= "</{$key}>\n"; // 结束标签}// 循环结束后,输出这一块组装好的xml数据return $xml;}
}// 调用Response类的方法
$data = array('id' => 1,'name' => 'zhangsan'
);
Response::xmlEncode(200,'success',$data);?>

3.综合方式封装通讯接口:

封装: response.php

<?php
// 定义 response类
class Response {// 综合方式封装通信接口// 定义一个静态方法,作用:综合方式产生数据 // 规范通信数据:参数一:状态码,参数二:消息提示(初始值为空),参数三:组装后的数据(初始值为空数组),参数四:数据类型(初始值为json)// 注释码:/*** 按综合方式输出通信数据* @param integer(数字类型) $code 状态码* @param string(字符串类型) $message 提示信息* @param array(数组类型) $data 数据* @param string(字符串类型) $type 数据类型* return(返回值) string(字符串类型)*/// 定义常量,默认数据类型const JSON = "json";public static function show($code,$message = '',$data = array(),$type = self::JSON){// 判断$code是否为数字if(!is_numeric($code)){return '';}// 判断类型,如果存在,则是通过get方法传来的值,如果不存在,则是默认值json$type = isset($_GET['format'])?$_GET['format']:self::JSON;//将四个参数组装成一个新的数组数据$result = array('code' => $code,'message' => $message,'data' => $data);// 如果数据类型为jsonif($type == 'json'){// 调用json()方法self::json($code,$message,$data);exit;}elseif($type == 'array') {// 如果数据类型为array(调试模式)// 直接输出$resultvar_dump($result);}elseif($type == 'xml') {// 如果数据类型为xml// 调用xmlEncode()方法self::xmlEncode($code,$message,$data);exit;}else{// 其他类型}}// JSON方式封装通信接口// 定义一个静态方法,作用:按json方式产生数据 // 规范通信数据:参数一:状态码,参数二:消息提示(初始值为空),参数三:组装后的数据(初始值为空数组)// 注释码:/*** 按json方式输出通信数据* @param integer(数字类型) $code 状态码* @param string(字符串类型) $message 提示信息* @param array(数组类型) $data 数据* return(返回值) string(字符串类型)*/public static function json($code,$message = '',$data = array()){// 判断$code是否为数字if(!is_numeric($code)){return '';}//将三个参数组装成一个新的数组$result = array('code' => $code,'message' => $message,'data' => $data);// 通过json_encode(),产生json数据echo json_encode($result);// exit 终止程序且不输出exit;}// xml方式封装通信接口// 定义一个静态方法,作用:按xml方式产生数据 // 规范通信数据:参数一:状态码,参数二:消息提示(初始值为空),参数三:组装后的数据(初始值为空数组)// 注释码:/*** 按xml方式输出通信数据* @param integer(数字类型) $code 状态码* @param string(字符串类型) $message 提示信息* @param array(数组类型) $data 数据* return(返回值) string(字符串类型)*/public static function xmlEncode($code,$message,$data = array()){// 判断$code是否为数字if(!is_numeric($code)){return '';}//将三个参数组装成一个新的数组$result = array('code' => $code,'message' => $message,'data' => $data);// 生成xml数据// 发送header头信息,用于暴露xml节点header("Content-Type:text/xml");// 定义变量$xml,用于存储拼接后的xml数据$xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; // 头信息$xml .= "<root>\n"; // 根节点// 使用xmlToEncode()方法解析$result$xml .= self::xmlToEncode($result);$xml .= "</root>";// 输出拼接后的xml数据echo $xml;}// 将$result拼接成新的xml数据// 参数:$data(新的数据),例如:$resultpublic static function xmlToEncode($data){// 解析$result// 定义变量$xml存储数据$xml = "";// 初始化 $attr,当$key不为数字时,$attr为空$attr = "";// foreach循环遍历$data数组foreach ($data as $key => $value) {// 判断$key为数字的情况if(is_numeric($key)){// 添加属性$attr = "id='{$key}'";$key = "item";}// $key是一个节点,$value是节点的一个数据,使用{}用于识别变量$xml .= "<{$key}{$attr}>\n"; // 开始标签// $value是数组,使用递归,循环输出(判断是否为数组,如果是,则再次调用xmlToEncode方法)// 在一个类的方法(函数)的上下文中,静态变量和函数被访问使用self::  ,通过is_array()方法判断$value是否为数组$xml .= is_array($value) ? self::xmlToEncode($value):$value; // 节点的数据$xml .= "</{$key}>\n"; // 结束标签}// 循环结束后,输出这一块组装好的xml数据return $xml;}
}// 调用Response类的方法
$data = array('id' => 1,'name' => 'zhangsan'
);
Response::xmlEncode(200,'success',$data);?>

调用:test.php

<?php
// 加载Response类文件
require_once('./response.php');
// 定义一个数组变量
$data = array('id' => 1,'name' => 'zhangsan','type' => array(4,5,6),'test' => array(1,45,67=>array(123,'tsysa'))
);// 调用类文件中的show()方法
Response::show(200,'数据返回成功',$data,'json');?>

4.将数据缓存值指定文件中:

封装:file.php

<?php
// 定义类,作用:处理静态缓存
class File {// 定义默认路径 $_dirprivate $_dir;// 定义文件后缀const EXT = '.txt';// 将默认路径放在构造函数里面public function __construct(){// dirname(__FILE__)获取文件当前目录(即当前php文件所在的目录)// 设置默认缓存文件地址$this->_dir = dirname(__FILE__).'/files/';}// 将获取缓存,生成缓存,删除缓存 封装在一个方法中// 参数一:缓存文件的文件名,参数二:缓存数据(默认值为空),参数三:保存缓存的文件路径(默认值为空)public function cacheData($key,$value = '',$path = ''){// 拼装成一个文件$filename = $this->_dir.$path.$key.self::EXT;// 判断$values是否存在if($value!==''){// 将value值写入缓存// 判断$value是否为null,为null则删除缓存if(is_null($value)){// unlink() 删除缓存return @unlink($filename);}// 获取文件目录$dir = dirname($filename);// 判断目录是否存在,即判断存储缓存的文件是否存在,如果不存在,则创建缓存文件if(!is_dir($dir)){// 创建目录,参数一:文件目录名,参数二:设置权限mkdir($dir,0777);}// 将缓存数据写入文件// 参数一:缓存文件名,参数二:缓存数据(只能是字符串的形式,通过json_encode()转换)return file_put_contents($filename,json_encode($value));}// 判断$filename是否存在if(!is_file($filename)){return FALSE;}else{// file_get_contents()获取缓存值// json_decode()将json 转换为数组形式return json_decode(file_get_contents($filename),true); // 传入true返回原值}}
}?>

调用:test.php

<?php
// 加载Response类文件
require_once('./file.php');
// 定义一个数组变量
$data = array('id' => 1,'name' => 'zhangsan','type' => array(4,5,6),'test' => array(1,45,67=>array(123,'tsysa'))
);// new一个File类
$file = new File();
// 调用cacheData()方法
$file->cacheData('index_mk_cache',$data);
// 添加缓存
if($file->cacheData('index_mk_cache',$data)){echo "success";
}else{echo "error";
}
// 获取缓存
if($file->cacheData('index_mk_cache'){var_dump($file->cacheData('index_mk_cache'));exit;echo "success";
}else{echo "error";
}
// 删除缓存
if($file->cacheData('index_mk_cache',null)){echo "success";
}else{echo "error";
}?>

.

// 开始封装:

通用:db.php

<?php
// 单例模式连接数据库
// 单例模式(限制类只能拥有一个实例)
// 定义一个类
class Db {// 配置数据库private $_dbConfig = array('host' => '127.0.0.1', // 数据库地址'user' => 'root', // 用户名'password' => '', // 密码'database' => 'video', // 数据库名);// 定义资源标识符(结果集)static private $_connectSource;// 用于一个保存类的实例的静态成员变量 $_instance// 使用静态私有变量保存类的实例static private $_instance;// __construct() 构造函数,函数执行时默认执行,一般用于初始化// 单例模式规定构造函数必须是非publicprivate function __construct(){}// 拥有一个访问这个实例的公共的静态方法// 定义getInstance()方法,便于在类的内部实例化类static public function getInstance(){// 检查类有没有被实例,如果有则返回变量if(!(self::$_instance instanceof self)){// 实例化类self::$_instance = new self();}// 返回一个类的实例return self::$_instance;}// php连接数据库public function connect(){// 判断资源是否存在if(!self::$_connectSource){// 连接数据库
// @是可以屏蔽函数执行过程中遇到问题而产生的一些错误、警告信息,这样用户就看不到程序的出错信息。这样除了用户界面会友好一些外,更重要的是安全性,因为屏蔽了出错文件的路径等信息。self::$_connectSource = @mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);// 如果没有返回资源if(!self::$_connectSource){die('数据库连接失败'.mysql_error());}// 选择数据库// 参数一:数据库名称,参数二:资源标识符(结果集)mysql_select_db($this->_dbConfig['database'],self::$_connectSource);// 设置字符集mysql_query("set names UTF8",self::$_connectSource);}// 返回连接数据库的资源return self::$_connectSource;}}// 调用
// 数据库的连接,返回结果集
$connect = Db::getInstance()->connect();
var_dump($connect);?>

方案一:读取数据库方式开发接口(直接连接数据库获取)

实例:list.php

<?php
// 引入接口类
require_once('./response.php');
// 数据库
require_once('./db.php');
// 接口样例:http://app.com/list.php?page=1&pagesize=10
// 定义页码,并判断是否存在,如果不存在给予默认值
$page = isset($_GET['page']) ? $_GET['page'] : 1;
$pageSize = isset($_GET['pagesize']) ? $_GET['pagesize'] : 1;
// 验证传值是否合法,判断是否为数字
if(!is_numeric($page)||!is_numeric($pageSize)){// 生成接口数据// 通过return告知其他工程师,下面程序不执行return Response::show(401,'数据不合法');
}
// 编写SQL语句
// order by XXX desc :倒序排序
// limit 起始位置,数据条数
$offset = ($page - 1) * $pageSize;
$sql = "select * from video where status = 1 order by orderby desc limit".$offset.",".$pageSize;
// 捕获异常
try{// $connect:连接标识符$connect = Db::getInstance()->connect();
}else(Exception $e){// 提示异常return Response::show(403,'数据库连接失败');
}
// $result:资源标识符(结果集)
$result = mysql_query($sql,$connect);
// 定义一个空数组,用于存储数据
$videos = array();
// while循环输出所有的数据
while($video = mysql_fetch_assoc($result)) {// 每次循环,自动生成id,且值会放入$videos数组中$videos[] = $video;
}// 使用Response类中的方法,将$videos中的数据转换为json格式
// Response::show('状态码','提示语句','原始数据')
if($videos){return Response::show(200,'首页数据获取成功',$videos);
}else{return Response::show(400,'首页数据获取失败',$videos);
}
?>

  

方案二:读取缓存方式开发接口(连接数据库获取的同时缓存一份,再次获取时不再连接数据库,而是读取缓存,可设置缓存失效时间)

方案三:定时读取缓存方式开发接口(通过crontab)

app接口开发(php)相关推荐

  1. 感受-App接口开发课程讲解和总结

    1.背景 今天有幸给学弟学妹们上了一节课,课程内容-- app接口开发.算起来在学校玩程序和软件已经有一年的时间了,这一年里学习到了很多东西,从接触编程语言到会做 安卓软件 ,再到 会写网站,付出了很 ...

  2. PHP:APP接口开发

    环境简介 LNMP 1.Linux 2.Nginx 3.MySQL 4.PHP APP接口 客户端与服务端数据的交换 HTTP通讯三要素 1.URL 地址 2.Method 方式 3.Params 内 ...

  3. php app接口开发,「PHP开发APP接口实战005」基础示例接口的实现一

    前一章,我们对接口参数基本定义做了一个简要说明.里面提到了几个示例接口,接下来,我们就来讲解这个几点个示例接口的具体实现. 「PHP开发APP接口实战004」基础响应参数说明 前言 由于我们的接口返回 ...

  4. APP接口开发(待完善)

    1.接口版本管理    v1.v2     2.app版本管理,检测更新,强制更新.普通更新     3.异常收集,在做Android和ios的后端接口,需要设计一些接口,用来收集客户端收集客户端(A ...

  5. php接口调用实例源代码,小蚂蚁学习APP接口开发(7)—— APP接口实例——读取缓存方式开发APP接口的代码案例...

    从数据库中直接读取数据,虽然时效性很强,但是对数据库造成很大压力,尤其是在高访问量的情况下.这时候可以通过缓存,来有效的缓解了这一压力,虽然时效性有些不足,但是服务器的抗压能力却达到了很大的提高. 读 ...

  6. 【APP接口开发】chrome浏览器DHC工具安装使用(亲测有效)

    1.DHC文件获取地址:http://chromecj.com/web-development/2015-08/549/download.html 2.chrome安装DHC插件教程和步骤:http: ...

  7. 【APP接口开发】常用HTTP响应头状态码详解

    1.200 OK,客户端请求城成功 2.400 Bad Request ,客服端请求语法错误,服务器无法理解和处理 3.401 unauthorized,请求未通过认证 4.403 permissio ...

  8. php通信软件培训,小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口...

    在类文件中包含了json返回数据的方法和xml返回数据的方法,在调用的时候需要调用不同的方法来实现不同类型数据的返回,今天再增加一个show()方法,作为一个统一调用的入口,只需要给它传入不同的参数就 ...

  9. php app接口id参数类型过滤,PHP开发APP接口---返回数据的封装类

    /** * app返回数据类 * 1.接受多维,缺少键名的数组, * 2.可由输入的format参数决定返回数据格式 * 例子:Response::show(200, 'success', $data ...

最新文章

  1. 【Leetcode】刷题之路2(python)
  2. 【Codevs1346】HelloWorld编译器
  3. android startactivity 跳到锁屏_「瀑布屏」手机到底好不好用?
  4. create-react-app 配置scss,ant-design,装饰器,代理,node支持最新语法,express es6 后端,链接mongodb...
  5. Asp.net系列计划
  6. 【51单片机快速入门指南】2.1:数码管显示数字、小数 (科学计数法)
  7. 假如中了1800万彩票,怎么做保持利益最大化
  8. unity 录制游戏内视频(1)
  9. APP测试—专项测试概念
  10. lisp 读取样条曲线座标点_autolisp绘制样条曲线
  11. iOS 常用正则表达式一览表
  12. 湖北理工学院计算机学院优秀毕业生,关于表彰2012届优秀毕业生的决定
  13. mysql_union all 纵向合并建表_20170123
  14. IDEA+Gradle搭建Spring Boot项目
  15. Java中对象的六种可触及状态
  16. python抓包检测入侵_如果你喜欢python爬虫,不妨看看这篇验证码的抓包技巧与识别!...
  17. 重磅!2023 IEEE Fellow名单出炉:唐立新、宗成庆、朱军、姬水旺、刘威等入选
  18. 易基因 | 简化基因组DNA甲基化测序(RRBS)实验怎么做?
  19. 115-545-003丨Alexa Fluor 488标记亲和纯化山羊抗小鼠IgG(H+L)二抗
  20. 拼多多token延长时间

热门文章

  1. 面试官问:跨域请求如何携带cookie?
  2. 条款6:若不想使用编译器自动生成的函数,就该明确拒绝
  3. 在Leangoo里怎么设置看板周期?
  4. C#利用Socket实现客户端之间直接通信
  5. TMG学习(十一),保护企业内网上网安全
  6. ExtJs 带分页的comboBox
  7. SQL Server 2008如何导出带数据的脚本文件
  8. 【动态规划】cf1034C. Region Separation
  9. for(auto c:s)与for(auto c:s)
  10. Linux文件系统基础(1)