使用stub进行快速迭代开发
- - ITeye博客现在趋向于前台和后台分层开发. 前端调用后台接口获取数据,然后在页面展示.. 但是有时候前台(静态资源)和后台联调时很麻烦:. (1)后台依赖协作方,里面的内容很难遍历各种情况;. (2)后台的数据修改起来很麻烦,因为我们没法直接修改数据库,因为数据库在协作方那里.. 所以我想到了一个解决方法: stub.
现在趋向于前台和后台分层开发
前端调用后台接口获取数据,然后在页面展示.
但是有时候前台(静态资源)和后台联调时很麻烦:
(1)后台依赖协作方,里面的内容很难遍历各种情况;
(2)后台的数据修改起来很麻烦,因为我们没法直接修改数据库,因为数据库在协作方那里.
所以我想到了一个解决方法: stub
先看下我是如何操作的.
我使用 JMeter进行接口测试
执行结果如下:
但是,你们知道返回的数据来自哪里吗?
来自于如下文件:
orderContent.json的内容就是返回结果:
所以你想要返回什么内容,就可以直接修改对应的.json 文件.
规范:
比如你访问路径:/tv_mobile/stub/appstore/orderContent
那么stub目录下面一定有一个文件夹叫appstore,appstore 下面一定有一个文件orderContent.json
再比如你访问路径:/tv_mobile/stub/orgList
那么stub目录下面一定有一个文件叫orgList.json
项目使用spring MVC 框架
核心控制器:
package com.web.controller.comm;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.common.util.SystemHWUtil;
import com.common.util.WebServletUtil;
import com.io.hw.file.util.FileUtils;
import com.util.JSONPUtil;
/***
* 用于stub
*
* @author huangweii 2015年5月29日
*/
@Controller
@RequestMapping("/stub")
public class StubController {
protected Logger logger = Logger.getLogger(this.getClass());
public static final String stub_folder = "stub/";
public static final String stub_file_Suffix = ".json";
/***
*
* @param request
* @param action
* @param callback
* @return
*/
@ResponseBody
@RequestMapping(value = "/{action}", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF)
public String corsJsonSimple(HttpServletRequest request,
@PathVariable String action, String callback) {
String content = null;
content = stub(request, stub_folder + action + stub_file_Suffix);
return JSONPUtil.getJsonP(content, callback);
}
/***
*
* @param request
* @param namespace
* @param action
* @param callback
* @return
*/
@ResponseBody
@RequestMapping(value = "/{namespace}/{action}", produces = SystemHWUtil.RESPONSE_CONTENTTYPE_JSON_UTF)
public String corsJsonSimple(HttpServletRequest request,
@PathVariable String namespace, @PathVariable String action,
String callback) {
String content = null;
content = stub(request, stub_folder + namespace + "/" + action
+ stub_file_Suffix);
return JSONPUtil.getJsonP(content, callback);
}
private String stub(HttpServletRequest request, String path) {
return stub(request, path, SystemHWUtil.CURR_ENCODING);
}
/***
* 读取文件
* @param request
* @param path
* @param charset
* @return
*/
private String stub(HttpServletRequest request, String path,String charset) {
String content = null;
try {
String realPath2 = WebServletUtil.getRealPath(request, path);
java.io.InputStream input = new FileInputStream(realPath2);
content = FileUtils.getFullContent2(input,charset);
} catch (java.io.FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return content;
}
}
核心方法:
/**
* 获取相对地址的绝对地址
*
* @param request
* @param relativePath
* @return
*/
public static String getRealPath(HttpServletRequest request, String relativePath) {
return request.getSession().getServletContext().getRealPath(relativePath);
}