IT序号网

PHP实现RESTful风格的API实例(二)

developer 2021年06月13日 编程语言 352 0

接前一篇: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实例(三)


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

PHP实现RESTful风格的API实例(一)