栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

用PHP编写一个APP的API

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用PHP编写一个APP的API

第一部分,通信接口的实现

标签(空格分隔): PHP 手机后台 api 通信接口 Andy


PHP是世界上最强大的语言。

PHP开发手机API时,一般返回XML或JSON数据类型的数据,除了要返回从源数据(程序本身需要的数据)外还应附上状态码,以下是一段封装后的数据,它使用JSON格式展现:

{    code: 200,
    message: "Success",
    data: [
        {
            username: "安明哲",
            password: "123456",
            level: "1",
            gold: "0",
            id: "6",
            create_time: "2015-09-26 08:25:31",
            is_active: "1",
            is_admin: "0"
        },
        {            username: "张三",
            password: "12345",
            level: "1",
            gold: "0",
            id: "8",
            create_time: "0000-00-00 00:00:00",
            is_active: "1",
            is_admin: "0"
        }
    ]
}

以下是XML格式数据的实例:


    200
    Success
    
        
        安明哲
        123456
        1
        0
        6
        2015-09-26 08:25:31
        1
        0
        
        
        张三
        12345
        1
        0
        8
        0000-00-00 00:00:00
        1
        0
        
    

此外,为了方便手机端开发人员的调试,还可直接返回带数据类型的数据:

array(3) {
  ["code"]=>
  int(200)
  ["message"]=>
  string(7) "Success"
  ["data"]=>  array(2) {
    [0]=>    array(8) {
      ["username"]=>
      string(9) "安明哲"
      ["password"]=>
      string(6) "123456"
      ["level"]=>
      string(1) "1"
      ["gold"]=>
      string(1) "0"
      ["id"]=>
      string(1) "6"
      ["create_time"]=>
      string(19) "2015-09-26 08:25:31"
      ["is_active"]=>
      string(1) "1"
      ["is_admin"]=>
      string(1) "0"
    }
    [1]=>    array(8) {
      ["username"]=>
      string(6) "张三"
      ["password"]=>
      string(5) "12345"
      ["level"]=>
      string(1) "1"
      ["gold"]=>
      string(1) "0"
      ["id"]=>
      string(1) "8"
      ["create_time"]=>
      string(19) "0000-00-00 00:00:00"
      ["is_active"]=>
      string(1) "1"
      ["is_admin"]=>
      string(1) "0"
    }
  }
}
如何实现

当手机客户端通过API获取数据时,PHP脚本会Response一个数组,并对这个数组进行encode,他们分别是json,xml和array;该数组,定义如下:

$result = [    "code" => 200,    "message" => "数据返回成功",    "data" => ["key"=>"value", "key"=>"value"]
]

其中,code代表状态码,message代表状态信息,data是程序逻辑中需要的数据。

如何去设计

当手机端调用API,程序业务逻辑处理完成之后,需要返回数据,此时需要对通信数据进行封装,封装的三种类型由可由REQUEST里的format参数指定,当formart=json时执行response_json方法,同理,还有response_xml和response_array方法;

为了方便调用,编写一个Response类来封装数据并完成response工作:

class Response{    public static function response_api($code, $message='', $data=array()){        //根据formart返回适当的数据
        $type = isset($_REQUEST['format'])?$_REQUEST['format']:'';        switch ($type) {            case 'json':                self::response_json($code, $message, $data);                break;            case 'xml':                self::response_xml($code, $message, $data);                break;            case 'array':                echo var_dump(self::grant_array($code, $message, $data));                break;            default:                self::response_json($code, $message, $data);                
                break;
        }
    }    
    public static function response_json($code, $message='', $data=array()){        //返回JSON数据
        $result = self::gramt_array($code,$message,$data);        echo json_encode($result);        exit();
    }    
    public static function response_xml($code, $message='', $data=array()){        //返回XML数据
        $result = self::gramt_array($code,$message,$data);
        $xml = "";
        $xml .= "";
        $xml .= self::xml_encode($result);
        $xml .= ""
        echo $xml;        exit();
    }    
    private function xml_encode($arr=array()){        //对于XML,需要自己实现一个XML的encode方法
        $xml = $attr = '';        foreach($arr as $key=>$value){            if(is_numberic($key)){
                $key = 'item';
                $attr = " id='{$key}'";
            }
            $xml .= "<{$key}{$attr}>";
            $xml .= (is_array($value))?self::xml_encode($value):$value;
            $xml .= "";
        }        return $xml;
    }    
    private function grant_array($code, $message='', $data=array()){        //在所有操作之前,需要生成符合API规范的数组
        $result = {            "code" => $code,            "message" => $message,            "data" => $data
        };        return $result;
    }
    
}

Response类实现了通信接口的数据封装,可根据response内指定的format灵活的写入不同格式的数据到Response。
付:完整代码及调用实例:

n";
        $xml .= "n";
        $xml .= self::xml_encode($result);
        $xml .= "";        echo $xml;        exit();
    }    
    private function xml_encode($array=array()){
        $xml = $attr = "";        if(!empty($array)){            foreach ($array as $key => $value) {                if(is_numeric($key)){
                    $attr = " id='{$key}'";
                    $key = "item";
                }
                $xml .= "<{$key}{$attr}>" ;
                $xml .= is_array($value) ? self::xml_encode($value) : $value;
                $xml .="n";
            }
        }        return $xml;
    }    
    private function grant_array($code, $message='', $data=array()){        if(!is_numeric($code)){            return '';
        }

        $result = array(            'code' => $code,            'message' => $message,            'data' => $data
        );        return $result;
    }
}

调用实例:

connect();$page = isset($_REQUEST['page'])?$_REQUEST['page']:1;
$page_number = isset($_REQUEST['page_number'])?$_REQUEST['page_number']:2;
$lim_start = ($page-1) * $page_number;
$sql = "SELECt * FROM user WHERe is_active=1 LIMIT ".$lim_start.",".$page_number;
$result = mysql_query($sql, $connect);if($result && mysql_num_rows($result)>0) {    while ($row = mysql_fetch_assoc($result)) {
        $rows[] = $row;
    }
}if(!empty($rows)){    return Response::api_response(200, 'Success', $rows);
}else{    return Response::api_response(403, 'No result from database');
}



作者:悬崖勒小马
链接:https://www.jianshu.com/p/0eca40163fcc

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/228981.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号