人生就如一列永不停止的列車,no one knows when or where to stop.總有那些美好,值得永遠懷念。也總有那些希望,值得你無怨無悔的付出,追逐。去年年底帶着女兒一起坐火車會湖北老家,她在火車上,三歲的樣子,活潑,調皮,可愛的樣子,永遠停在那兒,不會有一樣的了吧。cherish this memory forever.
現在app這么火,作為一個phper,應該知道如何寫app的接口,下面做一個講解。
Index:
第1章 APP接口簡介
-
第2章 封裝通信接口方法
2-1 JSON方式封裝通信接口 (14:39)
2-2 PHP生成XML數據 (12:02)
2-3 XML方式封裝通信接口 (17:50)
2-4 綜合方式封裝通信數據方法 (11:15)
-
第3章 核心技術
3-1 靜態緩存 (17:16)
3-2 Memcache和Redis緩存技術 (24:07)
3-3 定時任務 (16:46)
-
第4章 APP接口實例
4-1 單例模式連接數據庫 (18:29)
4-2 首頁APP接口開發之方案一(上) (15:49)
4-3 首頁APP接口開發之方案一(下) (11:03)
4-4 讀取緩存方式開發首頁接口 (19:21)
4-5 定時讀取緩存方式開發首頁接口 (16:32)
最近學習
4-6 版本升級分析及數據表設計 (08:15)
4-7 版本升級接口開發及演示(上) (19:26)
4-8 版本升級接口開發及演示(下) (09:29)
4-9 APP錯誤日志接口 (13:22)
第一章 APP接口簡介
什么是app接口?app接口就是用服務端程序如php寫好的腳本,以供app客戶端請求而獲得數據的一個東西。比如一個視頻app的首頁,肯定有一些視頻列表,那么當你打開這個app時,這個封裝在app里的這個首頁其實會去請求一個遠程php文件如:http://www.example.com/index.php 去獲得需要展示在首頁的視頻列表數據。前段工程師拿到這些數據,就會按照特定的設計,將這些內容展示出來了。
接口要實現的目的就是這樣。一個app內部通常需要訪問多個php接口來獲得不同的數據。下面具體講一講接口實現的流程以及實現接口需要的一些核心的技術。
第2章 封裝通信接口方法
在正式的進入app接口學習之前,我們來回顧一下Php的接口知識,看下面代碼:
interface.php
<?php /** *@description php接口回顧 *@author doubi *@date 2015/07/19 */ interface People{ public function say(); public function dance(); } interface Animal{ public function bite(); } class Man implements People{ public function say(){ echo 'i can say'; } public function dance(){ echo 'i can dance'; } } class Woman implements People{ public function say(){ echo 'i can say girl voice'; } public function dance(){ echo 'i can dance like a goose'; } } class Bird implements Animal{ public function bite(){ echo 'i can bite'; } } class Hybreed implements People,Animal{ public function say(){ echo 'i can say'; } public function dance(){ echo 'i can dance'; } public function bite(){ echo 'i can bite'; } } $hybreed = new Hybreed; echo $hybreed->say()."\r\n"; echo $hybreed->dance()."\r\n"; echo $hybreed->bite()."\r\n";
接口存在的意義就是實現“多重繼承”,准確的來說應該就做“多重實現“,因為一個php類只能有一個父類,而一個類卻可以實現多個接口,就像上面代碼interface.php中的Hybreed類,即實現了people接口,又實現了Animal接口,而通過這種多重繼承,最終的$hybreed即獲得了人類的say和dance的方法,又獲得了動物的bite方法。而Man類和Woman類分別實現People的接口,采用不同的內容去重寫了say和dance方法,正是一種多態的體現。
現在主流的通信接口返回的數據主要有JSON和XML兩種格式。這兩種格式各有優缺點。JSON的優勢是生成方便,體積小,更便於傳輸,缺點是不便於閱讀。而XML的優點是便於閱讀,但是體積大,生成較JSON要麻煩的多。
2-1 JSON方式封裝通信接口 (14:39)
先上代碼:
response.class.php
<?php /** *description 用於返回指定數據格式的類 *@param $code [int] 返回的狀態碼 *@param $message [string] 返回的狀態信息 *@param $data [array] 需要返回的數據 * */ class Response{ public function json($code,$message,$data){ $result = array( "code" => $code, "message" => $message, "data" => $data ); return json_encode($result); } }
response.class.php是一個最簡單的返回json格式數據的類,在下面的課程中我們會進一步對其進行完善。
下面貼出接口文件代碼:
returndata.php
<?php require "response.class.php"; //引入返回信息類 //准備返回數據 $code = 200; $message = "信息請求成功"; $data = array( "name" => "ruanwnewu", "sex" => "1", "age" => "28", "exp" => array( "2012" => "北京瑞泰新", "2013" => "兄弟連", "2014" => "木螞蟻科技" ) ); //實例化response類 $response = new Response; //返回數據 echo $response -> json($code,$message,$data);
請求returndata.php接口返回的數據如下圖所示:
這樣就完成了一個最基本的,封裝好的json數據通信接口。
2-2 PHP生成XML數據 (12:02)
生成XML格式數據一般有三種方法:
- 拼接字符串
- domDocument
- simpleXML
在這里我只講解第一種方法生成XML數據的方法。上代碼:
producexml.php
<?php header('Content-Type:text/xml'); $xml = '<?xml version="1.0" encoding="utf-8" ?>'; $xml .= '<res>'; $xml .= '<code>404</code>'."\r\n"; $xml .= '<message>數據返回成功</message>'."\r\n"; $xml .= '<data>'."\r\n"; $xml .= '<name>軟文無</name>'."\r\n"; $xml .= '<sex>1</sex>'."\r\n"; $xml .= '<age>28</age>'."\r\n"; $xml .= '</data>'; $xml .= '</res>'; echo $xml;
2-3 XML方式封裝通信接口 (17:50)
上代碼:
<?php
/**
*description 用於返回指定數據格式的類
*@param $code [int] 返回的狀態碼
*@param $message [string] 返回的狀態信息
*@param $data [array] 需要返回的數據
*/
class Response{
public function json($code,$message,$data){
$result = array(
"code" => $code,
"message" => $message,
"data" => $data
);
return json_encode($result);
}
public function xml($code,$message,$data){
$result = array(
"code" => $code,
"message" => $message,
"data" => $data
);
header('Content-Type:text/xml');
$xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
$xml .= "<root>";
$xml .= self::encodeXml($result);
$xml .= "</root>";
return $xml;
}
/**
*將數據解析為XML字符串
*/
public static function encodeXml($data){
$attr = $xml = "";
foreach($data as $key => $value){
if(is_numeric($key)){
$attr = " id='{$key}'";
$key = "item";
}
$xml .= "<{$key}{$attr}>";
$xml .= is_array($value)?self::encodeXml($value):$value;
$xml .= "</$key>";
}
return $xml;
}
}
同樣用returndata.php調用該接口:
<?php require "response.class.php"; //引入返回信息類 //准備返回數據 $code = 200; $message = "信息請求成功"; $data = array( "name" => "ruanwnewu", "sex" => "1", "age" => "28", "exp" => array( "2012" => "北京瑞泰新", "2013" => "兄弟連", "2014" => "木螞蟻科技" ) ); //實例化response類 $response = new Response; //返回數據 echo $response -> xml($code,$message,$data);
得到如下圖所示的XML文件結果
2-4 綜合方式封裝通信數據方法 (11:15)
將兩種封裝方法綜合起來,並能夠根據請求的參數來返回指定格式的數據,上代碼:
完善后的response類
<?php /** *description 用於返回指定數據格式的類 *@param $code [int] 返回的狀態碼 *@param $message [string] 返回的狀態信息 *@param $data [array] 需要返回的數據 */ class Response{ public function show($code,$message,$data,$type="json"){ if($type == "json"){ $this->json($code,$message,$data); }else{ $this->xml($code,$message,$data); } } public function json($code,$message,$data){ $result = array( "code" => $code, "message" => $message, "data" => $data ); return json_encode($result); } public function xml($code,$message,$data){ $result = array( "code" => $code, "message" => $message, "data" => $data ); header('Content-Type:text/xml'); $xml = "<?xml version='1.0' encoding='UTF-8'?>\n"; $xml .= "<root>"; $xml .= self::encodeXml($result); $xml .= "</root>"; return $xml; } /** *將數據解析為XML字符串 */ public static function encodeXml($data){ $attr = $xml = ""; foreach($data as $key => $value){ if(is_numeric($key)){ $attr = " id='{$key}'"; $key = "item"; } $xml .= "<{$key}{$attr}>"; $xml .= is_array($value)?self::encodeXml($value):$value; $xml .= "</$key>"; } return $xml; } }
未完待續。。。