RESTful API 设计

Posted lishalom

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RESTful API 设计相关的知识,希望对你有一定的参考价值。

网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。

因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这导致API构架的流行。

RESTful API 设计要素详见此文 : RESTful API 设计指南

以下简诉API的测试和它在php中的异常处理:

安装浏览器扩展工具 Restlet Client - DHC ,用于API的调试/测试

 

 

异常处理:

    /**
     * 常用状态码
     * @var [type]
     */
    private $_statusCodes = array(
        200 => \'OK\',
        204 => \'No Content\',
        400 => \'Bad Request\',
        401 => \'Unauthorized\',
        403 => \'Forbidden\',
        404 => \'Not Found\',
        405 => \'Method Not Allowed\',
        500 => \'Server INternal Error\'
    );
    /**
     * 判断请求方法和资源对象
     * @return [type] [description]
     */
    public function run()
    {
        //异常捕获,以免被暴露在前台
        try {
            $this->_setupRequestMethod();
            $this->_setupResource();
            if ($this->_resourceName == \'users\') {
                return $this->_json($this->_handleuser());
            } else {
                return $this->_json($this->_handleArticle());
            }
        } catch (Exception $e) {
            $arr[\'error\'] = $e->getMessage(); 
            $this->_json($arr, $e->getCode());
        }
    }
    /**
     * 输出JSON
     * @param  [type] $array [description]
     * @return [type]        [description]
     */
    private function _json($array, $code = 0)
    {
        //同步响应码
        if ($code > 0 && $code !== 200 && $code !== 204) {
            header("HTTP/1.1 " . $code . " " . $this->_statusCodes[$code]);
        }
        
        header(\'Content-Type:application/json;charset=utf-8\');
        // echo json_encode($array, JSON_UNESCAPED_UNICODE);
        echo json_encode($array);
        exit();
    }
    /**
     * 获取请求参数
     * @return [type] [description]
     */
    private function _getBodyParams()
    {
        //所传参数用双引号
        $raw = file_get_contents(\'php://input\');
        if (empty($raw)) {
            throw new Exception(\'请求参数错误\', 400);
        }
        return json_decode($raw, true);
    }

 

以上是关于RESTful API 设计的主要内容,如果未能解决你的问题,请参考以下文章

用产品思维设计API——RESTful就是个骗局

RESTful API的设计原则

RESTful及API设计(原)

在restful api 设计中,如果要获得一个资源,一定要用GET方法么

RESTful API设计规范收集

RESTful API 设计指南