让AJAX不依赖后端接口实现方案

问题是怎么个情况?
  网页中的ajax请求越来越多,或者应用开始就一直使用ajax与后端进行数据交换。(目前我在公司参与的项目就是如此)N多接口前后端来回调试是个麻烦事。
后端不可能短时间把所有的接口都写完,也不会为了前端测试而制造假的数据和接口,不仅耗费时间而且到了开发阶段返回的数据结构、接口名称也可能会有许多改动。那么后端 一边写接口一边给前端,这看起来不错。但在具体实施过程中,后端未完成的接口可能有错误,你需要不停的和后端沟通不停的找原因,有可能中途还会停滞等待后端返回数据正
确才能继续。

为什么会这样?
  1:前端在开发初期就依赖了未成形的接口。
  2:后端不完全知道前端需要的数据项及数据格式。
如何解决?
  1:需求确认会议中前后端充分讨论功能和接口。(需求明确的backlog,这个工作非常简单)
  在有完善的backlog文档前提下,用户的每个操作都被记录成明确的功能。只要在最后的确认中开发人员一致认同这些条目,就很容易总结出需要的接口。
  2:前端写接口文档(后端辅助)。
为什么是前端?
  1:前端完全了解页面需要展示的数据。2:前端完全了解需要的数据格式(如何处理错误码等等)
  前端的接口文档可能是这样:(示例登录接口)


代码如下:

:用户登录
url: ? (留给后端补充)
请求方式:POST
请求参数:email:String
pwd:String
checkCode:String
返回数据:
{
code:int,//错误编码,登录成功为0 其他错误返回错误编码,没有result项
result:{
id:int // 用户ID
name:string //用户名
...
}
}

后端如何辅助?
1:补充请求url。2:修正返回数据的字段。如果返回数据项很多文档中的字段不符合后端的开发字段,那么后端需要修改过来。
 修改文档是一个前后端讨论的过程,有任何疑问都可以沟通。文档完成以后各自一份。(文档中任何修改都可以使用其他颜色标注,提醒其他人员注意)
后端补充完整以后可能是这样:


代码如下:

:用户登录
url: user/login.php (补充)
请求方式:POST
请求参数:email:String
pwd:String
checkCode:String
返回数据:
{
code:int,//错误编码,登录成功为0 其他错误返回错误编码,没有result项
result:{
id:int // 用户ID
user:string //用户名(修改)
...
}
}

3:开发过程完全依照文档
  文档完成以后,大家心里都很清楚我只要这样做,返回、使用这样的数据就一定没错。
  后端开始写代码,完全不用理会前端,他根本不会来找你的麻烦。
前端如何依照文档开始工作?
接口都有了,返回数据也有了。那么接下来的工作就是构建一套可以使用模拟数据测试的框架。
如果使用jquery,一个简单的结构可能是这样。
用户点击登录按钮,前端模拟了文档中描述的数据,直接调用了回调函数。这跟真实情况一样。


代码如下:

View Code
Common = {
post:function(url, data, success){//一个基本的post请求封装
$.ajax({
url:url,
type:"post",
data:data,
dataType:"json",
error:function(){
//Common.tip(TipData["1002"], 0);
//ajax错误提示
},
success:function(data){
if(data && data.code != 0){
//Common.showError(data);
//错误处理code转换成文字提示给用户
};
success && success(data);
}
});
}
};
// 1:用户登录
function login(email, pwd, checkCode, callback){
//测试环境
var data = { //模拟数据
code : 0,
result:{
id:'123456',
user:"lujun"
}
};
callback(data);//直接把模拟数据传递给回调函数
return ;
//---链接真实数据的时候注释以上代码, 上线以前通过压缩工具这些注释掉会被移除
//正式环境
Common.post("user/login.php",{email:email, pwd:pwd, checkCode:checkCode}, callback);
};
//点击事件驱动登录
//登录成功执行一些列动作
$('#submit').click(function(){
var email = $('#email').val();
var pwd = $('#pwd').val();
var checkCode = $('#checkCode').val();
//调用登录接口
login(email, pwd, checkCode, function(data){
if(data && data.code == 0){
//ajax执行成功
data = data.result;
$('#userName').text(data.user);
//其他代码 ...
}
});
});

如何更好的工作?
全部功能接口都采用这样的方式工作,会发现整个应用不需要后端支持,完全用模拟数据就可以验收测试,是不是酷了一点呢!
一旦你准备链接正式数据,注释掉测试代码以后(这可能分布在代码的各个角落,10处或者更多)。你不能在测试环境、链接数据库的环境中快速切换!
这样的测试代码价值太有限。
我们可以把测试数据独立出来作为一个文件,使用方法覆盖的方式把最底层的AJAX请求方法覆盖。


代码如下:

View Code
//testData.js 用来存放所有测试数据
TestData = {
"userlogin":{ //登录的测试数据
code : 0,
result:{
id:'123456',
user:"lujun"
}
}
// ... 其他结构的测试虎踞
};
// common.js
// 覆盖 Common.post 方法
Common.post:function(url, data, success){//一个基本的post请求封装
//把url进行MD5来作为key也是一个不错的想法,可以省去那么多判断
if(url == "user/login.php"){
success(TestData["userlogin"]);
}else if(url == "other"){//其他接口
//...
}
};
// 1:用户登录
function login(email, pwd, checkCode, callback){
Common.post("user/login.php",{email:email, pwd:pwd, checkCode:checkCode}, callback);
};
//点击事件驱动登录
//登录成功执行一些列动作
$('#submit').click(function(){
var email = $('#email').val();
var pwd = $('#pwd').val();
var checkCode = $('#checkCode').val();
//调用登录接口
login(email, pwd, checkCode, function(data){
if(data && data.code == 0){
//ajax执行成功
data = data.result;
$('#userName').text(data.user);
//其他代码 ...
}
});
});

上面的代码很容易理解,想要模拟数据测试的时候就把最底层的ajax请求方法覆盖掉。
当然这只是其中的一种,你可能有更好的方法或者通过一个全局变量就可以切换两个环境,就好象 debug = false, debug = true 这样!
最后
方法说透了其实也非常简单,重要的是scrum中backlog的分解和理解。
我所在的团队现在采用这种方式工作非常顺利。
最后我一直在考虑一个合并混淆压缩有500K JS 的应用如何组织代码?

(0)

相关推荐

  • 让AJAX不依赖后端接口实现方案

    问题是怎么个情况? 网页中的ajax请求越来越多,或者应用开始就一直使用ajax与后端进行数据交换.(目前我在公司参与的项目就是如此)N多接口前后端来回调试是个麻烦事. 后端不可能短时间把所有的接口都写完,也不会为了前端测试而制造假的数据和接口,不仅耗费时间而且到了开发阶段返回的数据结构.接口名称也可能会有许多改动.那么后端 一边写接口一边给前端,这看起来不错.但在具体实施过程中,后端未完成的接口可能有错误,你需要不停的和后端沟通不停的找原因,有可能中途还会停滞等待后端返回数据正 确才能继续.

  • AJAX SpringBoot 前后端数据交互的项目实现

    目录 1.Ajax概述 2.基于JQuery的AJAX语法 1. Ajax 概述 Ajax 的英文全称是 ”Asynchronous JavaScript and XML“,即 ”异步的 JavaScript 和 XML“.其核心是通过 JavaScript 的 XMLHttpRequest 对象,以一种异步的方式,向服务器发送数据请求,并且通过该对象接收请求返回的数据,从而实现客户端与服务器端的数据交互. 优点:Ajax 能够刷新指定的页面区域(局部刷新),而不是刷新整个页面,从而减少客户端和

  • SpringBoot后端接口的实现(看这一篇就够了)

    摘要:本文演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范,同时再构建新的后端接口也会十分轻松. 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等).请求数据(request).响应数据(response).如何构建这几个部分每个公司要求都不同,没有什么"一定是最好的"标准,但一个优秀的后端接口和一个糟糕的后端接口对比起来差异还是蛮大的,其中最重要的关键点就是看是否规范! 本文就一步一步演示如何构建起一个优秀的后端接口体系,体系构建

  • SpringBoot+Redis实现后端接口防重复提交校验的示例

    目录 1 Maven依赖 2 RepeatedlyRequestWrapper 3 RepeatableFilter 4 RepeatSubmit 5 RepeatSubmitInterceptor 6 RepeatSubmitConfig 7 RepeatSubmitController 1 Maven依赖 <!--redis缓存--> <dependency> <groupId>org.springframework.boot</groupId> <

  • SpringBoot连接MySQL获取数据写后端接口的操作方法

    1.新建项目 2.添加依赖 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> <dependency> <groupId>org.springframework</groupId>

  • Vue请求后端接口导出excel表格方式

    目录 vue请求后端接口导出excel 调用后端接口导出excel无效果,直接访问后端url可以 controller层代码 serviceImpl代码 导出模板路径 工具箱代码 vue前端写法 vue请求后端接口导出excel 项目中遇到一个需求,用户下载文件,会从后端那里请求接口获得数据并下载导出excel表格 后端小哥给我返回的是二进制数据流,需要前端自己去处理这些数据 如下图,请求接口返回的数据都是乱码 这里我们可以在axios的请求里添加,这样返回的二进制数据就会被读取为Blob的数据

  • Rainbond调用Vue React项目的后端接口

    目录 前言 解决跨域对于不同的场景有以下几种方法: 接口没有统一 接口统一 源码部署后端 Dockerfile源码构建部署Mysql Docker镜像部署Redis Java源码构建部署 SpringBoot Rainbond中怎么部署 Vue .React 项目请参考 Rainbond部署Vue.React项目 前言 以往我们在部署前端项目后,调用后端接口有以下几种场景: 后端接口没有统一,比较分散,例如:/system/user,/tool/gen . 通常我们会在项目的全局配置文件.env

  • SpringBoot基于redis自定义注解实现后端接口防重复提交校验

    目录 一.添加依赖 二.代码实现 三.测试 一.添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-redis</artifactId> <version>1.4.4.RELEASE</version> </dependency> <dependency> <

  • SpringBoot前后端接口对接常见错误小结

    目录 前言 开始 1.实体嵌套List提交 2.普通文件上传 3.List提交 4.数组Array提交 前端 后端 前言 SpringBoot前后端接口对接工作时,经常遇到请求500,400等问题,马虎大意经常导致时间浪费,为此总结了4个常见的复杂请求类型,以此为戒. 开始 1.实体嵌套List提交 例子:提交一个老师的实体Teacher,老师管理着不同的学生,还要传入学生实体List <Student>常见问题:提交异常,会报400错误️正确前端代码 <button onclick=&

  • nodejs使用Express框架写后端接口的全过程

    目录 路由和接口 接口传参 GET接口 POST接口-普通键值对 POST接口-JSON POST接口-form-data文件上传 总结 在写接口前,我们要明白什么是接口,在前端我们叫接口,而后端就叫路由,这其实是指同一个东西. 路由和接口 路由(Routing)是由一个URL(或者叫路径标识)和一个特定的HTTP方法(GET.POST等)组成的,涉及到应用如何处理响应客户端请求.每一个路由都可以有一个或多个处理器函数,当匹配到路由时,这些个函数将被执行. // 引入express const

随机推荐