接口开发响应类封装

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. AJAX动态加载评论

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. AutoLayout详解+手把手实战(转载)

    首先说一下这篇博客虽然是标记为原创,但是事实并非本人亲自写出来的,知识点和例子本人花了一天各处查 找和整理最终决定写一个汇总的详解,解去各位朋友到处盲目查找的必要,因为不是转载某一个人的内容,故此不标 ...

  3. Android Studio 使用笔记:[转] Mac下修改Android Studio 所用的JDK版本

    原文链接:http://www.jianshu.com/p/d8d1d72d0248# 最近项目从Eclipse+Ant构建模式转移到了Android Studio+Gradle构建模式,自然的JDK ...

  4. Swoole系列(二):安装

    Window是没办法安装的,服务器版本建议用linux的centos7 Php版本5.4 安装步骤: 1.更新你的yum yum update 2.安装php相关扩展 2.yum install ph ...

  5. 学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用

    http://www.importnew.com/13246.html     首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 ...

  6. echarts Y轴刻度保留几位小数

    yAxis: [ { type: 'value', name: '雨量(mm)', nameLocation: 'start', inverse: true, axisLabel: {         ...

  7. openwrt源码下载移植

    openwrt源码下载移植 一.源码下载 1.1下载 由于本人多次尝试从SVN代码地址下载代码,出现无法访问因此这里选择从Git代码地址进行下载.在linux系统命令终端输入 git clone gi ...

  8. linux以下C 利用openssl的AES库加密,解密

    OpenSSL提供了AES加解密算法的API const char *AES_options(void); AES算法状态,是所有支持或者是部分支持. 返回值:"aes(full)" ...

  9. react native的环境搭建中常见问题

    搭建完成android的环境,我们就可以继续我们的react native环境的搭建了. 当然,按照fb的安装流程来完成rn的搭建. http://facebook.github.io/react-n ...

  10. T-SQL Table-valued Function使用分隔符将字符串转换为表

    )=' ') RETURNS @Strings TABLE ( ITEM_VALUE VARCHAR(MAX) ) AS BEGIN DECLARE @index INT ) BEGIN SET @i ...