接口的封裝

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是應用程序的入口和出口,一般在這裏處理一些啓動和退出程序時需要讀取或寫入的設置信息,還有設置一些全局變量

接口的組成

基本組成部分

  1. 接口地址:客戶端發送請求或者是接收後臺發送過來的數據。
  2. 接口文件(在服務器端):處理業務邏輯。
  3. 接口數據。

接口數據類型
目前用來寫接口的數據類型比較流行的是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的區別
我們可以從三個方面進行行分析:

  1. 可讀性:重我們打印出來的數據結構我們不難看出,XML數據結構是一個樹形結構,所有的節點和數據值可以一目瞭然,而json則是以一個key:values的形式呈現出來,數據少的時候還好說,一旦數據多了根本看不出來。

    XML數據結構
    XML數據結構
    JSON數據結構
    json數據結構

  2. 數據生成:json要比XML便捷,XML的節點必須成對出現,要有始有終。json數據只需要以key/values的形式出項無形中節約了存儲空間。

  3. 數據傳輸:在數據傳輸方面json數據要比XML小所以json的傳輸效率要比XML要好。

注意:

  1. json格式只能接受UTF-8編碼的數據,其他編碼方式的數據會返回null.
  2. 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;
          }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章