接口可以方便前后端分离,也可以方便他人调用。所以项目进行接口设计是有必要的。这里使用SpringBoot基于REST风格快速进行接口设计。
有关源码和资料可在:https://download.csdn.net/download/qq_36135928/10309244点击打开链接可以进行下载。
下面贴出有关核心代码:
API端:设计接口
@RequestMapping(value = "/api")
@Controller
public class ApiController extends BaseController{
@RequestMapping(value = "/getJson.do",method = RequestMethod.POST)
@ResponseBody
public String getJson(){
//获取请求中的数据
PageData pageData = super.getPageData();
//封装返回结果
PageData result = new PageData();
//签名验证
if(!DigestUtil.toSign(pageData).equals(pageData.getString("sign"))){
result.put("errCode",100);
result.put("errMsg","签名验证失败");
return JsonUtil.getJson(result);
}
//获取请求中的参数
//比如传递的参数是 1 就返回一个list数据,否则返回一个string
int parameter = pageData.getInt("parameter");
//根据获得的参数,写处理逻辑,可以与数据库交互,这里模拟一个list返回
if(parameter == 1){
//模拟数据,可与dao层连接
List<String> list = new ArrayList<>();
list.add("clare");
list.add("tung");
//参数匹配返回结果
result.put("data",JsonUtil.listToJson(list));
result.put("errCode",0);
result.put("errMsg","");
return JsonUtil.getJson(result);
}
//其他结果返回
result.put("data","Nothing");
result.put("errCode",102);
result.put("errMsg","请求没有结果");
return JsonUtil.getJson(result);
}
}
Manager端:调用接口
@Service("managerService")
public class ManagerService {
public String getJson(int parameter) {
//封装请求信息
PageData htp = new PageData();
htp.put("version","1");
htp.put("r",String.valueOf((int)(Math.random()*100)));
htp.put("parameter",String.valueOf(parameter));
//签名
htp.put("sign", DigestUtil.toSign(htp));
//发送请求,获得返回数据
String json = HttpClientUtils.doPost("http://localhost:8100/api/getJson.do",htp);
//可对数据进行处理
Map map = JSON.parseObject(json);
//签名验证失败
if(map.get("errCode").toString().equals("100")){
return map.get("errMsg").toString();
}
//这里直接返回整个json串,看一下效果
return json;
}
}
接口文档:
调用结果在浏览器显示:
补充:签名算法:(签名认证是一种安全机制)
对待签名字符串采用MD5进行加密,将加密串全部转换为小写字母,取第8位开始的16个字符进行反转,生成最终的签名字符串。
例如生成的MD5串为:4f445e77fa27d9bcce5cefdb0b9613a2
生成的最终签名为:bdfec5eccb9d72af