php接口和APP(通信)接口的區別
什麼是php接口?
接口interface 是一個規定,給人繼承用的東西,有點像抽象類
在裏面定義的方法,卻不去實例化,而需要別的類去implements 它,而且必須一一實現接口定義的所有方法。
例如:
interface Shop
{
public function buy($gid);
public function sell($gid);
public function view($gid);
}
我聲明一個shop接口類,定義了三個方法:買(buy),賣(sell),看(view),那麼繼承此類的所有子類都必須實現這3個方法少一個都 不行,如果子類沒有實現這些話,就無法運行。實際上接口類說白了,就是一個類的模板,一個類的規定,如果你屬於這類,你就必須遵循我的規定,少一個都不 行,但是具體你怎麼去做,我不管,那是你的事,如:
class BaseShop implements Shop
{
public function buy($gid)
{
echo('你購買了ID爲 :'.$gid.'的商品');
}
public function sell($gid)
{
echo('你賣了ID爲 :'.$gid.'的商品');
}
public function view($gid)
{
echo('你查看了ID爲 :'.$gid.'的商品');
}
}
什麼是通信接口?
程序設計方面App 是Application 的縮寫
在vc++中,app是應用程序的入口和出口,一般在這裏處理一些啓動和退出程序時需要讀取或寫入的設置信息,還有設置一些全局變量
接口的組成
基本組成部分
- 接口地址:客戶端發送請求或者是接收後臺發送過來的數據。
- 接口文件(在服務器端):處理業務邏輯。
- 接口數據。
接口數據類型
目前用來寫接口的數據類型比較流行的是json和XML兩種類型。
XML:XML 是可擴展標記語言(Extensible Markup Language)的縮寫,其中的 標記(markup)是關鍵部分。您可以創建內容,然後使用限定標記標記它,從而使每個單詞、短語或塊成爲可識別、可分類的信息。您創建的文件,或文檔實例 由元素(標記)和內容構成。當從打印輸出讀取或以電子形式處理文檔時,元素能夠幫助更好地理解文檔。元素的描述性越強,文檔各部分越容易識別。自從出現標記至今,帶有標記的內容就有一個優勢,即在計算機系統缺失時,仍然可以通過標記理解打印出來數據。
json:JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。 JSON採用完全獨立於語言的文本格式,但是也使用了類似於C語言家族的習慣(包括C、C++、C#、Java、JavaScript、Perl、Python等)。這些特性使JSON成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成(一般用於提升網絡傳輸速率)。
JSON和XML的區別
我們可以從三個方面進行行分析:
可讀性:重我們打印出來的數據結構我們不難看出,XML數據結構是一個樹形結構,所有的節點和數據值可以一目瞭然,而json則是以一個key:values的形式呈現出來,數據少的時候還好說,一旦數據多了根本看不出來。
XML數據結構
JSON數據結構
數據生成:json要比XML便捷,XML的節點必須成對出現,要有始有終。json數據只需要以key/values的形式出項無形中節約了存儲空間。
數據傳輸:在數據傳輸方面json數據要比XML小所以json的傳輸效率要比XML要好。
注意:
- json格式只能接受UTF-8編碼的數據,其他編碼方式的數據會返回null.
- XML的節點不能爲數字。
接口編寫
通信接口數據標準格式
conde 狀態碼(200,400等);
message 提示信息(數據返回成功等);
data 返回數據;
以json格式傳輸數據
Response.php
<?php
class Response{
/**
* 按JSON方式輸出通信數據
* @param integer $code [狀態碼]
* @param string $message [提示信息]
* @param array $data [數據]
* return string
*/
public static function json($code,$message='',$data=array()){
if(!is_numeric($code)){
return '';
}
$result = array(
'code'=>$code,
'message'=>$message,
'data'=>$data
);
echo json_encode($result);
exit;
}
}
?>
ceshi.php
<?php
require_once('./response.php');
$arr = array(
'id'=>1,
'name'=>'zhansan'
);
Response::json('200','success',$arr);
?>
以XML格式傳輸數據
/**
* 按XML方式輸出通信數據
* @param integer $code [狀態碼]
* @param string $message [提示信息]
* @param array $data [數據]
* return string
*/
public static 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'?>";
$xml.="<root>";
$xml.=self::xmlTOEncode($result);
$xml.="</root>";
echo $xml;
}
/**
* [xmlTOEncode 數據處理]
* @param [array] $data [要處理的數據]
* @return [array] [description]
*/
public static function xmlTOEncode($data)
{
$xml = $attr="";
foreach($data as $key=>$value)
{
if(is_numeric($key)){
$attr.="id={$key}";
$key.="item";//防止節點出現數字報錯
}
$xml.="<{$key}>";
$xml.=is_array($value)?self::xmlTOEncode($value):$value;//遞歸處理數組
$xml.="</{$key}>";
}
return $xml;
}
將格式傳輸數據寫活
/**
* 按綜合方式輸出通信數據
* @param integer $code [狀態碼]
* @param string $message [提示信息]
* @param array $data [數據]
* @param strind $type [傳輸類型]
* return string
*/
const JSON = "json";
public static function show($code,$message='',$data=array(),$type){
if(!is_numeric($code)){
return '';
}
$result = array(
'code'=>$code,
'message'=>$message,
'data'=>$data
);
if($type=='json')
{
self::json($code,$message,$data);
exit;
}elseif($type=='xml')
{
self::xmlEncode($code,$message,$data);
exit;
}
}