mock平台支持三种方式(URI、方法、RPC)
URI:当前端需要根据接口的各种状态来进行不同的展示时,而后端还没有写完完整的代码时,可以在项目开发初期通过该方式进行自定义设置接口返回结果。
方法:当后端需要某个方法返回某些特定的值时,而这时真实的情况又很难构造这个值时,就可以采用该方式。
RPC:当后端要与别的服务进行合作时,而别的服务方接口提供较慢或有问题时,可以采用该方式进行自测。
mock平台的数据存储可以是数据库或者其他平台等等,主要存储对应关系,key可以为URI或方法的全限定名和参数,value为具体的json结构,为了防止影响别人,用用户ID进行区分,如用户ID和key组成唯一键,这些数据是从控制台进行设置。
下面是具体代码过程:
模拟上下文配置,包括当前所处环境,spring容器,存储当前用户登陆状态的ThreadLocal,类方法参数拼接key的方法,获取mock平台数据的方法,平台数据存储采用数据库,以及自动生成指定类方法所代表的key的方法,方便使用者在控制台进行key-value添加。
@Configuration
public class MockContext implements ApplicationContextAware {
private static final boolean online = !EnvUtils.isOffline();
private static FastThreadLocal<LoginUser> fastThreadLocal = new FastThreadLocal<>();
private static ApplicationContext instance;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
instance = applicationContext;
}
public static ApplicationContext getInstance() {
return instance;
}
/**
* 是否是线上环境
*/
public static boolean online() {
return online;
}
public static void set(LoginUser loginUser) {
fastThreadLocal.set(loginUser);
}
public static LoginUser get() {
return fastThreadLocal.get();
}
public static void remove() {
fastThreadLocal.remove();
}
/**
* 唯一url(类,方法,参数拼接)
*/
public static String getUrl(String className, String methodName, Class<?>[] parameterTypes) {
StringBuilder sb = new StringBuilder(className);
sb.append(".").append(methodName);
StringJoiner stringJoiner = new StringJoiner(",", "(", ")");
if (parameterTypes != null) {
for (Class<?> parameterType : parameterTypes) {
if (pa