用PHP写APP接口,现在我也在学习中。。。

现在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;

    }

   

}

人生就如一列永不停止的列车,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;

    }

   

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,937评论 3 118
  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 31,790评论 2 89
  • spider里主要有三个套路。1.只爬取一个网页。先上代码 pycharm有个terminal,在最下面,在这里输...
    ddm2014阅读 1,016评论 0 0
  • 版权归作者所有,任何形式转载请联系作者。 作者:小山 来源: 年中换工作,公司离家偏远。为了不迟到,我开始早上六点...
    小山的随思录阅读 313评论 0 2