一个简易的openapi的小demo

openapi

这个小demo基于前面创建的springboot+vue项目

第一次听说让我写个openapi的demo时,都不知道要干啥,想着openapi不就是接口嘛,百度了好一些也没搞懂我到底要去写啥,后来去研究了一下别人写好的openapi的代码,才大致明白是啥…

  • 本篇前期准备:一个完整的springboot+vue项目集成shiro,redis(未写集成具体信息),构成一个简易的权限管理系统,这里也贴上之前的链接
    springboot+vue之旅(一)
    springboot+vue之旅(二)
  • 我们在项目里创建一个controller先写一个小接口,可以是随便查查用户信息什么的,作为我们openapi的接口
  • 然后我们在vue中的router/index.js路由目录中,加入我们的openapi菜单,我的菜单如下:
 {
    path: '/openapi',
    component: Layout,
    meta: { title: 'openapi'},
    name: 'openapi',
    children: [
      {
        path: '/url',
        component: () => import('@/views/openapi/url'),
        name: 'openapi',
        meta: { title: '服务管理' , name: 'url:list' }
      },
      {
        path: '/userUrl',
        component: () => import('@/views/openapi/userUrl'),
        name: 'openapi',
        meta: { title: '申请记录' , name: 'userUrl:list' }
      },
      {
        path: '/test',
        component: () => import('@/views/openapi/test'),
        name: 'openapi',
        meta: { title: '测试' }
      }
    ]
  },
服务管理

这个界面主要管理我们的可以提供给他人使用的接口,而只有登录系统的管理员拥有创建接口的权限(添加服务),由于是简易demo,我们把我们的接口信息分为以下几个部分:
在这里插入图片描述
分别为接口调用地址,接口名称,服务内容(包括如何调用,传递参数举例,和返回信息汇总等),最后加上一个是否启用的字段,以保证接口别人的接口是正常使用的接口,这里默认为开启,所以没有在图片中
,界面图如下:
在这里插入图片描述

申请记录

既然是一个接口,肯定是不能让人随意调用的,我们需要一个申请的通道,来指定我们允许调用我们接口的人,因此加入申请记录菜单:
在这里插入图片描述
登录人可以申请他想要调用的,已经开启的接口,然后通过管理员审核后,才可以实现调用:
在这里插入图片描述
这样一个简易的管理api就完成了

测试

由于接口是个开放接口,因此我们需要修改一下我们的接口,来保证以下几点

  1. 调用的接口是处于开启状态
  2. 验证调用人的信息是我们指定可以调用的人
  3. 参数加密,demo里用了个简单的rsa加密方式,可以自行百度如何加密
  4. 接口访问次数限制(demo里暂时未写,因为是简易的demo就没那么多东西)
    当然,你可以加上自己需要的方式
    最后分享一下我简易的后台接口:
 public ResultInfo getUserRoleById() {
        try {
            DbUrl url = dbUrlService.getOne(new QueryWrapper<DbUrl>().like("url", "openapi/接口名"));//查询该接口是否启用
            String publicKey = StrUtil.isCheckNull(request.getParameter("publicKey").trim());
            publicKey=publicKey.replaceAll(" ","+");//这个替换主要因为前端传公钥的时候会将其中的加号改为空格,会导致我们查询失败
            String userInfo = StrUtil.isCheckNull(request.getParameter("userInfo"));//加密的用户信息
            String open = url.getOpen();
            if ("0".equals(open)) {//确认接口开启
                User user = userService.getOne(new QueryWrapper<User>().eq("public_key", publicKey));//用公钥查询访问人后面与传入进来的用户名对比确认访问人正确
                if (user != null) {
                    String jsonUser = RSAUtils.decryptDataOnJava(userInfo, user.getPrivateKey());
                    JSONObject jsonObject = JSONObject.parseObject(jsonUser);
                    String username = jsonObject.getString("username");
                    if (StrUtil.isNotNull(username) && user.getUsername().equals(username)) {
                        String userId = jsonObject.getString("userId");
                        User getById = userService.getOne(new QueryWrapper<User>().eq("id", userId));
                        return renderSuccess(getById);
                    } else {
                        return renderError("用户名信息不匹配,请检查传入用户名");
                    }
                }else{
                    return renderError("传入公钥有误");
                }
            } else {
                return renderError("该服务未开启,请联系管理员");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return renderError("系统异常,请联系管理员");
        }
    }

这样一个简易的demo就完成啦

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值