PHP如何实现RESTful原理
首先定义一个请求数据接收类;然后请求类中根据请求类型,进行访问不通方法;
class Request { // 允许的请求方式 private static $method_type = array('get', 'post', 'put', 'patch', 'delete'); // 测试数据 private static $test_class = array( 1 => array('name'=>'测试一班','count'=>18), 2 => array('name'=>'测试二班','count'=>15) ); public static function getRequest() { // 请求方法 $method = strtolower($_SERVER['REQUEST_METHOD']); if (in_array($method, self::$method_type)) { // 调用请求方法对应的方法 $data_name = $method . "Data"; return self::$data_name($_REQUEST); } return false; } // GET 获取信息 private static function getData($request_data) { $class_id = (int)$request_data['class']; if ($class_id > 0) { // GET /class/ID: 获取某个指定班的信息 return self::$test_class[$class_id]; }else{ // GET /class: 列出所有班级 return self::$test_class; } } // POST /class 新建一个班级 private static function postData($request_data) { $class_id = (int)$request_data['class']; if ($class_id == 0) { return false; } $data = array(); if (!empty($request_data['name']) && isset($request_data['count'])) { $data['name'] = $request_data['name']; $data['count'] = $request_data['count']; self::$test_class[] = $data; return self::$test_class; }else{ return false; } } // PUT /class/ID 更新某个指定班级的信息(全部信息) private static function putData($request_data) { $class_id = (int)$request_data['class']; if ($class_id == 0) { return false; } $data = array(); if (!empty($request_data['name']) && isset($request_data['count'])) { $data['name'] = $request_data['name']; $data['count'] = (int)$request_data['count']; self::$test_class[$class_id] = $data; return self::$test_class; }else{ return false; } } // PATCH /class/ID 更新某个指定班级的信息 (部分信息) private static function pacthData($request_data) { $class_id = (int)$request_data['class']; if ($class_id == 0) { return false; } if (!empty($request_data['name'])) { self::$test_class[$class_id]['name'] = $request_data['name']; } if (isset($request_data['count'])) { self::$test_class[$class_id]['count'] = $request_data['count']; } return self::$test_class; } // DELETE /class/ID 删除某个班 private static function deleteData($request_data) { $class_id = (int)$request_data['class']; if ($class_id == 0) { return false; } unset(self::$test_class[$class_id]); return self::$test_class; } }
登录后复制
再定义一个数据输出类,将数据输出的格式进行统一的封装;最后将方法返回的数据进行输出即可。
"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); }elseif (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(''); 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 = "
登录后复制”; foreach ($responseData as $key => $value) { $html .= “”; if (is_array($value)) { foreach ($value as $k => $v) { $html .= “$k$v”; } }else{ $html .= “$key$value”; } $html .= “”; } $html .=””; return $html; } } ?>
推荐教程:《PHP教程》
立即学习“PHP免费学习笔记(深入)”;
以上就是PHP如何实现RESTful原理的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2139565.html