android开发中与后台通讯中公共参数的解决方案
2015-08-21 17:55
453 查看
我们在很多项目中,跟服务器端的交互会比较多,需要调用很多的接口。
而为了保证接口的灵活性,安全性,我们通常会传一些每个接口都带的参数。比如当前app的版本号,当前系统,安全认证信息等等。
比较常见但是并不友好的方式,是把这些参数放到业务参数里,一并传给后台,比如下面这种:
上面的代码里,我们传了4个参数,分别是:安全认证信息,文章id,版本id,还有平台类型。
这四个参数中,除了文章id(article_id),剩下的3个参数,实际上跟业务逻辑没有任何关系。
而因为使用这种写法,我们不得不在每个接口都重复添加这几个参数。
我们可以改进上面的代码,在上面代码的返回值:
我们修改一下postRequest方法的实现,在这个方法的开始,添加几个固定的参数:
这样看起来,貌似没有什么问题了,我们把公共的参数封装到了一个更底层的类里。
但是!这样对客户端开发人员是友好了,但是对服务器端的开发人员来说,还是一!团!糟!啊
因为他们收到的,依旧是业务参数跟普通参数混在一起的一堆。。。
当然,其实后端也可以封装一个低层的类来统一处理这些参数。
但是我们其实有另外一个方法:把这些公共参数放到request的head里面。
如下,还是postRequest方法,但是我们这样实现:
这样后端的童鞋也可以直接从head里面获取公共信息了,业务逻辑单独分开处理
而为了保证接口的灵活性,安全性,我们通常会传一些每个接口都带的参数。比如当前app的版本号,当前系统,安全认证信息等等。
比较常见但是并不友好的方式,是把这些参数放到业务参数里,一并传给后台,比如下面这种:
public String getHomeArticle(String authorization,String article_id) throws IOException, HttpException { String url=V_2_0_URL+"master_info"; strParams.clear(); strParams.add(new BasicNameValuePair("authorization",authorization)); strParams.add(new BasicNameValuePair("article_id",article_id)); strParams.add(new BasicNameValuePair("version_id",VERSION_ID)); strParams.add(new BasicNameValuePair("platform_type",PLATFORM_TYPE)); return baseRequest.postRequest(strParams,url); }
上面的代码里,我们传了4个参数,分别是:安全认证信息,文章id,版本id,还有平台类型。
这四个参数中,除了文章id(article_id),剩下的3个参数,实际上跟业务逻辑没有任何关系。
而因为使用这种写法,我们不得不在每个接口都重复添加这几个参数。
我们可以改进上面的代码,在上面代码的返回值:
return baseRequest.postRequest(strParams,url);
我们修改一下postRequest方法的实现,在这个方法的开始,添加几个固定的参数:
public String postRequest(List<NameValuePair> params, String url) throws HttpException, IOException { String result = null; params.add(new BasicNameValuePair("version_id",VERSION_ID)); params.add(new BasicNameValuePair("platform_type",PLATFORM_TYPE)); params.add(new BasicNameValuePair("authorization",getAuthorization())); HttpPost request = new HttpPost(url); HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); request.setEntity(entity); ......
这样看起来,貌似没有什么问题了,我们把公共的参数封装到了一个更底层的类里。
但是!这样对客户端开发人员是友好了,但是对服务器端的开发人员来说,还是一!团!糟!啊
因为他们收到的,依旧是业务参数跟普通参数混在一起的一堆。。。
当然,其实后端也可以封装一个低层的类来统一处理这些参数。
但是我们其实有另外一个方法:把这些公共参数放到request的head里面。
如下,还是postRequest方法,但是我们这样实现:
public String postRequest(List<NameValuePair> params, String url) throws HttpException, IOException { String result = null; HttpPost request = new HttpPost(url); HttpEntity entity = new UrlEncodedFormEntity(params, HTTP.UTF_8); request.setEntity(entity); request.addHeader(RequestParams.AppParamsKey.USER_AGENT, RequestParams.AppParams.USER_AGENT); String token = UserManager.getInstance(mContext).getUser().getToken(); String authorization = generateAuthorization(params, token, 0, 0); request.addHeader(RequestParams.AppParamsKey.AUTHORIZATION, authorization);
这样后端的童鞋也可以直接从head里面获取公共信息了,业务逻辑单独分开处理
相关文章推荐
- Android性能优化典范(二)
- android详情请务必保持手机屏幕不锁屏
- Android性能优化典范(一)
- Android解析xml
- android emoji 表情的制作
- android studio 中aidl文件的使用并且实现跨进程的通信
- android内存清理
- Android:实现点击AlertDialog上按钮时不关闭对话框
- [Android开发]对电话号码的判断:
- Android的学习——ubuntu下android5.1源码的make编译
- Android之TabHost布局
- 适应多行长文本的Android TextView
- Android 最火框架XUtils之注解机制详解
- Android GPS 取经纬度
- Android 最火的快速开发框架XUtils
- Android之单选按钮,复选框使用方法汇总
- Android笔记:异步消息处理
- Android笔记:多线程
- Android 开发指南
- Android 浅谈 设计与屏幕适配 【1.6235449734285716】