android开发中与后台通讯中公共参数的解决方案

在Android开发中,频繁与服务器交互时需要传递公共参数,如版本信息、安全认证等。传统做法是将这些参数混杂在业务参数中,导致代码冗余。一种改进方案是封装底层请求方法,添加固定公共参数。然而,这并未解决后端接收参数混乱的问题。本文提出将公共参数放入HTTP头,使业务参数和公共参数分离,提高接口清晰度,便于后端处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在很多项目中,跟服务器端的交互会比较多,需要调用很多的接口。
而为了保证接口的灵活性,安全性,我们通常会传一些每个接口都带的参数。比如当前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里面获取公共信息了,业务逻辑单独分开处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值