wiki:app2.0/project-description

Version 23 (modified by pengzhanxuan, 11 years ago) (diff)

--

项目说明

计划5月18日开始公测,5月25日、5月26日分别送审Android、iOS版本。

一、电脑网聚超值APPv2.0.0主要需求:

  • 1、新增分类、标签、电商搜索;优化订阅推送功能;增加推荐试用和推荐优惠券;个人中心优化;增加“广场栏目”;UI及交互优化等。
  • 2、ios重构。

二、项目主要成员:

  • 电脑编辑部:杜建荣;
  • 移动产品规划:杨幸、吴凯达;
  • 项目支持中心:黄丽玲;
  • 设计部:黄颖欣、林俊丽、林耿佳、刘文聪 ;
  • 应用产品开发部:黄育才、彭展旋、吴远博 ;
  • 移动产品中心:许忠洲、欧建强、朱妙森、吴泽祥、谢德荣、许子轩、阮鹏飞、傅兴方、巫小玲、陈子洋;
  • DBA/测试部:张菊婷 、何芬 。

三、项目主要时间点:

  • 1、2.26-3.31设计,3.23-4.2制作,3.2-3.20应用开发,3.23-4.16 APP开发;
  • 2、应用接口测试:3.23-4.3;mrobot接口测试:4.7-4.27;app整体测试:5.11-5.22
  • 3、公测时间:iOS-5.18-5.25;Android-5.18-5.22。

四、近期工作安排:

  • 1、4.2完成全部制作页面并确认;
  • 2、4.16完成后台接口测试。

排期表

1、相关文件

1.1、原型图:

1.2、接口文档:

1.3、设计稿:

1.4、客户端跳转协议说明:

类似于站内跳转,客户端的此种实现都需要根据文档中预先声明好的跳转协议进行跳转,所以在对应的地方需要提供这些协议的url给客户端。

文档刚刚给到,可能有些需要跳转到还需要配合客户端进行调整(跟mrobot协商是把跳转协议放在哪边比较好的,一般放到mrobot那边实现)

1.5、客户端图片尺寸问题:

接口原则上只返回原图给客户端,客户端根据自己的需要读取具体尺寸的图片。

1.6、App 2.0页面组装说明文档:

客户端开发根据这个文档读取接口数据

1.7、app2.0接口规范说明:

2、代码结构:

2.1、代码分支

目前app2.0开发使用了独立的分支:

http://svn.demo.pc.com.cn/svn/pc_best/branches/app2.0

最新的app2.0接口相关代码已经提交到app2.0分支中,并且把该分支合并到了v7.0中,以后使用v7.0继续开发即可,app2.0分支作为一个备份。

2.2、代码结构

App2.0的代码存放到了一个单独的包中:

2.3、下面是每个包的相关说明:

controller

App接口相关的controller,使用Spring MVC的Controller编写的接口(非JSP)存放到这里,目前该目录没有使用,都以JSP的方式进行编写。

interceptor

Spring的自定义拦截器,一般配合controller包使用,现在暂时没有用到

json

JSON相关的辅助类。由于接口都是JSON格式的数据,所以返回的数据需要统一转换为JSON格式,目前接口都是使用 fastjson进行解析的,这个包也是fastjson相关的辅助类。

result

接口返回结果辅助类,通过使用该包中提供的方法自动把接口转化为约定的格式。

servlet

接口相关过滤器

utils

辅助类

vo

接口相关的VO类,不建议其他地方也使用这里的vo,因为里面很多属性都是按照客户端的要求特别编写的,用在其他的地方不太恰当。

一个接口的格式大致如下:

2.3、JSP文件结构:

http://best.pconline.com.cn/intf/app/topic/getTopicList.jsp...

// 通过Nginx配置,接口路径映射为:

http://best.pconline.com.cn/app/topic/getTopicList.do...

按照模块把接口存放到不同的文件夹中,其中 /my 文件加下表示需要登录才可以访问的接口。

2.4、接口开发说明

  • 每一个接口开头处需要使用如下方法对接口进行初始化设置
    WebUtils.initAppResponse( response, 0 );
    
  • 之后必须使用如下方法初始化结果模板:
    ResultHandler<JSONObject> result = ResultHandler.extract(request, false);
    
  • pageNo, pageSize, limit, commonSessionId这几个固定的参数需要直接从result中获取,无需在从request中拿去
    int pageNo = result.getPageNo();
    int pageSize = result.getPageSize();
    int limit = result.getLimit();
    String commonSessionid = result.getCommonSessionId();
    
  • 对于需要登录的接口,直接放到 /intf/app/my/文件夹里面,在接口里面直接从request里面可以获取到用户登录信息:
    Account account = (Account)request.getAttribute("account");
    
  • 每一个接口必须使用try catch 捕获异常,防止服务器抛出RunTimeException导致接口出错
  • 在接口中存在集群并发访问同步问题,可以使用 cn.pconline.best.util.sync.McSyncUtils?,参考如下接口:

/app/my/collect/collectForApp.do // 收藏接口

  • 对于需要限制为post提交的,直接用下面语句判断即可,无需再额外编写代码:
    if(!result.limitPost()){
        out.print(result.toStringResult());
        return;
    }
    

3、新增项目配置

Nginx配置

新增数据脚本

新增项目配置

4、现在app的开发模式

聚超值提供纯JSON数据的后台接口

mrobot对聚超值后台的接口进行转发,获取到需要的属性,并渲染成wap页面。

5、开发测试环境

6、测试说明

功能测试

  • 主要测试app接口查询结果是否和sql查询的一致;
  • 接口的参数是否有效;
  • 对照wiki文档查看接口参数路径是否拼写错误;
  • 查看wiki文档中的说明是否全面,是否有说明歧义的地方

性能测试

对接口进行压力测试,要求响应时间0.8秒内,以下是线上旧接口的测试结果

线上接口分析结果

7、关于集群多线程并发的说明

在集群多线程并发的情况下,我们的一些接口会出现允许重复提交的情况,可以通过一下工具进行测试: 并发测试工具

目前的解决办法是暂时写了以下的辅助类:

cn.pconline.best.util.sync.McSyncUtils.java

分别用到了以下几个接口中:

/app/my/collect/collectForApp.do // 收藏接口
/app/topic/addTopic.do // 添加爆料
/app/topic/likeAndDislike.do // 点赞接口

8、跟进计划(2015/04/08)

根据mrobot开发的反馈进行调整

Attachments