接口开发响应类封装

class response{
/*
* 封通信接口数据
* @param integer $code 状态码
* @param string $message 状态信息
* @param array $data 数据
* return string
*/
public static function api_response($code, $message='', $data=array()){
//记录错误日志
if (1 !== $code) {
$logger = new logger();
$logger->conf['log_file'] = _LOG_DIR_ . 'api_error' . '.log';
$logger->log(array(substr(getIp(), 0, 15), '['.date("Y-m-d H:i:s").']', 'code: '.$code, 'message: '.$message));
} $type = isset($_REQUEST['format'])?$_REQUEST['format']:'';
switch ($type) {
case 'json':
self::json_response($code, $message, $data);
break;
case 'xml':
self::xml_response($code, $message, $data);
break;
case 'array':
self::array_response($code, $message, $data);
break;
default:
self::json_response($code, $message, $data);
break;
}
} /*
* 封装数为json数据类型
* @param integer $code 状态码
* @param string $message 状态信息
* @param array $data 数据
* return string
*/
public static function json_response($code, $message='', $data=array()){
$result = self::grant_array($code, $message, $data);
echo json_encode($result);
exit;
} /*
* 封装数为xml数据类型
* @param integer $code 状态码
* @param string $message 状态信息
* @param array $data 数据
* return string
*/
public static function xml_response($code, $message='', $data=array()){
$result = self::grant_array($code, $message, $data); header("Content-Type:text/xml");
$xml = "<?xml version='1.0' encoding='UTF-8'?>".PHP_EOL;
$xml .= "<root>".PHP_EOL;
$xml .= self::xml_encode($result);
$xml .= "</root>";
echo $xml;
exit;
} /*
* 封装数为array数据类型
* @param integer $code 状态码
* @param string $message 状态信息
* @param array $data 数据
* return string
*/
public static function array_response($code, $message='', $data=array()){
$result = self::grant_array($code, $message, $data);
echo var_export($result, true);
exit;
} /*
* 将数组转换为XML格式
* @param array $array 数组
* return string
*/
private static function xml_encode($array=array()){
$xml = $attr = ""; if(!empty($array)){
foreach ($array as $key => $value) {
if(is_numeric($key)){
$attr = " id='{$key}'";
$key = "item";
}
$xml .= "<{$key}{$attr}>" ;
$xml .= is_array($value) ? self::xml_encode($value) : $value;
$xml .="</{$key}>".PHP_EOL;
}
}
return $xml;
} /*
* 按照接口格式生成原数据数组
* @param integer $code 状态码
* @param string $message 状态信息
* @param array $data 数据
* return array
*/
private static function grant_array($code, $message='', $data=array()){
if(!is_numeric($code)){
return '';
}
$data['date'] = date('Y-m-d H:i:s');
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
); return $result;
}
}

日志类封装

class logger
{
/**
* 配置
*/
public $conf = array(
'log_file' => '',
'separator' => ' ',
); /**
* 文件句柄
*/
private $fileHandler; /**
* 获得文件句柄
* @return resource fileHandler
*/
protected function getFileHandler()
{
if (null === $this->fileHandler)
{
if (empty($this->conf['log_file']))
{
trigger_error('no log file spcified');
}
$logDir = dirname($this->conf['log_file']);
if (!is_dir($logDir))
{
mkdir($logDir, 0777, true);
}
$this->fileHandler = fopen($this->conf['log_file'], 'a');
}
return $this->fileHandler;
} /**
* 记录日志
* @param mixed $logData
*/
public function log($logData)
{
if ('' == $logData || array() == $logData)
{
return false;
}
if (is_array($logData))
{
$logData = implode($this->conf["separator"], $logData);
}
$logData = $logData. "\n";
fwrite($this->getFileHandler(), $logData);
fclose($this->getFileHandler());
}
}

来自:http://bbs.php-z.com/thread-3101-1-1.html

api响应类的更多相关文章

  1. drf03 drf视图中提供的请求类和响应类

    drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. Django REST ...

  2. aspnet core 全局模型验证,统一api响应

    上手就来 新建一个模型验证过滤器,其中ApiResp是自定义的统一响应类. public class VldFilter:IActionFilter { /// <summary> /// ...

  3. 【ASP.NET Core】设置Web API 响应的数据格式——Produces 特性篇

    开春首文,今天老周就跟各位大伙伴们聊一个很简单的话题:怎么设定API响应的数据格式. 说本质一点,就是设置所返回内容的 MIME 类型(Content-Type 头).当然了,咱们不会使用在HTTP管 ...

  4. Java API 常用类(一)

    Java API 常用类 super类详解 "super"关键字代表父类对象.通过使用super关键字,可以访问父类的属性或方法,也可以在子类构造方法中调用父类的构造方法,以便初始 ...

  5. API响应

    保证API响应的正确性,就是你需要做的大部分工作.postman的response viewer部分会协助你完成该工作且使其变得简单. 一个API的响应包含body,headers,响应状态码.pos ...

  6. ABP开发框架前后端开发系列---(10)Web API调用类的简化处理

    在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...

  7. ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用

    在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...

  8. ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用

    在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...

  9. Directx11学习笔记【二十一】 封装键盘鼠标响应类

    原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...

随机推荐

  1. windows system.exe占用文件

    1)问题的原因是出于一个服务Application Experience,如果装好系统后就把此服务设为手动启动了,平时运行也没什么异常.但是win7在运行exe时如果没有这个服务的辅助就会长时间的占用 ...

  2. libubox组件(1)——usock

    一:相关API介绍 1.相关源码文件:usocket.h usocket.c 2.类型标志 1: #define USOCK_TCP 0 2: #define USOCK_UDP 1 3: #defi ...

  3. 2017-5-14 湘潭市赛 Highway 先获得直径S,T。则一开始S,T相连,然后其他的点如果离S更远那么连在S,否则T;

    Highway Accepted : Submit : Time Limit : MS Memory Limit : KB Highway In ICPCCamp there were n towns ...

  4. Hibernate每个子类一张表(使用XML文件)实例

    在每个子类一张表的情况下,子类映射表与主键和外键关系与父类映射表相关. 类的<joined-subclass>元素用于使用主键和外键关系将子类与父对象进行映射. 在这个例子中,我们将使用h ...

  5. dm8148 开发之---互斥量、条件量、枷锁、互斥枷锁

    int OSA_semCreate(OSA_SemHndl *hndl, Uint32 maxCount, Uint32 initVal){ pthread_mutexattr_t mutex_att ...

  6. tcp/iP协议族——IP工作原理及实例具体解释(下)

     IP协议具体解释 上一篇文章文章主要介绍了IP服务的特点,IPv4头部结构IP分片.并用tcpdump抓取数据包,来观察IP数据报传送过程中IP的格式,以及分片的过程.本文主要介绍IP路由,IP ...

  7. jQuery实现3D幻灯片

    先看下效果图: 看到这个酷炫的效果有没有很眼馋啊!接下来我们就一起来学习实现它吧. 1.看到效果后我们先分析这个dom要怎么实现! 首先我们要用一个大容器包裹内容,其次这个看起来像是3d效果的图片实际 ...

  8. OpenCV学习笔记十八:opencv_flann模块

    一,简介: Fast Library for Approximate Nearest Neighbors (FLANN)算法库.

  9. python提供了一个进行hash加密的模块:hashlib

    python提供了一个进行hash加密的模块:hashlib下面主要记录下其中的md5加密方式 import hashlib data1 = 'sada' #####字母和数字 m = hashlib ...

  10. go反射----1类型

    声明:文章内容取自雨痕老师<Go语言学习笔记> 反射( reflect )让我们能在运行期探知对象的类型信息和内存结构,这从一定程度上弥补了静态语言在动态行为上的不足.同时,反射还是元编程 ...