美文网首页
前端同学-少许后端知识,有效减少开发时间

前端同学-少许后端知识,有效减少开发时间

作者: macroC | 来源:发表于2018-09-09 21:20 被阅读0次

    工作中,客户端的朋友难免遇到与后端关于接口数据结构问题的扯皮,大大浪费了时间,针对这点学习一点后端知识,能把多数无技术含量的扯皮扼杀在后端小学生开口之前.

    经过改良后的开发流程大概这样:

    根据接口定义完成开发, 在服务器上根据定义构造测试数据, 服务器上编写好相关的接口, 更改电脑host至服务器, 手机捆绑代理, 测试完成, 把自测流程和结果提给测试, 远离扯皮, 愉快喝茶(加班).

    用到的知识点

    1.服务器搭建(是否开启ssl要和app中同步,原因后讲) 2.host, 3.php编写接口 ;
    php简直是世界上最好的语言, 没有之一….

    这里不讲搭建服务器,不懂得小兄弟自行谷歌…需要具有一定的php语言和调试基础 :

    1.搭建服务器

    不要一味追求https来使得更炫酷,要保证和app的服务器同步, 因为如果你的app对应的服务器不是https, 而你使用开启ssl的服务器来host, 此时会有这样的现象(从抓包工具,或者浏览器可以看到): 开始访问原始url之后(http), host解析域名重新指向主机(https), 此时url中紧邻域名之后的位置会自动删掉一个字符, 这个字符可能是 反斜杠,问号等有意义的字符,进而导致重定向失败,初步分析是http协议栈为防止url溢出,申请了固定长度的字符串来容纳url的域名段,http定向到https后,前段的字符串增加了1,即字符 “s” ,因此导致了末尾的裁剪 . 有小伙伴能解决这个问题的(除去重编译内核) 愿听详解.

    2.更改电脑端的host

    把你要测试的域名映射到服务器的ip, 以使得相关的接口定向到自己的服务器, 拦截到请求. 这里推荐一款软件 switchHosts, 能很轻易的切换host, 不需要重复输入密码, 但软件安全上存在一定的风险, 酌情考虑使用.

    3. 重点在接口的提供和各个url的拦截

    1. 更改了host之后, 原来访问正常服务器的url被重新指向了新的服务器, 处理逻辑定向到 apache 配置的根路径的 index.html或index.php, 这里应该放置一个index.php文件, 用于给所有接口分流(根据参数, 把请求分发给相关的处理逻辑).
    2. 在index.php文件中,不要加相关接口的处理逻辑, 建议只应该放针对不同参数url的分流, 例如 ? a=say_hello 接口和 ?a=say_goodbye 接口, 其处理逻辑应该分别定向到其他文件中.

    index.php请求拦截逻辑如:

    <?php
    
    $url = 'http://www.macro-c.cn/wordpress/';
    
    if(count($_GET)!=0)
    {
    $param_a = $_GET['a'];
    //根据 a 参数区分不同接口
    if($param_a=='check-user-first-come')
    {
    $url = $url.'api_test/check-user-first-come.php';
    }
    else if($param_a == 'book-detail' or $param_a == 'get-long-comment-info')
    {
    $url = $url.'api_test/community.php';
    }
    else if($param_a == 'after-share')
    {
    $url = $url.'api_test/after-share.php';
    }
    else
    {
    //未定义的接口:代理服务器请求原接口,将返回数据转发
    $url = $url.'api_test/final-url.php';
    $url = $url.'?'.$_SERVER['QUERY_STRING'];
    }
    }
    header("Location: $url");
    
    ?>
    

    上例中php代码, 首先根据参数 a 的值不同, 重新拼接url , 将url定向到不同的处理接口, 再根据具体的需求在各个处理接口返回相应的假数据. 其中header( )方法这里的作用是url转发;

    保护周边接口,降低影响范围:

    注意一点, 一个app,从启动到切换到测试页面过程中,可能需要调用非常多个接口, 在自己的服务器中全部定义相关的接口是不可能的, 但此时由于已经将目标服务器的host定向到了本机, 所有的请求不会再指向原来的服务器, 此时可能造成很多页面得不到数据. 因此上例中else逻辑处, 对url进行了重新拼接,并且还原了原url的所有参数, 定向到了final-url.php中,

    周边接口统一处理逻辑final-url.php形式如:

    <?php
    header("Content-Type: text/html;charset=utf-8");
    
    $url_full = 'http://mapi7.dangdang.com/index.php'.'?'.$_SERVER['QUERY_STRING'];
    
    echo file_get_contents($url_full);
    
    ?>
    

    上例的作用是以当前服务器作为客户端做url请求, 并将结果原样返回.

    这样一番操作, 就能根据url的接口不同, 返回不同类型的测试数据, 并且可以做到不影响其他接口.

    拦截接口的处理逻辑:

    其他接口处理函数 如 after-share.php其代码形式如下:

    <?php
    header("Content-Type: text/html;charset=utf-8");
    include_once 'tools_headfile.php';
    $task =
    '{
    "errorCode":0,
    "errorMsg":"成功",
    "hasGetReWard":"2"
    }';
    $str_task =
    '{
    "toast":"呵呵傻逼",
    "btnStr":"跳任务列表",
    "linkUrl":"communitytasklist://"
    }';
    $arrayOut = string_to_array($task);
    $arrayOut_task = string_to_array($str_task);
    $arrayOut['task'] = $arrayOut_task;
    echo JSON($arrayOut);
    ?>
    

    其中string_to_array()和JSON()都是 封装的函数, 作用是将字符串转换成php数组(键值对数组), 和将数组(键值对数组)转换成json对象.

    只需基本的php知识, 方便了前端,后端,测试同学的工作. 现在, 一言不合送给测试代理的ip地址和端口号, 完

    友情推荐几款工具: switch hosts很方便的切换host; sublime text 神器;filezilla神器

    相关文章

      网友评论

          本文标题:前端同学-少许后端知识,有效减少开发时间

          本文链接:https://www.haomeiwen.com/subject/eawdgftx.html