api响应类
接口开发响应类封装
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响应类的更多相关文章
- drf03 drf视图中提供的请求类和响应类
drf除了在数据序列化部分简写代码以外,还在视图中提供了简写操作.所以在django原有的django.views.View类基础上,drf封装了多个子类出来提供给我们使用. Django REST ...
- aspnet core 全局模型验证,统一api响应
上手就来 新建一个模型验证过滤器,其中ApiResp是自定义的统一响应类. public class VldFilter:IActionFilter { /// <summary> /// ...
- 【ASP.NET Core】设置Web API 响应的数据格式——Produces 特性篇
开春首文,今天老周就跟各位大伙伴们聊一个很简单的话题:怎么设定API响应的数据格式. 说本质一点,就是设置所返回内容的 MIME 类型(Content-Type 头).当然了,咱们不会使用在HTTP管 ...
- Java API 常用类(一)
Java API 常用类 super类详解 "super"关键字代表父类对象.通过使用super关键字,可以访问父类的属性或方法,也可以在子类构造方法中调用父类的构造方法,以便初始 ...
- API响应
保证API响应的正确性,就是你需要做的大部分工作.postman的response viewer部分会协助你完成该工作且使其变得简单. 一个API的响应包含body,headers,响应状态码.pos ...
- ABP开发框架前后端开发系列---(10)Web API调用类的简化处理
在较早期的随笔<ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用>已经介绍了Web API调用类的封装处理,虽然这些调用类我们可以使用代码生成工具快 ...
- ABP开发框架前后端开发系列---(5)Web API调用类在Winform项目中的使用
在前面几篇随笔介绍了我对ABP框架的改造,包括对ABP总体的介绍,以及对各个业务分层的简化,Web API 客户端封装层的设计,使得我们基于ABP框架的整体方案越来越清晰化, 也越来越接近实际的项目开 ...
- ABP开发框架前后端开发系列---(4)Web API调用类的封装和使用
在前面随笔介绍ABP应用框架的项目组织情况,以及项目中领域层各个类代码组织,以及简化了ABP框架的各个层的内容,使得我们项目结构更加清晰.上篇随笔已经介绍了字典模块中应用服务层接口的实现情况,并且通过 ...
- Directx11学习笔记【二十一】 封装键盘鼠标响应类
原文:Directx11学习笔记[二十一] 封装键盘鼠标响应类 摘要: 本文由zhangbaochong原创,转载请注明出处:http://www.cnblogs.com/zhangbaochong/ ...
随机推荐
- 简单使用shell 自动打包,发布项目 脚本
(1)打包,发布脚本 deploy.sh packagepath=/home/admin/testProject/project application=testProject mkdir -p $p ...
- jQuery EasyUI DataGrid在MVC中的运用-基本属性并实现分页
※ datagrid的基本属性和方法 ※ datagrid分页在前后台的实现 最终效果: 与视图显示对应的view model public class Book public strin ...
- linux命令-进阶1
Linux查看系统信息的一些命令及查看已安装软件包的命令 centos下如何查看某个软件是否安装http://www.landui.com/help/show-3959.html CentOS 下 r ...
- Ubuntu下创建JerBrains系列软件的快捷方式
以pycharm为例: 终端输入:sudo gedit /usr/share/applications/Pycharm.desktop模板: [Desktop Entry]Type=Applicati ...
- makefile编写---.a静态库的生成和调用
#.SUFFIXES: .c .o Cc =gcc #OSA=/data/users/osa IncDir=-I. -I./ Debug = -g Cflags = -c $(DEBUG) Libs ...
- diamond源码阅读-diamond-client
读取数据 DiamondManager manager = new DefaultDiamondManager("DEFAULT_GROUP", "zml", ...
- ASP.NET动态网站制作(29)-- 正则
前言:继续讲框架,然后介绍正则的相关知识. 内容: 1.封装分页方法,方便以后调用:响应的CSS代码也可以封装. 2.WEB层里面的页面名称不要和model和dal里面的名称相同. 3.两个表联合查询 ...
- KnockOut 绑定之foreach绑定(mvc+knockout)
什么时候使用foreach绑定 foreach绑定对于数组中的每一个元素复制一节标记语言,也就是html,并且将这节标记语言和数组里面的每一个元素绑定.当我们呈现一组list数据,或者一个表格的时候, ...
- hdu 4681(枚举+dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4681 思路:首先预处理出串C在A,B中的所有的位置,然后从前向后求一次最长公共子序列,从后向前求一次最 ...
- hdu 3394(点双连通)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394 思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都 ...