App架构设计学习(一)---- 接口的设计

一、哎,最近换了家工作,结果工作很出的我意外,没有干熟悉的根据需求写代码,反而让我一个小菜鸟去重构一下App的架构(他们公司的app,已经上线了1.0版本了),没办法,只有硬着头皮去先学习学习,再总结总结。

 Hybrid APP架构设计思路 ---> https://segmentfault.com/a/1190000004263182

二,App与服务器的通信接口如何设计得好,可以从以下这几个方面考虑

  1、 安全机制的设计  

        ----> 待研究

  2、 接口数据的设计      

  接口的数据一般都采用JSON格式进行传输,不过,需要注意的是,JSON的值只有六种数据类型:

  Number:整数或浮点数

  String:字符串
  Boolean:true 或 false
  Array:数组包含在方括号[]中
  Object:对象包含在大括号{}中
  Null:空类型
  所以,传输的数据类型不能超过这六种数据类型。以前,我们曾经试过传输Date类型,它会转为类似于"2016年1月7日 09时17分42秒 GMT+08:00"这样的字符串,这在转换时会产生问题,不同的解析       库解析方式可能不同,有的可能会转乱,有的可能直接异常了。要避免出错,必须做特殊处理,自己手动去做解析。为了根除这种问题,最好的解决方案是用毫秒数表示日期。

  另外,以前的项目中还出现过字符串的"true"和"false",或者字符串的数字,甚至还出现过字符串的"null",导致解析错误,尤其是"null",导致App奔溃,后来查了好久才查出来是该问题导致的。这都是      因为服务端对数据没处理好,导致有些数据转为了字符串。所以,在客户端,也不能完全信任服务端传回的数据都是对的,需要对所有异常情况都做相应处理。

  服务器返回的数据结构,一般为:

  {
  code:0
  message: "success"
  data: { key1: value1, key2: value2, ... }
  }
  code: 状态码,0表示成功,非0表示各种不同的错误
  message: 描述信息,成功时为"success",错误时则是错误信息
  data: 成功时返回的数据,类型为对象或数据
  不同错误需要定义不同的状态码,属于客户端的错误和服务端的错误也要区分,比如1XX表示客户端的错误,2XX表示服务端的错误。这里举几个例子:

  0:成功
  100:请求错误
  101:缺少appKey
  102:缺少签名
  103:缺少参数
  200:服务器出错
  201:服务不可用
  202:服务器正在重启
  错误信息一般有两种用途:一是客户端开发人员调试时看具体是什么错误;二是作为App错误提示直接展示给用户看。主要还是作为App错误提示,直接展示给用户看的。所以,大部分都是简短的提示信      息。

  data字段只在请求成功时才会有数据返回的。数据类型限定为对象或数组,当请求需要的数据为单个对象时则传回对象,当请求需要的数据是列表时,则为某个对象的数组。这里需要注意的就是,不要将      data传入字符串或数字,即使请求需要的数据只有一个,比如token,那返回的data应该为:

  // 正确
  data: { token: 123456 }

  // 错误
  data: 123456

  3、接口版本的设计

  接口不可能一成不变,在不停迭代中,总会发生变化。接口的变化一般会有几种:

  数据的变化,比如增加了旧版本不支持的数据类型
  参数的变化,比如新增了参数
  接口的废弃,不再使用该接口了
  为了适应这些变化,必须得做接口版本的设计。实现上,一般有两种做法:

  每个接口有各自的版本,一般为接口添加个version的参数。
  整个接口系统有统一的版本,一般在URL中添加版本号,比如http://api.domain.com/v2。
  大部分情况下会采用第一种方式,当某一个接口有变动时,在这个接口上叠加版本号,并兼容旧版本。App的新版本开发传参时则将传入新版本的version。

  如果整个接口系统的根基都发生变动的话,比如微博API,从OAuth1.0升级到OAuth2.0,整个API都进行了升级。

  有时候,一个接口的变动还会影响到其他接口,但做的时候不一定能发现。因此,最好还要有一套完善的测试机制保证每次接口变更都能测试到所有相关层面。

三、只是为了记录学习别人的知识,好的地方是直接粘贴过来的,请各位看官见谅。

posted @ 2016-03-16 17:13  阿呆哥哥  阅读(2222)  评论(0编辑  收藏  举报