APP数据接口开发的一些经验

      刚接到这样的任务时,没有感受到任何压力,不就是给移动端应用提供数据吗?那边发来参数,这边处理数据,返回JSON。作网站开发时常用ajax请求后台数据,不就是这么回事吗。因而,在确认完需求后就开始干了,很快,进入联调阶段,这个时候各类问题来了,忙得不可开交。吃一堑,长一智,项目结束后总结了下,大体分为如下几点:程序员


      1、何时应该增长接口。
      通常一个页面不存在二次请求的需求时,使用一个接口,像通常的详情页,我的信息页等;页面单一功能又须要二次请求的,像带分页功能的列表页,使用一个接口;页面含多个功能,其中有一个须要二次请求的,则须要定义多个接口了,好比我的信息页下带一个待办事项的列表,又支持分页,那若是一个接口返回所有信息的话,之后每次翻页都要刷新我的信息内容,这样就形成了没必要要的信息传递。ajax


      2、 应该努力让接口的URL看上去易懂又美观。
      在建立接口时就应该考虑到接口地址,文件目录不要太深,我的以为不该超过三层,层次最好是和APP的菜单层次保持一致,这样的好处起码在之后维护也会方便不少。接口地址不该该轻易的改动,包括增长参数,由于这会致使APP从新打包,若是是已经上线,那意味着APP须要升级。数据库


      3、参数与返回值。
      先说参数,笔者目前的作法是通常查询采用URL传参,增改采用POST传递JSON字符串提交数据,删除一样使用POST方式。再说返回值,咱们在项目中全部接口统一返回JOSN数据,而且约定一个格式,好比这个JSON对象含三个Key,分别是data,msg和status,分别表明了返回的数据,data多是对象或者数组,请求反馈信息和反馈状态码,这样就不用每一个接口都说明一遍了。再谈一些细节,在高级语言中,数据有多种类型,String,Int,DateTime等等。而序列化为JSON后,所有变为字符串,这个时候没有给值的字段就须要注意一下,像值类型,为可空时,序列化后值直接是null表示,没有引号;为不可空时,值为默认值,一样没有引号,而DateTime则带引号,"0001-01-01T00:00:00";而像引用类型String,无值时,序列化后也变成null,而不是空串"",要想用空串""表示,必须给一个默认值,如String.Empty,说这点是由于当时iOS告诉我说字段值返回null时,他们那边报错。还有一种状况是以前遇到过的,就是数值类型的精度问题,当时接口返回一个价格字段,服务器端固然用decimal类型,而且保留两位小数,可是iOS端接收到的值小数点后却多出不少位,而Android没有任何问题,最后只好在序列化前先转成字符串类型。其它须要包含小数位的数值类型当小数点后全是0时,序列化变为整型,这种状况一样须要先转为字符串再序列化。关于DateTime类型,在做为增改参数接收时,就是反序列化后要插入到数据库,若是你正好使用了Sql Server,又使用了DateTime类型,请注意它的范围是1753-01-01 00:00:00 到9999-12-31 23:59:59,而空串转为时间为"0001-01-01 00:00:00",会报异常。最后,笔者感受,是否是没有特殊状况,全部字段均可以给移动端返回字符串呢,像时间类型,手机上要显示到日,我就不返回时分秒了,以字符串类型返回,这样之后产品说要显示时分秒,直接在后台处理下就OK了,是否是这样的?数组


      4、接口如何联调。
      这里的联调包含两层含义,一是VS环境下的远程调试,这个具体方法在网上有不少,在这就很少说了。另外一个含义就是和移动端联合测试软件功能。此次项目并无真正远程调试几回,由于记录了详细的调试日志,因此大部分问题都能很快的定位。调试日志通常都包含了两项内容:当前环境下的关键变量值及当前方法的信息。安全


      5、错误处理和返回错误码。
      首先,切忌把异常直接抛给调用者。由于这样不管是对体验仍是定位错误都没有任何益处,而是应该在后台捕获,并记录详细的日志,而后定义一套全局的错误码,返回对应的错误码给接口调用者。关于异常的捕获应该在哪里处理,我的以为但应该不是最佳,最外层应该用try catch包裹,并记录日志,保证异常不会抛出到调用方,其它位置若是有非托管资源的使用,应该捕获,而后记录日志,释放资源,并继续把错误向上抛。服务器


      6、接口文档。
      提到写文档,程序员貌似天生反感,可是开发接口,不写文档,彷佛是不可能的,而且还要写得规范,别人能看懂。接口文档写得好,真的是件一劳永逸的事,写一份好文档省出的时间要远远大于写文档的时间,固然要作到及时更新,与程序同步。通常接口文档包含了功能、请求方式(GET/POST)、 地址、参数、返回值、请求示例、返回示例以及全局的安全验证方式、错误码等。测试


      写这篇文章的目的就是想把这几个月的接口开发工做作个总结,结果拖拖拉拉写了好几天,写完再读时发现都有点变味了。文章中可能不少地方写到的处理方法或者对知识的理解并非很正确,但愿您不吝赐教,留下宝贵建议。网站

相关文章
相关标签/搜索