zoukankan      html  css  js  c++  java
  • PHP实现RESTful风格的API实例(二)

    接前一篇:PHP实现RESTful风格的API实例(一)

    Response.php :包含一个Request类,即输出类。根据接收到的Content-Type,将Request类返回的数组拼接成对应的格式,加上header后输出

     
    <?php
    /**
     * 输出类
     */
    class Response
    {
        const HTTP_VERSION = "HTTP/1.1";
    
        //返回结果
        public static function sendResponse($data)
        {
            //获取数据
            if ($data) {
                $code = 200;
                $message = 'OK';
            } else {
                $code = 404;
                $data = array('error' => 'Not Found');
                $message = 'Not Found';
            }
    
            //输出结果
            header(self::HTTP_VERSION . " " . $code . " " . $message);
            $content_type = isset($_SERVER['CONTENT_TYPE']) ? $_SERVER['CONTENT_TYPE'] : $_SERVER['HTTP_ACCEPT'];
            if (strpos($content_type, 'application/json') !== false) {
                header("Content-Type: application/json");
                echo self::encodeJson($data);
            } else if (strpos($content_type, 'application/xml') !== false) {
                header("Content-Type: application/xml");
                echo self::encodeXml($data);
            } else {
                header("Content-Type: text/html");
                echo self::encodeHtml($data);
            }
        }
    
        //json格式
        private static function encodeJson($responseData)
        {
            return json_encode($responseData);
        }
    
        //xml格式
        private static function encodeXml($responseData)
        {
            $xml = new SimpleXMLElement('<?xml version="1.0"?><rest></rest>');
            foreach ($responseData as $key => $value) {
                if (is_array($value)) {
                    foreach ($value as $k => $v) {
                        $xml->addChild($k, $v);
                    }
                } else {
                    $xml->addChild($key, $value);
                }
            }
            return $xml->asXML();
        }
    
        //html格式
        private static function encodeHtml($responseData)
        {
            $html = "<table border='1'>";
            foreach ($responseData as $key => $value) {
                $html .= "<tr>";
                if (is_array($value)) {
                    foreach ($value as $k => $v) {
                        $html .= "<td>" . $k . "</td><td>" . $v . "</td>";
                    }
                } else {
                    $html .= "<td>" . $key . "</td><td>" . $value . "</td>";
                }
                $html .= "</tr>";
            }
            $html .= "</table>";
            return $html;
        }
    }
     

    index.php :入口文件,调用Request类取得数据后交给Response处理,最后返回结果

     
    <?php
    //数据操作类
    require('Request.php');
    //输出类
    require('Response.php');
    //获取数据
    $data = Request::getRequest();
    //输出结果
    Response::sendResponse($data);
     

    下一篇:PHP实现RESTful风格的API实例(三)

  • 相关阅读:
    (二) 线程创建、中止、中断、线程Join、优先级、调度
    cmake 生成64位项目
    ffmpeg + sdl player console
    ffmpeg cmd
    ffmpeg coco2d-x lua test
    ffmpeg windows config win32/win64 compile
    ffmpeg configure --help
    ffmpeg Windows platfrom ndk compile ffmpeg
    NDK r21编译FFmpeg 4.2.2(x86、x86_64、armv7、armv8)
    解决NDK交叉编译 selected processor does not support ARM mode libtheora的错误
  • 原文地址:https://www.cnblogs.com/quanzhiguo/p/7157773.html
Copyright © 2011-2022 走看看