zoukankan      html  css  js  c++  java
  • app接口开发(php)

    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数据)
    		// 
     用于换行
    		$xml = "<?xml version='1.0' encoding='UTF-8'?>
    "; // 头信息
    		$xml .= "<root>
    "; // 根节点
    		$xml .= "<code>200</code>
    "; // 主体1
    		$xml .= "<message>数据返回成功</message>
    "; // 主体2
    		$xml .= "<data>
    "; // 主体3
    		$xml .= "<id>1</id>
    ";
    		$xml .= "<name>zhangsan</name>
    ";
    		$xml .= "</data>
    ";
    		$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'?>
    "; // 头信息
    		$xml .= "<root>
    "; // 根节点
    		// 使用xmlToEncode()方法解析$result
    		$xml .= self::xmlToEncode($result);
    		$xml .= "</root>";
    
    		// 输出拼接后的xml数据
    		echo $xml;
    	}
    
    	// 将$result拼接成新的xml数据
    	// 参数:$data(新的数据),例如:$result
    	public 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}>
    "; // 开始标签
    			// $value是数组,使用递归,循环输出(判断是否为数组,如果是,则再次调用xmlToEncode方法)
    			// 在一个类的方法(函数)的上下文中,静态变量和函数被访问使用self:: ,通过is_array()判断$value是否为数组
    			$xml .= is_array($value) ? self::xmlToEncode($value):$value; // 节点的数据
    			$xml .= "</{$key}>
    "; // 结束标签
    		}
    		// 循环结束后,输出这一块组装好的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
    		);
    
    		// 如果数据类型为json
    		if($type == 'json'){
    			// 调用json()方法
    			self::json($code,$message,$data);
    			exit;
    		}elseif($type == 'array') {
    			// 如果数据类型为array(调试模式)
    			// 直接输出$result
    			var_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'?>
    "; // 头信息
    		$xml .= "<root>
    "; // 根节点
    		// 使用xmlToEncode()方法解析$result
    		$xml .= self::xmlToEncode($result);
    		$xml .= "</root>";
    
    		// 输出拼接后的xml数据
    		echo $xml;
    	}
    
    	// 将$result拼接成新的xml数据
    	// 参数:$data(新的数据),例如:$result
    	public 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}>
    "; // 开始标签
    			// $value是数组,使用递归,循环输出(判断是否为数组,如果是,则再次调用xmlToEncode方法)
    			// 在一个类的方法(函数)的上下文中,静态变量和函数被访问使用self::  ,通过is_array()方法判断$value是否为数组
    			$xml .= is_array($value) ? self::xmlToEncode($value):$value; // 节点的数据
    			$xml .= "</{$key}>
    "; // 结束标签
    		}
    		// 循环结束后,输出这一块组装好的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 {
    	// 定义默认路径 $_dir
    	private $_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() 构造函数,函数执行时默认执行,一般用于初始化
    	// 单例模式规定构造函数必须是非public
    	private 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)

  • 相关阅读:
    我与酷派手机N900+的艰难之旅
    从ASPNET1.1迁移到了ASPNET2.0遇到ORA01000: 超出打开游标的最大数
    彩铃平台接口独立取得阶段性胜利
    中央音乐平台的MD5算法问题
    彩铃接口独立完毕
    'OraOLEDB.Oracle.1' provider is not registered on the local machine.错误的解决
    程序员的陷阱
    ASP NET页面下载程序
    从aspnet1.1升级到aspnet2.0的小问题
    彩铃平台接口的计费服务问题解决
  • 原文地址:https://www.cnblogs.com/crazycode2/p/6915055.html
Copyright © 2011-2022 走看看