上篇记录了怎样实现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。
这两个类为工具类,实现也不复杂,功能单一,需要继续丰富修改。