• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP如何实现RESTful原理

php 搞代码 4年前 (2022-01-04) 20次浏览 已收录 0个评论

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;      }  }

再定义一个数据输出类,将数据输出的格式进行统一的封装;最后将方法返回的数据进行输出即可。

  &l<a style="color:transparent">来源gao($daima.com搞@代@#码网</a>t;?php  /**  * 包含一个Response类,即输出类。根据接收到的Content-Type,将Request类返回的数组拼接成对应的格式,加上header后输出  */  class Response  {      const HTTP_VERSION = "HTTP/1.1";        public 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);          }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('<?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;      }  }  ?>

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP如何实现RESTful原理
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址