您的位置:首页 > 移动开发

国内外最流行App的移动端技术浅析(新闻类App)

2015-10-25 23:33 363 查看
一、概述

     新闻类App的抽样版本是截止2015年10月1日最新的版本,分别是:搜狐新闻(V5.3.0)、今日头条(V4.8.5)、腾讯新闻(V4.8.0);

二、.接口分析:

       1、搜狐新闻:

       搜狐新闻启动接口众多,加载页面完成一共60个接口左右(V3.5.1的时候才5个接口) , 这些接口主要包括五个域:pic.k.sohu.com ; api.k.sohu.com ; i.go.sohu.com; zcache.k.sohu.com,imp.optaim.com,主要用于业务物理隔离。

       关于搜狐新闻有以下几个点可以注意:

       1)、支持三种HTTP方法:GET、POST、HEAD,HEAD主要用于图片(Content-Type是image/gif)

       2)、支持五种HTTP的content-type:application/json、text/xml、text/html、text/plain、 image/gif。

              A、业务数据以前两种为主,text/xml主要用于新闻列表数据,可能是由于列表数据包括一些对json不太友好的html特殊字符;

              B、text/html集中于i.go.sohu.com域名下,推测主要用于js的异步请求;

              C、text/plain只有两处,从名称上推测应该是作某类检测,返回的也只是一串数字(e.g:http://api.k.sohu.com/api/check.do?b=6013148227871092786&pl=1&v=31&buildCode=98&s=1&j=2220&loadingId=0&isFull=1&checkType=up,fb,loading,reply,vbub,subTab,slient&flashId=72394320,72411659&sub=1&maxMsgId=144377000&vcursor=0&subtabtime=0&subtabstatus=0&background=1&net=wifi&p1=NjAxMzE0ODIyNzg3MTA5Mjc4Ng%3D%3D&gid=02ffff110611110b8c219e4f75131f2ce61c768733d51a&pid=-1)

              D、image/gif主要使用HEAD请求,但有一处是用于SDK广告,下文再说。

       3)、如果需要区分客户版的版本以获取不同的数据,是通过不同的URL来区分。比如说频道页:http://api.k.sohu.com/api/channel/v4/list.go?p1=NjAxMzE0ODIyNzg3MTA5Mjc4Ng%3D%3D和http://api.k.sohu.com/api/channel/v6/list.go?p1=NjAxMzE0ODIyNzg3MTA5Mjc4Ng%3D%3D分别获取不同的数据就是从v4和v6来区分的(实际上的URL更复杂,这里采用了一个最简的URL)。这样做有两个优点:一是降低耦合度,v4和v6不是直接使用客户端的版本号,这样可以让一个接口覆盖多个使用相同协议的客户端版本;二是增加扩展性,如果后续需要拆分,既可以放在nginx前端判断以便分集群部署,也可以在服务端进行判断。

       4)、特殊的广告请求

       搜狐广告SDK里面有一个特殊的请求,应该是搜狗的开屏广告请求,具体的请求URL是:http://imp.optaim.com/201509/af05918212b0390c1313e47c768dca6d.php?a=99,这个URL设置了特殊的UA头,然后cookie和content-type也比较特殊,即可以认为是一种特殊的专业用于广告的请求(见图1)。而该域名属于智云众公司,是一个广告平台及服务商,2015-06-19才审核过。



图1 搜狐新闻广告请求抓包截图
       5)、请求 参数   
       URL中请求参数众多,也没必要一一分析。不过几乎所有的application/json的请求参数中都有p1=NjAxMzE0ODIyNzg3MTA5Mjc4Ng%3D%3D这个参数,估计是类似imei码的一个数字。用于业务校验,有的接口必须有这个参数才能获取正确的数据,有的接口则不必。

2、今日头条

        1)接口大概30个,域名6个,但分得更细,比如说有log.snssdk.com,估计用于日志上报和分析,为其推荐功能提供原始数据;

        2)、HTTP操作方法支持两类:GET和POST,绝大部分是GET。POST中绝大部分是写,也有极少部分是读;

    3)、返回的接口数据类型全部都是application/json格式,但是比较奇葩的是部分response返回的content-type显示的其他类型,如text/plain,text/html。虽然不影响,但是总感觉有点奇怪,这也太随意了点,估计是RD在返回过程中也没注意;

        4)、版本区分同样通过URL中来区分;

        5)没有明确的广告API,应该是直接使用的是sdk。

        6)获取用户的信息是有session的,sessionid存放在cookies中。

3、腾讯新闻

       1)接口也在50左右,域名若干,比较混乱;

       2) HTTP接口支持两类:GET和POST,使用范围没有明显的界限;

       3)返回数据类型更丰富,除了大量使用的application/json外,还有application/javascript,直接获取资源文件等。当然,也存在挂羊头卖狗肉的情况,比如response返回的content-type显示的是text/html,但实际却是json格式

      4)获取图片是采用一种特殊的方式,content-type是:image/webp(估计是支持的自定义的请求),实际返回的就是图片,请求URL示例:http://pnewsapp.tc.qq.com/newsapp_ls/0/om_14241_100100/0?tp=webp 

        5)获取配置。

               A、绝大部分业务配置通过一个接口实现,接口简单,但业务逻辑会比较复杂,如http://r.inews.qq.com/getQQNewsRemoteConfigAndroid?uid=fb39afab-a76b-4a72-b2fa-1d5c15765d45&Cookie=%20lskey%3D00030000910f938db66d86a35337f0efb338145dab81a6e36e0f8b77d438522bc8d9d0a62a3b8337cec9956a%3B%20luin%3Do1635288283%3B%20skey%3DMLkwLbJbGt%3B%20uin%3Do1635288283%3B%20logintype%3D0%20&qn-rid=1787455607&store=118&hw=HUAWEI_H60-L01&devid=866568027503787&qn-sig=90fd01160f882bdb170d55e7c341d42e&screen_width=720&mac=58%253A2a%253Af7%253A77%253A9f%253Aff&appver=19_android_4.8.0&qqnetwork=wifi&mid=1f497a458cb615b7482e8320aad13b4bcc51e1f3&imsi=460000320595063&apptype=android&screen_height=1184;

          B、配置参数主要都是一些机器的参数,业务上的参数不多(比如说城市、渠道什么的),但也有可能城市能过http的请求来判断ip进而获取城市,store也有可能是渠道号;

          C、 部分配置接口也是在客户端来进行判断。比如说升级接口,服务端会返回所有的数据,但是客户端并没有弹出提示框,感觉放在客户端进行判断更好一点。

 

三、小结:

        1、新闻类App一般都是web+native混合开发的模式,但是native占绝大多数。

        2、native接口又以json返回数据为主,少部分用xml的格式,但接口中content-type的使用却相当混乱,即例返回json其content-type也未必是application/json;

        3、HTTP方法以GET和POST为主,但使用范围并未严格区分,大致是读的时候多用GET,写的时候多用POST。

        4、广告接口以SDK为主,部分使用api接口;

        5、如果接口区分版本,一般都是在接口请求路径中增加版本来隔离,如xxx/api/v1/和xxx/api/v2/;

        6、如果有更新操作,判断逻辑既可能放在客户端(即服务端只是返回数据,由客户端根据返回的数据来进行业务判断),也可能放在服务端(即服务端返回数据表示更新,返回空则表示不更新)。

        7、某些特定的接口可以在head或者cookie中放置特殊的参数。

        8、通过都会使用预加载的方式来加快访问速度。如访问列表时就提前加载详情页的内容、访问列表页是就提前加载下一页列表页的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息