zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    所谓瓶颈
    世界那么Big,组件那么Small
    PHPUnit单元测试中类protected/private方法测试
    WCF:如何将net.tcp协议寄宿到IIS
    Windows服务安装异常:System.Security.SecurityException: 未找到源,但未能搜索某些或全部事件日志。不可 访问的日志: Security
    Windows 服务入门指南
    Visual studio 能否定位打开文件在项目中的位置
    电商框架调研
    可伸缩性/可扩展性(Scalable/scalability)
    LoadRunner基础入门教程
  • 原文地址:https://www.cnblogs.com/wangyuman26/p/5371176.html
Copyright © 2011-2022 走看看