java 单机接口限流处理方案
325
2023-01-20
本文目录一览:
【快乐摸鱼】是一款基于Vue和Electron接口管理工具 vue的开源接口管理工具。
GitHub地址
Gitee地址
完整文档
在线体验
最初构建这个项目的时候是为了学习Node.js和解决团队前后端协调问题。社区中有 YApi 、Rap2、Doclever、 Nei、Swagger、Apidoc等开源解决方案接口管理工具 vue,同时也存在 Postman、Eolinker、ApiPost等商业解决方案。
在这之前团队尝试了YApi和Rap2等社区方案接口管理工具 vue,接口管理工具 vue他们能够满足一些基本的需求,但是在深入使用以后,还是出现了一些影响效率的问题。当时使用这两个工具最大的问题就是接口无法支持多级嵌套,某些项目接口多了以后会导致检索效率大大降低。于是尝试从头开始写一款接口管理工具。
非常核心的一个功能,在前后端分离情况下,一套简洁的团队管理策略会大大提高分工效率。我们将权限分为 只读、读写、管理员三类。
上面的三种角色可以满足大部分日常使用需求。在一些特殊情况下你可能需要更加细粒度的权限控制,比如:拥有读写权限的用户你只希望他能编辑文档,但不希望他能导出全部文档。我们提供了自定义角色功能,可以精确到每一个接口和路由(一般情况下用不到)。
非常核心的一个功能,设计一个方便并且易使用的目录导航能够大大增强录入体验。我们从其他开源项目issue中总结了一些常见需求。
工具实现了上面的全部功能,同时也扩展了一些实用的功能。
标签导航是为了方便开发人员在多个接口之间快速切换,开源的产品这块做的并不是很完善,我们在实践中总结了这些需求。
大部分商用的接口工具都具备导航标签功能,但是开源产品这块大都不具备标签导航功能或者功能完成度不高
大部分的接口工具都会内置接口调试功能,这样开发人员只需要使用一个工具就能完成接口调试和接口录入。不过由于浏览器本身的限制(同源策略),直接在web端发起HTTP请求大概率会失败。这里列举了一些常见的解决方案。
从技术上来说,使用客户端来规避同源策略是一种比较好的实践,同时依托客户端强大的api还能完成很多web端无法完成的事情,当然安装客户端也会给用户带来一些不方便。目前主流的商业项目大都采用客户端的形式来为用户提供接口调试功能,部分工具甚至不提供web端的使用。我们采用了客户端的方式来实现接口调试,同时也保留了web端的使用功能,除了接口调试和Mock功能无法使用外,web端和客户端在功能上没有其他区别。我们也会在未来提供浏览器插件功能,这样用户就可以在web端使用接口调试功能了
我们总结一些常见的接口调试需求
对接口的增删改查是整个接口工具最核心的部分,常见的开源产品对 请求参数(Body),多个返回参数方面支持比较弱。我们总结了在典型业务场景下,接口录入应该包含以下核心模块。
【接口录入工作区】
除了完善必要的接口模块,工具还在录入效率方面想了很多办法。我们从Yapi、Rap2等开源项目issue中整理用户常见的录入需求。
目前市面上接口工具总类繁多,在处理导入的时候会有以下几个主要问题。
目前比较稳定和被普遍认可的规范是 OpenAPI 规范,很多商业化的工具都是支持这种规范的。postman这类工具拥有非常大的市场占有率,大部分工具也都支持这种类型数据导入。我们收集了一些常用的接口工具,并且列出了工具对导入的支持情况。
在常规导入需求上面,我们扩展了一些功能,提高了部分项目内迁移效率。
导出功能一方面是方便用户分享文档给第三方用户,另一方面也提供了一定的迁移和备份能力。下面是一些常见的导出场景
日志功能是团队管理和安全操作中非常重要的一环,工具对接口的每一步操作都做详细记录。
除了基本的记录以外,工具也提供非常丰富的检索。在某些操作上面用户可能希望获取更加详细的日志信息,例如:对于编辑文档,用户可能更希望知道具体改变了哪些内容。工具目前在这方面的支持度有限,未来会继续完善这块内容。
工具区分 接口录入 和 接口预览 两个状态,接口录入的目的是达到高效录入,接口预览的目的是达到高效检索。和其他工具导出数据不同,工具在检索和预览方面做了一些优化。
在实际项目开发的时候,联调人员更关心某某人修改的最近几条数据,通过过滤条件能够非常高效的进行数据检索。
相对于表格形式的json展示,下面这种呈现形式对开发人员来说是非常友好的。
可以使用Mock功能来进行快速开发,和大部分接口工具一样我们支持 Mock.js 语法,同时我们简化了整个mock过程你无需做任何额外的配置。工具会在本地启动一个Mock服务器,你可以简单的把这个服务器当作后端的服务器。
非常遗憾,目前还不支持这个功能,不过我们已经开始开发这个非常重要的功能了。
客户端技术栈
服务端技术栈
目前开源类的接口工具大都只提供使用以及部署文档,二次开发对于用户来说会比较困难。为了延长项目寿命,同时也为了吸引更多开发者参与,我们把完善 开发文档 和 产品设计思路 作为了最重要的开发任务之一。由于项目本身的复杂性,完善的开发文档将会占据大量的开放时间,文档会有一定的滞后性。
产品设计思路
开发文档
部署文档
我们希望给正在寻找接口管理工具的用户多提供一种选择,同时也不断完善产品设计和开发文档,希望吸引更多的人参与到项目中来。
我不知道您说的不会是指什么,一下是我总结的一些做法,希望对你有帮助。
入职如果被安排任务,肯定是因为简历上,或者面试过程中你说过你做过类似的,如果没做过可别乱说,不然会出事,我是确实私下里有跟着视频做过,所以虽然做的比较烂,但是跌跌撞撞做出来了,不然就凉了。
其实很多的功能是不用自己写的,我不了解项目情况,基本上都是自己写,结果不仅写的不好,而且跟别人的页面差别也很大,很多方法也很难调用,所以动手之前还是有必要好好看看前辈们写好的自定义组件、公共样式,公共方法,数据命名和一些编程习惯的,这些在培训班和自学是学不到的。
入职流程大致是这样的,首先拿到电脑先清理干净,按装运行环境和一些比较的工具,我安装了vscode、node、vue-cli4、git、HbulidX、微信开发者工具。然后拿到代码管理工具和接口管理工具,我们公司是gitlab和AMS开源版。最后用git克隆下来,打开好好看自己要做到部分有没有类似的页面。如果有照着人家的做。
Vuex 作为一个老牌 Vue 状态管理库,大家都很熟悉了
Pinia 是 Vue.js 团队成员专门为 Vue 开发的一个全新的状态管理库,并且已经被纳入官方 github
为什么有 Vuex 了还要再开发一个 Pinia ?
先来一张图,看下当时对于 Vuex5 的提案 ,就是下一代 Vuex5 应该是什么样子的
Pinia 就是完整的符合了他当时 Vuex5 提案所提到的功能点,所以可以说 Pinia 就是 Vuex5 也不为过,因为它的作者就是官方的开发人员,并且已经被官方接管了,只是目前 Vuex 和 Pinia 还是两个独立的仓库,以后可能会合并,也可能独立发展,只是官方肯定推荐的是 Pinia
因为在 Vue3 中使用 Vuex 的话需要使用 Vuex4,并且还只能作为一个过渡的选择,存在很大缺陷,所以在 Componsition API 诞生之后,也就设计了全新的状态管理 Pinia
Vuex : State 、 Gettes 、 Mutations (同步)、 Actions (异步)
Pinia : State 、 Gettes 、 Actions (同步异步都支持)
Vuex 当前最新版是 4.x
Pinia 当前最新版是 2.x
就目前而言 Pinia 比 Vuex 好太多了,解决了 Vuex 的很多问题,所以笔者也非常建议直接使用 Pinia,尤其是 TypeScript 的项目
以 Vue3 + TypeScript 为例
安装
main.ts 初始化配置
在 store 目录下创建一个 user.ts 为例,我们先定义并导出一个名为 user 的模块
defineStore 接收两个参数
第一个参数就是模块的名称,必须是唯一的,多个模块不能重名,Pinia 会把所有的模块都挂载到根容器上
第二个参数是一个对象,里面的选项和 Vuex 差不多
比如我们要在页面中访问 state 里的属性 count
由于 defineStore 会返回一个函数,所以要先调用拿到数据对象,然后就可以在模板中直接使用了
比如像注释中的解构出来使用,是完全没有问题的,只是注意了,这样拿到的数据 不是响应式 的,如果要解构还保持响应式就要用到一个方法 storeToRefs() ,示例如下
原因就是 Pinia 其实是把 state 数据都做了 reactive 处理,和 Vue3 的 reactive 同理,解构出来的也不是响应式,所以需要再做 ref 响应式代理
这个和 Vuex 的 getters 一样,也有缓存功能。如下在页面中多次使用,第一次会调用 getters,数据没有改变的情况下之后会读取缓存
注意两种方法的区别,写在注释里了
更新 state 里的数据有四种方法,我们先看三种简单的更新,说明都写在注释里了
第四种方法就是当逻辑比较多或者请求的时候,我们就可以封装到示例中 store/user.ts 里的 actions 里
可以传参数,也可以通过 this.xx 可以直接获取到 state 里的数据,需要注意的是不能用箭头函数定义 actions,不然就会绑定外部的 this 了
调用
打开开发者工具的 Vue Devtools 就会发现 Pinia,而且可以手动修改数据调试,非常方便
示例:
我们先定义示例接口 api/user.ts
然后在 store/user.ts 里的 actions 封装调用接口
页面中调用 actions 发起请求
在一个模块的 actions 里需要修改另一个模块的 state 数据
示例:比如在 chat 模块里修改 user 模块里某个用户的名称
user 模块里
如果本文对你有一点点帮助,点个赞支持一下吧,你的每一个【赞】都是我创作的最大动力,感谢支持 _
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~