91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

php中怎么實現RESTful風格

發布時間:2020-05-15 17:43:28 來源:億速云 閱讀:316 作者:Leah 欄目:編程語言

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

再定義一個數據輸出類,將數據輸出的格式進行統一的封裝;最后將方法返回的數據進行輸出即可。

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

以上就是php實現RESTful風格的方法介紹,詳細使用情況還得要大家自己使用過才能知道具體要領。如果想閱讀更多相關內容的文章,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂伦春自治旗| 城步| 灵川县| 确山县| 社旗县| 陕西省| 通道| 浏阳市| 缙云县| 屯门区| 汕尾市| 上饶市| 高阳县| 乌鲁木齐县| 巩义市| 武山县| 于都县| 札达县| 民和| 杭锦旗| 泸溪县| 通化县| 咸宁市| 米林县| 平泉县| 铜山县| 南城县| 龙岩市| 平原县| 古田县| 金坛市| 蛟河市| 繁峙县| 龙海市| 吴桥县| 海原县| 陆丰市| 福建省| 榆中县| 怀化市| 阿拉善盟|