app接口开发(php)
生活随笔
收集整理的這篇文章主要介紹了
app接口开发(php)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.JSON方式封裝通信接口:
封裝: response.php
<?php // JSON方式封裝通信接口 // 定義 response類 class Response {// 定義一個靜態方法,作用:按json方式產生數據 // 規范通信數據:參數一:狀態碼,參數二:消息提示(初始值為空),參數三:組裝后的數據(初始值為空數組)// 注釋碼:/*** 按json方式輸出通信數據* @param integer(數字類型) $code 狀態碼* @param string(字符串類型) $message 提示信息* @param array(數組類型) $data 數據* return(返回值) string(字符串類型)*/public static function json($code,$message = '',$data = array()){// 判斷$code是否為數字if(!is_numeric($code)){return '';}//將三個參數組裝成一個新的數組$result = array('code' => $code,'message' => $message,'data' => $data);// 通過json_encode(),產生json數據echo json_encode($result);// exit 終止程序且不輸出exit;} }?>?
調用:test.php
<?php // 加載Response類文件 require_once('./response.php'); // 定義一個數組變量 $arr = array('id' => 1,'name' => 'zhangsan' );// 調用類文件中的json()方法 Response::json(200,'數據返回成功',$arr); ?>?
2.XML方式封裝通信接口
2.0.1 PHP生成xml數據
封裝: response.php
public static function xml(){// header 發送一個http頭信息,將類型改為"text/xml",用于暴露xml節點header("Content-Type:text/xml");// 生成xml數據(通過字符串拼接的方法,首先定義一個變量$xml,存儲xml數據)// \n 用于換行$xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; // 頭信息$xml .= "<root>\n"; // 根節點$xml .= "<code>200</code>\n"; // 主體1$xml .= "<message>數據返回成功</message>\n"; // 主體2$xml .= "<data>\n"; // 主體3$xml .= "<id>1</id>\n";$xml .= "<name>zhangsan</name>\n";$xml .= "</data>\n";$xml .= "</root>";// 輸出拼接后的xml數據echo $xml;}?
2.0.2 xml方式封裝通信數據接口
封裝: response.php
<?php // 定義 response類 class Response {// xml方式封裝通信接口// 定義一個靜態方法,作用:按xml方式產生數據 // 規范通信數據:參數一:狀態碼,參數二:消息提示(初始值為空),參數三:組裝后的數據(初始值為空數組)// 注釋碼:/*** 按xml方式輸出通信數據* @param integer(數字類型) $code 狀態碼* @param string(字符串類型) $message 提示信息* @param array(數組類型) $data 數據* return(返回值) string(字符串類型)*/public static function xmlEncode($code,$message,$data = array()){// 判斷$code是否為數字if(!is_numeric($code)){return '';}//將三個參數組裝成一個新的數組$result = array('code' => $code,'message' => $message,'data' => $data);// 生成xml數據// 發送header頭信息,用于暴露xml節點header("Content-Type:text/xml");// 定義變量$xml,用于存儲拼接后的xml數據$xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; // 頭信息$xml .= "<root>\n"; // 根節點// 使用xmlToEncode()方法解析$result$xml .= self::xmlToEncode($result);$xml .= "</root>";// 輸出拼接后的xml數據echo $xml;}// 將$result拼接成新的xml數據// 參數:$data(新的數據),例如:$resultpublic static function xmlToEncode($data){// 解析$result// 定義變量$xml存儲數據$xml = "";// 初始化 $attr,當$key不為數字時,$attr為空$attr = "";// foreach循環遍歷$data數組foreach ($data as $key => $value) {// 判斷$key為數字的情況if(is_numeric($key)){// 添加屬性$attr = "id='{$key}'";$key = "item";}// $key是一個節點,$value是節點的一個數據,使用{}用于識別變量$xml .= "<{$key}{$attr}>\n"; // 開始標簽// $value是數組,使用遞歸,循環輸出(判斷是否為數組,如果是,則再次調用xmlToEncode方法)// 在一個類的方法(函數)的上下文中,靜態變量和函數被訪問使用self:: ,通過is_array()判斷$value是否為數組$xml .= is_array($value) ? self::xmlToEncode($value):$value; // 節點的數據$xml .= "</{$key}>\n"; // 結束標簽}// 循環結束后,輸出這一塊組裝好的xml數據return $xml;} }// 調用Response類的方法 $data = array('id' => 1,'name' => 'zhangsan' ); Response::xmlEncode(200,'success',$data);?>?
?
3.綜合方式封裝通訊接口:
封裝: response.php
<?php // 定義 response類 class Response {// 綜合方式封裝通信接口// 定義一個靜態方法,作用:綜合方式產生數據 // 規范通信數據:參數一:狀態碼,參數二:消息提示(初始值為空),參數三:組裝后的數據(初始值為空數組),參數四:數據類型(初始值為json)// 注釋碼:/*** 按綜合方式輸出通信數據* @param integer(數字類型) $code 狀態碼* @param string(字符串類型) $message 提示信息* @param array(數組類型) $data 數據* @param string(字符串類型) $type 數據類型* return(返回值) string(字符串類型)*/// 定義常量,默認數據類型const JSON = "json";public static function show($code,$message = '',$data = array(),$type = self::JSON){// 判斷$code是否為數字if(!is_numeric($code)){return '';}// 判斷類型,如果存在,則是通過get方法傳來的值,如果不存在,則是默認值json$type = isset($_GET['format'])?$_GET['format']:self::JSON;//將四個參數組裝成一個新的數組數據$result = array('code' => $code,'message' => $message,'data' => $data);// 如果數據類型為jsonif($type == 'json'){// 調用json()方法self::json($code,$message,$data);exit;}elseif($type == 'array') {// 如果數據類型為array(調試模式)// 直接輸出$resultvar_dump($result);}elseif($type == 'xml') {// 如果數據類型為xml// 調用xmlEncode()方法self::xmlEncode($code,$message,$data);exit;}else{// 其他類型}}// JSON方式封裝通信接口// 定義一個靜態方法,作用:按json方式產生數據 // 規范通信數據:參數一:狀態碼,參數二:消息提示(初始值為空),參數三:組裝后的數據(初始值為空數組)// 注釋碼:/*** 按json方式輸出通信數據* @param integer(數字類型) $code 狀態碼* @param string(字符串類型) $message 提示信息* @param array(數組類型) $data 數據* return(返回值) string(字符串類型)*/public static function json($code,$message = '',$data = array()){// 判斷$code是否為數字if(!is_numeric($code)){return '';}//將三個參數組裝成一個新的數組$result = array('code' => $code,'message' => $message,'data' => $data);// 通過json_encode(),產生json數據echo json_encode($result);// exit 終止程序且不輸出exit;}// xml方式封裝通信接口// 定義一個靜態方法,作用:按xml方式產生數據 // 規范通信數據:參數一:狀態碼,參數二:消息提示(初始值為空),參數三:組裝后的數據(初始值為空數組)// 注釋碼:/*** 按xml方式輸出通信數據* @param integer(數字類型) $code 狀態碼* @param string(字符串類型) $message 提示信息* @param array(數組類型) $data 數據* return(返回值) string(字符串類型)*/public static function xmlEncode($code,$message,$data = array()){// 判斷$code是否為數字if(!is_numeric($code)){return '';}//將三個參數組裝成一個新的數組$result = array('code' => $code,'message' => $message,'data' => $data);// 生成xml數據// 發送header頭信息,用于暴露xml節點header("Content-Type:text/xml");// 定義變量$xml,用于存儲拼接后的xml數據$xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; // 頭信息$xml .= "<root>\n"; // 根節點// 使用xmlToEncode()方法解析$result$xml .= self::xmlToEncode($result);$xml .= "</root>";// 輸出拼接后的xml數據echo $xml;}// 將$result拼接成新的xml數據// 參數:$data(新的數據),例如:$resultpublic static function xmlToEncode($data){// 解析$result// 定義變量$xml存儲數據$xml = "";// 初始化 $attr,當$key不為數字時,$attr為空$attr = "";// foreach循環遍歷$data數組foreach ($data as $key => $value) {// 判斷$key為數字的情況if(is_numeric($key)){// 添加屬性$attr = "id='{$key}'";$key = "item";}// $key是一個節點,$value是節點的一個數據,使用{}用于識別變量$xml .= "<{$key}{$attr}>\n"; // 開始標簽// $value是數組,使用遞歸,循環輸出(判斷是否為數組,如果是,則再次調用xmlToEncode方法)// 在一個類的方法(函數)的上下文中,靜態變量和函數被訪問使用self:: ,通過is_array()方法判斷$value是否為數組$xml .= is_array($value) ? self::xmlToEncode($value):$value; // 節點的數據$xml .= "</{$key}>\n"; // 結束標簽}// 循環結束后,輸出這一塊組裝好的xml數據return $xml;} }// 調用Response類的方法 $data = array('id' => 1,'name' => 'zhangsan' ); Response::xmlEncode(200,'success',$data);?>?
調用:test.php
<?php // 加載Response類文件 require_once('./response.php'); // 定義一個數組變量 $data = array('id' => 1,'name' => 'zhangsan','type' => array(4,5,6),'test' => array(1,45,67=>array(123,'tsysa')) );// 調用類文件中的show()方法 Response::show(200,'數據返回成功',$data,'json');?>?
?4.將數據緩存值指定文件中:
封裝:file.php
<?php // 定義類,作用:處理靜態緩存 class File {// 定義默認路徑 $_dirprivate $_dir;// 定義文件后綴const EXT = '.txt';// 將默認路徑放在構造函數里面public function __construct(){// dirname(__FILE__)獲取文件當前目錄(即當前php文件所在的目錄)// 設置默認緩存文件地址$this->_dir = dirname(__FILE__).'/files/';}// 將獲取緩存,生成緩存,刪除緩存 封裝在一個方法中// 參數一:緩存文件的文件名,參數二:緩存數據(默認值為空),參數三:保存緩存的文件路徑(默認值為空)public function cacheData($key,$value = '',$path = ''){// 拼裝成一個文件$filename = $this->_dir.$path.$key.self::EXT;// 判斷$values是否存在if($value!==''){// 將value值寫入緩存// 判斷$value是否為null,為null則刪除緩存if(is_null($value)){// unlink() 刪除緩存return @unlink($filename);}// 獲取文件目錄$dir = dirname($filename);// 判斷目錄是否存在,即判斷存儲緩存的文件是否存在,如果不存在,則創建緩存文件if(!is_dir($dir)){// 創建目錄,參數一:文件目錄名,參數二:設置權限mkdir($dir,0777);}// 將緩存數據寫入文件// 參數一:緩存文件名,參數二:緩存數據(只能是字符串的形式,通過json_encode()轉換)return file_put_contents($filename,json_encode($value));}// 判斷$filename是否存在if(!is_file($filename)){return FALSE;}else{// file_get_contents()獲取緩存值// json_decode()將json 轉換為數組形式return json_decode(file_get_contents($filename),true); // 傳入true返回原值}} }?>?
調用:test.php
<?php // 加載Response類文件 require_once('./file.php'); // 定義一個數組變量 $data = array('id' => 1,'name' => 'zhangsan','type' => array(4,5,6),'test' => array(1,45,67=>array(123,'tsysa')) );// new一個File類 $file = new File(); // 調用cacheData()方法 $file->cacheData('index_mk_cache',$data); // 添加緩存 if($file->cacheData('index_mk_cache',$data)){echo "success"; }else{echo "error"; } // 獲取緩存 if($file->cacheData('index_mk_cache'){var_dump($file->cacheData('index_mk_cache'));exit;echo "success"; }else{echo "error"; } // 刪除緩存 if($file->cacheData('index_mk_cache',null)){echo "success"; }else{echo "error"; }?>?
.
// 開始封裝:
通用:db.php
?
<?php // 單例模式連接數據庫 // 單例模式(限制類只能擁有一個實例) // 定義一個類 class Db {// 配置數據庫private $_dbConfig = array('host' => '127.0.0.1', // 數據庫地址'user' => 'root', // 用戶名'password' => '', // 密碼'database' => 'video', // 數據庫名);// 定義資源標識符(結果集)static private $_connectSource;// 用于一個保存類的實例的靜態成員變量 $_instance// 使用靜態私有變量保存類的實例static private $_instance;// __construct() 構造函數,函數執行時默認執行,一般用于初始化// 單例模式規定構造函數必須是非publicprivate function __construct(){}// 擁有一個訪問這個實例的公共的靜態方法// 定義getInstance()方法,便于在類的內部實例化類static public function getInstance(){// 檢查類有沒有被實例,如果有則返回變量if(!(self::$_instance instanceof self)){// 實例化類self::$_instance = new self();}// 返回一個類的實例return self::$_instance;}// php連接數據庫public function connect(){// 判斷資源是否存在if(!self::$_connectSource){// 連接數據庫 // @是可以屏蔽函數執行過程中遇到問題而產生的一些錯誤、警告信息,這樣用戶就看不到程序的出錯信息。這樣除了用戶界面會友好一些外,更重要的是安全性,因為屏蔽了出錯文件的路徑等信息。self::$_connectSource = @mysql_connect($this->_dbConfig['host'],$this->_dbConfig['user'],$this->_dbConfig['password']);// 如果沒有返回資源if(!self::$_connectSource){die('數據庫連接失敗'.mysql_error());}// 選擇數據庫// 參數一:數據庫名稱,參數二:資源標識符(結果集)mysql_select_db($this->_dbConfig['database'],self::$_connectSource);// 設置字符集mysql_query("set names UTF8",self::$_connectSource);}// 返回連接數據庫的資源return self::$_connectSource;}}// 調用 // 數據庫的連接,返回結果集 $connect = Db::getInstance()->connect(); var_dump($connect);?>?
方案一:讀取數據庫方式開發接口(直接連接數據庫獲取)
實例:list.php
<?php // 引入接口類 require_once('./response.php'); // 數據庫 require_once('./db.php'); // 接口樣例:http://app.com/list.php?page=1&pagesize=10 // 定義頁碼,并判斷是否存在,如果不存在給予默認值 $page = isset($_GET['page']) ? $_GET['page'] : 1; $pageSize = isset($_GET['pagesize']) ? $_GET['pagesize'] : 1; // 驗證傳值是否合法,判斷是否為數字 if(!is_numeric($page)||!is_numeric($pageSize)){// 生成接口數據// 通過return告知其他工程師,下面程序不執行return Response::show(401,'數據不合法'); } // 編寫SQL語句 // order by XXX desc :倒序排序 // limit 起始位置,數據條數 $offset = ($page - 1) * $pageSize; $sql = "select * from video where status = 1 order by orderby desc limit".$offset.",".$pageSize; // 捕獲異常 try{// $connect:連接標識符$connect = Db::getInstance()->connect(); }else(Exception $e){// 提示異常return Response::show(403,'數據庫連接失敗'); } // $result:資源標識符(結果集) $result = mysql_query($sql,$connect); // 定義一個空數組,用于存儲數據 $videos = array(); // while循環輸出所有的數據 while($video = mysql_fetch_assoc($result)) {// 每次循環,自動生成id,且值會放入$videos數組中$videos[] = $video; }// 使用Response類中的方法,將$videos中的數據轉換為json格式 // Response::show('狀態碼','提示語句','原始數據') if($videos){return Response::show(200,'首頁數據獲取成功',$videos); }else{return Response::show(400,'首頁數據獲取失敗',$videos); } ?>
方案二:讀取緩存方式開發接口(連接數據庫獲取的同時緩存一份,再次獲取時不再連接數據庫,而是讀取緩存,可設置緩存失效時間)
方案三:定時讀取緩存方式開發接口(通過crontab)
?
總結
以上是生活随笔為你收集整理的app接口开发(php)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ELK 中的elasticsearch
- 下一篇: ThinkPHP多次重复提交问题的根源