PHP開發APP介面全過程(一)
1、學習要點:
伺服器端 –> 資料庫|快取 –>呼叫介面 –>客戶端
2、APP介面介紹:(PHP開發APP介面)
PHP面向物件的介面:抽象類,interface定義 ==>interface.php
===>1.很規範
APP介面(通訊介面):通過介面得到資料,將資料填充到APP中
—>APP開發人員關注:請求APP地址(介面地址)+返回資料
APP(通訊)介面定義:
1.介面地址:http://app.com/api.php?format=xml
2.介面檔案:app.php處理一些業務邏輯
3.介面資料
3.客戶端APP通訊:
APP是如何進行通訊的:
C (介面地址:http://app.com/api.php?format=xml/json) S 客戶端APP ------------------------------> 伺服器 <----------------------------- 返回資料
4.客戶端APP通訊格式區別
1.xml:擴充套件標記語言(1.用來標記資料,定義資料型別,是一種允許使用者對自己的標記語言進行定義的源語言,xml格式統一,跨平臺和語言,非常適合資料傳輸和通訊,早已成為業界公認的標準)
<?xml version="1.0" encoding="UTF-8"?>
<item>
<title>測試</title>
<test id="1">
<description>測試oen</description>
<address >深圳</address>
</item>
2.json:一種清涼級別的資料交換格式,具有良好的可讀和便於快速編寫的特性,可在不同平臺證件進行資料交換,JSON採用相容性很高的,完全獨立於語言文字格式。這種特性使JSON成為理想的資料交換語言。
XML的可讀性要好,JSON的生成資料性 (json_encode(陣列)) 傳輸速度方面要好
5.APP介面做的那些事:
獲取資料:從資料庫中或快取中獲取資料,然後通過介面資料返回客戶端
提交資料:通過介面提交資料給伺服器,然後通過伺服器入庫處理,或者其他處理
6.JSON方式封裝通訊介面
PHP生成json資料:json_encode($arr);
註釋:該函式只能接受UTF-8編碼的資料,如果傳遞其他格式的資料該函式會返回null
通訊資料標註格式:
code 狀態碼(200 400等)
message 提示資訊(郵箱格式不正確;資料返回成功等)
data 返回相應的資料
—————————-
-JSON
code : 200
message :”資料返回成功”
-data
id :1
name : “測試”
例項:
某個server中:
public function json($code,$message = '',$data = array())
{
if (!is_numeric($code)){
return '錯誤';
}
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
);
echo json_encode($result);
exit;
}
某個Controller:
public function jsonsAction()
{
$arr = array(
'id' => 1,
'name' => 'jiang'
);
$k = wei()->zhwCategory()->json(200,'成功咯',$arr);
return $k;
}
{"code":200,"message":"\u6210\u529f\u54af","data":{"id":1,"name":"jiang"}}
7.PHP生成XML資料:
7.1PHP生成XML資料
1.組裝字串
2.使用系統類:DomDocument
XMLWriter
SimpleXML
如用DomDocument:
<?php
$dom = new DomDocument('1.0','utf-8');
$element = $dom->createElement('test','This id root element');
$dom->appendChild($element);
echo $dom->saveXML();
?>
====>結果:
<?xml version="1.0" encoding="utf-8"?>
<test>This is the root element</test>
使用組裝字串的簡單例項性:
public static function xml()
{
header("Content-Type:text/html");
$xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
$xml .= "<root>\n";
$xml .= "<code>200</code>\n";
$xml .= "<message>資料返回成功</message>\n";
$xml .= "<data>\n";
$xml .="<id>1</id>\n";
$xml .="<name>測試</name>\n";
$xml .="</data>\n";
$xml .="<root>";
echo $xml;
}
7.2封裝XML資料方法:
封裝方法:xmlEncode($code,$message='',$data = array());
data資料分析:
1.array('index' => 'api');
2.array(1,7.89);
具體:
server模組下:
public function xmlEncode($code,$message = '',$data=array())
{
if(!is_numeric($code)){
return "錯誤";
}
$result = array(
'code' => $code,
'message' => $message,
'data' => $data,
);
header("Content-Type:text/xml");
$xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
$xml .= "<root>\n";
$xml .=self::xmlToEncode($result);
$xml .="</root>";
echo $xml;
}
//對資料再處理
public function xmlToEncode($data){
$xml = $attr ="";
foreach ($data as $key=>$value){
if(is_numeric($key)){
$attr = "id='{$key}'";
$key = "item";
}
$xml .= "<{$key} {$attr}>"; //它們{$key} {$attr}之間要有一個小空格
$xml .=is_array($value) ? self::xmlToEncode($value):$value;
$xml .="</{$key}>\n";
}
return $xml;
}
某個Controller:
public function xmlsAction()
{
$arr = array(
'id' => 1,
'name' => 'jiang',
'type' =>array(4,5,6),
'test' =>array(1,45,67=>array(1,2,3)),
);
$k = wei()->zhwCategory()->xmlEncode(200,'成功咯',$arr);
return $k;
}
8.綜合方式封裝通訊資料方法:
封裝方法:show($code,$message,$data=array(),$type='json/xml')
最終頁面:
server:
<?php
namespace Miaoxing\Zhw\Service;
use miaoxing\plugin\BaseModel;
class ZhwCategory extends BaseModel
{
const JSON = "json";
/**
* 按x綜合方式輸出通訊資料
* @param integer $code 狀態碼
* @param string $message 提示資訊
* @param array $data 資料
* @param string $type 資料型別
* return string
*/
public function show($code,$message='',$data=array(),$type = self::JSON)
{
if (!is_numeric($code)){
return "錯誤編碼";
}
$result = array(
'code' => $code,
'message' => $message,
'data' => $data,
);
if($type == 'json'){
self::json($code,$message,$data);
exit;
}elseif($type == 'array'){
var_dump($result);
}elseif ($type == 'xml'){
self::xmlEncode($code,$message,$data);
exit;
}else{
//TODO
}
}
/**
* 按json方式輸出通訊資料
* @param integer $code 狀態碼
* @param string $message 提示資訊
* @param array $data 資料
* return string
*/
public function json($code,$message = '',$data = array())
{
if (!is_numeric($code)){
return '錯誤';
}
$result = array(
'code' => $code,
'message' => $message,
'data' => $data
);
echo json_encode($result);
exit;
}
/**
* 按xml方式輸出通訊資料
* @param integer $code 狀態碼
* @param string $message 提示資訊
* @param array $data 資料
* return string
*/
public function xmlEncode($code,$message = '',$data=array())
{
if(!is_numeric($code)){
return "錯誤";
}
$result = array(
'code' => $code,
'message' => $message,
'data' => $data,
);
header("Content-Type:text/xml");
$xml = "<?xml version='1.0' encoding='UTF-8'?>\n";
$xml .= "<root>\n";
$xml .=self::xmlToEncode($result);
$xml .="</root>";
echo $xml;
}
//對資料再處理
public function xmlToEncode($data){
$xml = $attr ="";
foreach ($data as $key=>$value){
if(is_numeric($key)){
$attr = "id='{$key}'";
$key = "item";
}
$xml .= "<{$key} {$attr}>";
$xml .=is_array($value) ? self::xmlToEncode($value):$value;
$xml .="</{$key}>\n";
}
return $xml;
}
}
Controller:
public function jsonsAction()
{
$arr = array(
'id' => 1,
'name' => 'jiang'
);
$k = wei()->zhwCategory()->json(200,'成功咯',$arr);
return $k;
}
public function xmlsAction()
{
$arr = array(
'id' => 1,
'name' => 'jiang',
'type' =>array(4,5,6),
'test' =>array(1,45,67=>array(1,2,3)),
);
$k = wei()->zhwCategory()->xmlEncode(200,'成功咯',$arr);
return $k;
}
public function showAction()
{
$arr = array(
'id' => 1,
'name' => 'jiang',
'type' =>array(4,5,6),
'test' =>array(1,45,67=>array(1,2,3)),
);
$k = wei()->zhwCategory()->show(200,'成功咯',$arr,'json');
return $k;
}