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

时间: 2024-10-10 00:43:17

api响应类的相关文章

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

上手就来 新建一个模型验证过滤器,其中ApiResp是自定义的统一响应类. public class VldFilter:IActionFilter { /// <summary> /// 执行到action时 /// </summary> /// <param name="context"></param> public void OnActionExecuting(ActionExecutingContext context) { i

crm将消息(请求和响应类)与 Execute 方法结合使用

IOrganizationService 提供执行常用操作的方法.除了常用方法外,还可以使用 IOrganizationService.Execute 方法执行没有公开为方法的消息.Execute 方法采用消息请求类作为参数并返回消息响应类.请求消息类名称以"Request"结尾,响应消息类名称以"Response"结尾.有关 Execute 方法支持的所有消息的详细信息,请参阅组织服务中的 xRM 消息和组织服务中的 CRM 消息.IDiscoveryServic

内部类,drf响应类,序列化与反序列化

内部类 # 概念:将类定义在一个类的内部,被定义的类就是内部类 # 特点:内部类及内部类的所以名称空间,可以直接被外部类访问的 # 应用:通过内部类的名称空间,给外部类额外拓展一些特殊的属性(配置),典型的Meta内部类 - 配置类 class Book(model.Model): class Meta: db_model = "owen_book" # 配置自定义表名 class BookSerializer(serializers.ModelSerializer): class M

68 drf 响应类reponse 序列化数据校验与写入

1.内部类 就是当前类的配置类 1.序列化组件的配置类 2.数据库model配置类 解释: 伪代码         继承的model类支持db_name,所以Meta类要使用db_name的写法 """ class Car(Model): name = CharFields() class Meta: db_name = "表名" # Car表,将会name作为Car表的字段 (内部可以通过Car.name访问到name) (内部可以通过Car.Meta.

Java API —— DateFormat类

1.DateFormat类概述         DateFormat 是日期/时间格式化子类的抽象类,它以与语言无关的方式格式化并解析日期或时间. 是抽象类,所以使用其子类SimpleDateFormat. 2.SimpleDateFormat构造方法     public SimpleDateFormat():将一个 Date 格式化为日期/时间字符串.(默认模式) public SimpleDateFormat(String pattern):用给定的模式和默认语言环境的日期格式符号构造 S

Java API ——StringBuffer类

1.StringBuffer类概述, 1)我们如果对字符串进行拼接操作,每次拼接,都会构建一个新的String对象,既耗时,又浪费空间.而StringBuffer就可以解决这个问题 2)线程安全的可变字符序列 3)StringBuffer和String的区别 · 前者长度和内容可变,后者不可变.  · 如果使用前者做字符串的拼接,不会浪费太多的资源. 2.构造方法 · public StringBuffer() :无参构造方法 · public StringBuffer(int capacity

HTTP API响应数据规范整理

概述 本文档为本人对长期开发API接口所整理的经验总结,如有不完善或不合理的地方,望各位多提意见. 文档目的为规范服务器端API接口,便于服务器端与客户端代码重用.服务器端和客户端可根据实际所定义规范编写序列化和反序列化工具,以便减少一些开发时间. 本文档为个人观点,仅供参考. HTTP接口 Execute(CUD) 用于client向server发起的POST.PUT和DELETE请求 JSON 参考 { "code": "value", //结果码,必需.客户端

【Todo】Java学习笔记 100==100 &amp; Reflection API &amp; Optional类详解 &amp; DIP、IoC、DI &amp; token/cookie/session管理会话方式

为什么1000 == 1000返回为False,而100 == 100会返回为True?   Link Java Reflection API:Link Java8 Optional 类深度解析: Link 深入理解DIP.DI及IoC容器: Link 3种会话管理的方式: Link

JavaAPI学习(一):API &amp;&amp; String类 &amp;&amp; Stringbuffer &amp;&amp; StringBuilder

一.API 1.API:英文 Aplication Progrmmer Iteface 的缩写,即应用编程接口 由官方或第三方提供的能实现特点功能的程序封装包,包含各功能类,接口,以及实现方法等:很多基础功能不需要再重写,直接调用即可:但因为Java的API十分丰富,常用的基础API就有很多,也需要花时间熟悉这些API的功能和使用方法: 2.常用API  String类, StringBuffer, StringBuilder ,集合(list set map) ,包装类,日历日期,IO流 ,异