zoukankan      html  css  js  c++  java
  • php 创建简单的Restful WebAPI(三)

      上篇记录了怎样实现route,本篇记录怎么实现request,response。

      Request 处理请求

    <?php
    
    class Request
    {
        private $request_vars;  
        private $data;  
        private $http_accept;  
        private $method; 
        private $ID; 
      
        public function __construct($id = null)  
        {  
            $this->request_vars      = array();  
            $this->data              = array(); 
            $this->http_accept       = 'application/json';  
            $this->method            = 'get';  
            $this->ID                = $id;  
            $this->processRequest();
        }  
    
        public function processRequest()
        {
            $request_method = strtolower($_SERVER['REQUEST_METHOD']);
            $this->setMethod($request_method);  
    
            $request_vars = $_GET;
            if($request_vars != ''){
                $this->setRequestVars($request_vars); 
            }  
    
            $data = file_get_contents('php://input');
            if($data != ''){
                $this->setData(json_decode($data,TRUE));  
            } 
        } 
    
        public function setID($id)  
        {  
            $this->ID = $id;  
        }  
      
        public function setData($data)  
        {  
            $this->data = $data;  
        }  
      
        public function setMethod($method)  
        {  
            $this->method = $method;  
        }  
      
        public function setRequestVars($request_vars)  
        {  
            $this->request_vars = $request_vars;  
        }
    
        public function getID()  
        {  
            return $this->ID;  
        }  
      
        public function getData()  
        {  
            return $this->data;  
        }  
      
        public function getMethod()  
        {  
            return $this->method;  
        }  
      
        public function getHttpAccept()  
        {  
            return $this->http_accept;  
        }  
      
        public function getRequestVars()  
        {  
            $this->request_vars['id'] = $this->ID;
            return $this->request_vars;  
        }  
    }  
    
    ?>

      代码十分简单,就是从request获取请求method,querystring,请求body数据(json格式)。

      Response 发送响应

    <?php
    
    class Response
    {
        public function __construct()  
        {
        }
    
        public function sendResponse($status = 200, $body = '', $content_type = 'application/json') 
        {
             $status_header = 'HTTP/1.1 ' . $status . ' ' . $this->getStatusCodeMessage($status);  
             header($status_header);  
             header('Content-type: ' . $content_type . '; charset=utf-8'); 
             echo $body;
             exit;  
        }
    
        public function getStatusCodeMessage($status)  
        {  
            $codes = Array(  
                100 => 'Continue',  
                101 => 'Switching Protocols',  
                200 => 'OK',  
                201 => 'Created',  
                202 => 'Accepted',  
                203 => 'Non-Authoritative Information',  
                204 => 'No Content',  
                205 => 'Reset Content',  
                206 => 'Partial Content',  
                300 => 'Multiple Choices',  
                301 => 'Moved Permanently',  
                302 => 'Found',  
                303 => 'See Other',  
                304 => 'Not Modified',  
                305 => 'Use Proxy',  
                306 => '(Unused)',  
                307 => 'Temporary Redirect',  
                400 => 'Bad Request',  
                401 => 'Unauthorized',  
                402 => 'Payment Required',  
                403 => 'Forbidden',  
                404 => 'Not Found',  
                405 => 'Method Not Allowed',  
                406 => 'Not Acceptable',  
                407 => 'Proxy Authentication Required',  
                408 => 'Request Timeout',  
                409 => 'Conflict',  
                410 => 'Gone',  
                411 => 'Length Required',  
                412 => 'Precondition Failed',  
                413 => 'Request Entity Too Large',  
                414 => 'Request-URI Too Long',  
                415 => 'Unsupported Media Type',  
                416 => 'Requested Range Not Satisfiable',  
                417 => 'Expectation Failed',  
                500 => 'Internal Server Error',  
                501 => 'Not Implemented',  
                502 => 'Bad Gateway',  
                503 => 'Service Unavailable',  
                504 => 'Gateway Timeout',  
                505 => 'HTTP Version Not Supported'  
            ); 
            return (isset($codes[$status])) ? $codes[$status] : '';  
        }
    }  
    
    ?>

      生成response。

      这两个类为工具类,实现也不复杂,功能单一,需要继续丰富修改。

  • 相关阅读:
    MySQL的双主配置
    MySQL主从复制配置部署
    Linux centOS安装MySQL
    hive搜索报错
    常用设计模式
    Cookie禁用 获取session
    排序算法
    MySQL优化
    javascript Map和Set
    ThinkPHP的基本操作
  • 原文地址:https://www.cnblogs.com/coldlern/p/3954569.html
Copyright © 2011-2022 走看看