接口开发响应类封装

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. python C PyObject

    #include"Python.h" //three ways : /* PyObject *MyFunction(PyObject *self, PyObject *args); ...

  2. c++ using Handle Class Pattern to accomplish implementation hiding

    Reference material: Thinking In C++ 2nd eidition chapter 5 section "Handle classes" If the ...

  3. git设置及常用命令

    下载 下载地址:https://git-scm.com/downloads windows系统安装 默认安装即可. 其它系统安装方式请自行百度,网上教程很多. 设置 windows桌面右键,选择Git ...

  4. Android中使用HttpClient发送Get请求

    这里要指定编码,不然服务器接收到的会是乱码的.

  5. mysql的binlog和slow_log慢日志

    redo undo 锁 ----------------------------------------- 日志管理 log-error=/var/log/mysql.log 二进制日志的“总闸” 作 ...

  6. Spring MVC密码处理

    以下示例显示如何在使用Spring Web MVC框架的表单中使用密码.首先使用Eclipse IDE来创建一个WEB工程,并按照以下步骤使用Spring Web Framework开发基于动态表单的 ...

  7. 嵌入式开发之davinci--- 8168 总的roi 编码

    http://bbs.61dsp.com/forum.php?mod=viewthread&tid=767

  8. 转:SSD详解

    原文:http://blog.csdn.net/a8039974/article/details/77592395, http://blog.csdn.net/jesse_mx/article/det ...

  9. selenium-webdriver 中执行js代码

    #获取标签的text文本值 js1="return document.getElementById('key1').innerText" dr.execute_script(js1 ...

  10. UIWebView加载ANSI格式的txt文件出现乱码问题解决

    //若为txt文档    if([encodedString hasSuffix:@".txt"]){                        NSData* Data = ...