其主要的实现流程一般会经历这样的几个阶段服务器端----》 数据库|缓存 ----》 调用接口 ----》客户端在接口数据传输的过程中,一般采用Json或者Xml的数据格式进行传输,json在生成数据方面(json_encode)和传输速度上比较强,xml在数据的可读性能上比较强。接下来封装一个完整的接口返回数据的公用方法,如下所示:
$code, 'message' => $message, 'data' => $data, ); if($type == 'json') { self::json($code, $message, $data); exit; } elseif($type == 'array') { var_dump($result); } elseif($type == 'xml') { self::xmlEncode($code, $message, $data); exit; } else { // TODO } } /** * 按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 xmlEncode($code, $message, $data = array()) { if(!is_numeric($code)) { return ''; } $result = array( 'code' => $code, 'message' => $message, 'data' => $data, ); header('Content-Type:text/xml'); $xml = '\n'; $xml .= '
缓存在接口中会有大量的使用,关于缓存又分为静态缓存和redis/memcache缓存,先说静态缓存的实现,一般是将数据写入日志,查看日志时用的比较多,即写入静态文件中。
在接口中常用的缓存为redis缓存,他拥有memcache的所有功能,而且还支持多种数据类型。缓存的数据存放在内存中,读取速度相当于读取文件来说更快一些。redis 缓存的设置只需要选择数据库(0-15),直接设置key,value值和过期时间即可,封装的方法如下:
handler = new Redis(); //从配置读取 $this->handler->connect($data['hostname'],$data['port']); $this->handler->auth($data['auth']); $this->handler->select($dbindex); } public static function getInstance($dbindex = 0){ if(!isset(self::$_instance[$dbindex]) or FALSE == (self::$_instance[$dbindex] instanceof self)){ self::$_instance[$dbindex] = new self($dbindex); } return self::$_instance[$dbindex]; } /**key value get**/ public function GET($key) { return $this->handler->get($key); } /**key value set 过期时间为 $exp**/ public function SET($key ,$value ,$exp) { $this->handler->setex($key ,$exp ,$value ); } /*移除数据$key*/ public function REMOVE($key) { $this->handler->delete($key); } /*设置数据的过期时间$key*/ public function EXPIRE($key ,$exp) { $this->handler->expire($key ,$exp); } /**Hash 相关**/ public function HGET($domain , $key) { return $this->handler->hGet($domain , $key); } public function HSET ($domain ,$key ,$value ) { $this->handler->hSet($domain , $key); } public function HREMOVE($domain ,$key) { $this->handler->hDel($domain , $key); } /*插入列表*/ public function PushList($channel,$data) { $this->handler->lPush($channel,$data); } /*从列表中获取*/ public function POPList($channel) { return $this->handler->lPop($channel); } } ?>