接口可以方便前后端分离,也可以方便他人调用。所以项目进行接口设计是有必要的。这里使用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