1. 程式人生 > >php開發App介面

php開發App介面


APP介面簡介:

什麼是app介面?app介面就是用服務端程式如php寫好的指令碼,以供app客戶端請求而獲得資料的一個東西。比如一個視訊app的首頁,肯定有一些視訊列表,那麼當你開啟這個app時,這個封裝在app裡的這個首頁其實會去請求一個遠端php檔案如:http://www.example.com/index.php 去獲得需要展示在首頁的視訊列表資料。前段工程師拿到這些資料,就會按照特定的設計,將這些內容展示出來了。

  介面要實現的目的就是這樣。一個app內部通常需要訪問多個php介面來獲得不同的資料。下面具體講一講介面實現的流程以及實現介面需要的一些核心的技術。

思路流程:

 

如何通訊:


客戶端傳送http請求 伺服器返回資料。

 

封裝通訊介面方法:

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;
    }
    
}


總結:

1、對於資料的輸出最好用json,json具有相當強大的跨平臺性,市場上各大主流程式語言都支援json解析,json正在逐步取代xml,成為網路資料的通用格式
2、介面安全,一定要增加介面驗證。例如,客戶端和服務端針對不同介面統一做好加密方式,服務端在對於每次介面需要都要進行驗證。以保證防止介面被惡意重新整理或黑客惡意呼叫,尤其是大型商業應用。
3、對於線上的 API 必須保證所有介面正常且關閉所有的錯誤資訊 => error_reporting(0),在輸出JSON 時,不能有任何其它輸出,否則,客戶端將解析資料失敗,直接 Crash!
4、開發 API 和 WEB 有一定的區別,如果是 WEB 的話,可能程式碼出錯了,不會導致特別嚴重的錯誤,也許只是導致資料寫入和查詢失敗,也許導致 WEB 的某個部分錯位或亂碼。但如果是 API,直接 Crash!