页面框架中,提供一个整体的请求方法来支持整体页面对于请求方法的各种场景,同时可以根据请求的参数完成页面端不同服务的提供。例如页面缓存、请求地址切换、请求间隔时间、同步异步处理、请求类型识别以及差异处理等各种需求的支持。
参数差异
前台架构中,请求提供统一的处理方式,有一个优势为统一请求的同时,可以按照规则统一处理请求过程。其中,大部分的请求都需要提供请求的参数,如果存在场景需要针对一类的请求参数进行处理过程,可以利用统一的请求完成一类请求的统一处理。
处理的过程,可以根据需求完成指定请求类型的处理,例如查询类型的请求,可以根据请求信息中的差异进行识别,请求名称的统一前缀、请求信息中的特定标识等方式,识别需要处理的请求,之后根据一定的规则完成请求参数的整体处理。以下通过两个模拟场景的分析进行说明。
- 数值倍数
系统需要通过数值来完成业务,但是数值的精度服务端则是以整数的方式完成业务的存储过程。前台的展现过程,则需要显示为正常的精度数值。比如前台显示为3.141,服务端精度为三位的整数支持方式,提供的则为3141。如果每个请求都需要处理数值类型的转换过程,则需要大量的工作进行支持,或者提供工具方法。
请求过程结合请求信息的相应说明,则可以通过请求方法来统一的完成处理,只需要正确的维护请求信息中需要转换的参数既可以完成数值精度的转换过程,大大简化了各个模块或者请求的具体处理过程。
- 必要参数
请求提交时,通常情况需要判断当前请求是否带有必要的参数信息,没有提供必要的参数信息,则当前请求不应该完成请求提交动作。该过程如果交给各自请求完成判断的过程,增加测试成本之外,还不能够保证准确性。
通过请求信息的正确配置以及请求过程的统一处理,则可以简化模块或者请求的具体的判断过程,提高请求相应必要参数的校验过程的准确性。
两个用例具有一定的代表性,在此基础上仍可以进行拓展,提高统一请求的架构作用。但是,还需要更加合理的进行设计处理过程,不可以极端的处理不必要的需求,慎重的完成框架的设计过程,减少不必要的统一处理过程。接口的归接口,模块的归模块,框架的归框架,做好有效的分隔。
// 判断请求是否需要处理请求参数
if (api.type == 'update' && api.tranargs){
$.each(opts, function(k, v){
if(api.tranargs.args.indexOf(k.replace(/\[\d+\]/, '')) != -1){
// TODO 处理规则
}
});
}
// 判断请求是否需要处理响应结果
if((api.type == 'query' && api.tranargs)){
$.each(api.tranargs, function(i, v){
// 递归获取对象中是否存在属性以及规则处理
core.getProp(res, v.result, '-', function(o){
if($.isArray(o)){
$.each(o, function(i, vv){
// TODO 处理规则
});
}else if($.isPlainObject(o)){
// TODO 处理规则
}
});
});
}