摘要:方式是最常用也是最直接的通常用于方法,其實我認為中的表單實質上也是方式,但這種傳輸方式數(shù)據(jù)有限,也不規(guī)范,只適合一些簡單場景。如何封裝上面講了,和是目前主流的通信數(shù)據(jù)格式,下面就來講講如何封裝,方便運用。
必要性謝謝大家的收藏與贊,這是對我最大的鼓勵。
不管在B/S架構中,還是C/S架構中,兩端的數(shù)據(jù)通信(注:這里的通信是指的網(wǎng)絡請求和回復操作)都無可避免,因為沒有數(shù)據(jù)便沒有內容,沒有內容,又有什么意義 :)
一般來說C/S架構通信執(zhí)行流程如下:
而B/S架構通信執(zhí)行流程像這樣:
選擇既然數(shù)據(jù)通信,不可避免,那應該選擇哪種通信方式比較好呢?目前來看服務器與客戶端進行數(shù)據(jù)傳輸與交互的方式主要有URL、XML、JSON三種方式。
URL方式是最常用也是最直接的,通常用于GET方法,其實我認為POST中的Form表單實質上也是URL方式,但這種傳輸方式數(shù)據(jù)有限,也不規(guī)范,只適合一些簡單場景。
XML和JSON實質上都是對數(shù)據(jù)的描述,目的是對復雜數(shù)據(jù)進行分割、包裝、規(guī)范化等一系列處理,方便數(shù)據(jù)傳輸和解析,相對來說JSON比XML更輕巧但卻更靈活強大,舉個例子:用以上兩種方式表示我的個人信息如下:
JSON: {"name":"entner","age":21,"gender":"男"} XML:entner 21 男
有興趣的讀者,可以參看后面的參考鏈接,寫的非常詳細。
如何封裝?上面講了,XML和JSON是目前主流的通信數(shù)據(jù)格式,下面就來講講如何封裝,方便運用。
假設我們在后臺操作數(shù)據(jù)庫服務器得到數(shù)組數(shù)據(jù),對于數(shù)組轉Json只需要json_encode函數(shù)就夠了,它會自動遞歸檢測,對于數(shù)組轉XML,就需要嚴格按照格式來,具體看代碼和注釋吧。
Source Code$code, "message"=>$message, "data"=>$data ); /* 由客戶端傳遞參數(shù)決定封裝數(shù)據(jù)的格式,默認Json格式 */ $type = isset($_GET["format"])? $_GET["format"]:self::JSON; if($type == "xml"){ $this->xmlEnCode($code,$message,$data); exit; //一次不允許并發(fā)多種格式,所以沒必要執(zhí)行下面的判斷 }else if($type == "json"){ $this->jsonEncode($code,$message,$data); exit ; }else if($type == "array"){ var_dump($result); exit; }else{ // 客戶端傳來的數(shù)據(jù)格式為 http/ftp/ } } /** *輸出Json格式通信數(shù)據(jù) *@param inter code 狀態(tài)碼 *@param char message 消息提示 *@param array data 通信數(shù)據(jù) *return string */ public function jsonEnCode($code,$message,$data=array()){ if(!is_numeric($code)){ exit(); } $result = array( "code"=>$code, "message"=>$message, "data"=>$data ); echo json_encode($result); //json_encode會自動遞歸轉換數(shù)組變量 return true; } /** *輸出XML格式通信數(shù)據(jù) *@param inter code 狀態(tài)碼 *@param char message 消息提示 *@param array data 通信數(shù)據(jù) *return string */ public function xmlEnCode($code,$message,$data=array()){ if(!is_numeric($code)){ exit(); } $result = array( "code"=>$code, "message"=>$message, "data"=>$data ); /* 拼接xml格式數(shù)據(jù) */ /* 這里一定要注意聲明頭部信息和XML聲明 */ header("Content-type:text/xml"); $xml = " "; $xml .= "參考鏈接"; /* XML標簽其實也是字符串,所以要用 . 連接運算符 */ $xml .= self::xmlToJson($result); /* 調用xmlToJson函數(shù)解析數(shù)組轉換為節(jié)點 */ $xml .= " "; echo $xml; } /** *遞歸拼接XML數(shù)據(jù) *@param inter code 狀態(tài)碼 *@param char message 消息提示 *@param array data 通信數(shù)據(jù) *return string */ public static function xmlToJson($data){ $xml = $attr = ""; foreach($data as $k => $v){ /*XML不允許出現(xiàn)數(shù)字標簽,所以要么獎數(shù)字轉化為字母,要么混合拼接,這里采用很合拼接的方式 */ if(is_numeric($k)){ $attr = " id = "{$k}" "; $k = "item"; $xml .="<{$k}{$attr}> "; /* 因為數(shù)組內部可能還存在數(shù)組,所以需要自行遞歸檢查一遍,注意,在每次遞歸的時候,都要連接在$xml尾部,并換行 */ $xml .=is_array($v)?self::xmlToJson($v):$v; $xml .="{$k}> "; }else{ $xml .="<{$k}> "; $xml .=is_array($v)?self::xmlToJson($v):$v; $xml .="{$k}> "; } } return $xml; } } $data = array( "name"=>"entner", "type"=>array( 0=>"a", 1=>"b" ) ); $try = new Json(); $try->xmlEnCode(200,"success",$data);
淺談PHP與手機APP開發(fā)即API接口開發(fā)
C/S B/S 及WEB工作原理
對比分析json及XML
這幾天在搬宿舍,剛忙完,第一時間就來了,哈哈。
還是那句老話,歡迎各位留言和評論。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/23250.html
摘要:方式是最常用也是最直接的通常用于方法,其實我認為中的表單實質上也是方式,但這種傳輸方式數(shù)據(jù)有限,也不規(guī)范,只適合一些簡單場景。如何封裝上面講了,和是目前主流的通信數(shù)據(jù)格式,下面就來講講如何封裝,方便運用。 謝謝大家的收藏與贊,這是對我最大的鼓勵。 必要性 不管在B/S架構中,還是C/S架構中,兩端的數(shù)據(jù)通信(注:這里的通信是指的網(wǎng)絡請求和回復操作)都無可避免,因為沒有數(shù)據(jù)便沒有內容,沒...
摘要:概述謝謝大家的收藏與贊,這是對我最大的鼓勵。這一系列文章主要是一些常用的類操作,回顧一下面向對象,我一直致力于小白文章的撰寫,因為我也是小白,相信有人需要,希望讀者能夠喜歡。 概述 謝謝大家的收藏與贊,這是對我最大的鼓勵。這一系列文章主要是一些PHP常用的類操作,回顧一下面向對象,我一直致力于小白文章的撰寫,因為我也是小白,相信有人需要,希望讀者能夠喜歡。 說明 關于PHP語言實現(xiàn)...
摘要:概述謝謝大家的收藏與贊,這是對我最大的鼓勵。這一系列文章主要是一些常用的類操作,回顧一下面向對象,我一直致力于小白文章的撰寫,因為我也是小白,相信有人需要,希望讀者能夠喜歡。 概述 謝謝大家的收藏與贊,這是對我最大的鼓勵。這一系列文章主要是一些PHP常用的類操作,回顧一下面向對象,我一直致力于小白文章的撰寫,因為我也是小白,相信有人需要,希望讀者能夠喜歡。 說明 關于PHP語言實現(xiàn)...
閱讀 1123·2021-11-08 13:13
閱讀 1707·2019-08-30 15:55
閱讀 2762·2019-08-29 11:26
閱讀 2426·2019-08-26 13:56
閱讀 2549·2019-08-26 12:15
閱讀 2125·2019-08-26 11:41
閱讀 1394·2019-08-26 11:00
閱讀 1530·2019-08-23 18:30