app接口的简单案例 和一些总结

 

常用的接口形式(即下面的 例二):

  开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Post方式,字符编码均使用utf-8

 

  (客户端)数据的提交:

    php 通过CURL 发送http的post请求  http://www.cnblogs.com/wangyuman26/p/5545370.html

  (服务端)数据的接收:

     $data=file_get_contents("php://input");   //获取输入的数据流

     $jsonArray = json_decode($data, true);          //将获得的数据进行对象序列化,返回array

  (服务端)数据的返回:

    echo json_encode($array);

 

 


 

 

 

例一:

通过接口获取一篇文章。
接口需要传入文章的id,通过sql语句向数据库查询文章的内容,然后以json的格式echo出即可,
即:安卓或IOS工程师获取通过接口获取到了json格式的数据,在做进一步的处理,显示在手机上。

说明:开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Get方式,字符编码均使用utf-8。

 

 

 

例二:

开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Post方式,字符编码均使用utf-8。

说明:①设置接口接口返回值编码   header("Content-type:text/plain;charset=UTF-8");

     ②因为为Post方式提交数据,所以提交数据可以使用Json的格式,如:

data='{
    "serviceName": "login",
    "queryParameters": {
        "password": "123456",
        "mobile": "xxxxxxxxxx"
    }
}'  

IndexController.class.php  
class IndexController extends Controller {
    public function index(){
        header("Content-type:text/plain;charset=UTF-8");
        $index = new IndexService();
        $array = $index->index();
        echo json_encode($array);
    }
}


IndexService.class.php
class IndexService {
    public function index(){
        $array['status'] = 1;
        $array['comment'] = '参数不全!';
        try{
            $data=file_get_contents("php://input");        //获取输入的数据流
            $jsonArray = json_decode($data);        //将获得的数据进行对象序列化。
            $serviceName = $jsonArray->serviceName;
            $param = $jsonArray->queryParameters;
            /***********************************************************************************/
            switch($serviceName){
                case 'login':
                    $member = new MemberService();
                    $array = $member->login($param);
                    break;
                case 'orderDetail':
                    $order = new OrderService();
                    $array = $order->orderDetail($param);
                    break;
          //……………………
            }
            /*************************************************************************************/
        }catch (Exception $ex){
            $array['status'] = 1;
            $array['comment'] = '程序错误:'.$ex->getMessage();
        }
        return $array;
    }
}


OrderService.class.php
class OrderService {

    //订单详情。
    public function orderDetail($param){
        $orderId = $param->orderid;
        $order = M('Order');
        $map['id'] = $orderId+0;
        $rs = $order->where($map)->find();
        $array['status'] = 1;
        $array['comment'] = '未查到数据!';
        if($rs){
            $rs['crosscity'] = $this->crossCity($rs['id']);
            $array['status'] = 0;
            $array['data'] = $rs;
            $array['comment'] = '查询成功!';
        }
        return $array;
    }

}

 

 


 

接口说明文档(范文1):


开发者    版本    说明    日期       
XXX    1.0    原始开发    XXX     
                   
                   
               
说明
本接口供休息休息项目中Android+IOS上的APP调用,开发语言为PHP,数据格式为Json,传输协议为http,提交数据为Post方式,字符编码均使用utf-8。
接口地址
http://xxxxxx.com

一:获取用户资料 memberInfo

提交数据:
{
    "serviceName": "memberInfo",
    "queryParameters": {
        "userid": "xx"
    }
}

参数说明:
参数    必填    类型    说明       
serviceName    是    varchar    指令:memberInfo       
queryParameters    是    数组           
userid    是    int    会员id    

返回数据:
{
    "status": "0",
    "comment": "成功获取个人信息",
    "responseParameters": {
        "id": "21",
        "companyid": "5"

       ………………
    }
}

参数说明 :
参数    类型    说明       
status    Int    返回状态:
0成功
1错误原因1

2错误原因2     
comment    Varchar    注释       
               
               
               
               
               
               
               
               
            


项目中的总结:

1:接口的返回值中的数据,最好同意都是字符串类型,方便IOS和安卓开发人员的处理。

{
    "status": 0 //这个可以不是字符串
    "comment": "发送成功...",
    "data": {       //里面的最好都是字符串类型
        "id": "22",
        "verify-phone": "1316113129X",
        "verify-code": "644115"
    }
}

即:变量都为字符串类型,有引号包着。或者使用类型转换函数strval(),转换为字符串类型。

 

2:设置接口返回值的编码

  使用header函数
  在控制器或页面里面header("content-type:text/html; charset=utf-8");

3:安全性

  ①需要有一个加密规则

        即每次请求接口,需要根据规则加密一段字符串,接口那边也根据规则加密一段字符串,判断与接收的字符串是否一致,如果一致允许本次的请求。

    规则比如可以是:md5(“项目简称”+“请求接口的名称”+“固定的几个字母”)

 

      ②接收的参数为整型时,要做强制转化为整型处理

      ③接收的参数为字符串时,要做处理

 4:要考虑低版本的兼容

     -1、版本更新后,要考虑对低版本的功能是否有影响

        //版本升级:新添加的参数 (逻辑层需要新增参数,加默认值来兼容旧版本。) 
        $new_driverid = isset($param->new_driverid) ? intval($param->new_driverid) : -1;

 

posted @ 2016-04-09 11:17  王宇walkOn  阅读(1533)  评论(0编辑  收藏  举报