PHP实现RESTful风格的API实例

Posted 成九云笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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实例(三)

以上是关于PHP实现RESTful风格的API实例的主要内容,如果未能解决你的问题,请参考以下文章

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现RESTful风格的API实例

PHP实现Restful风格的API