个人认为前端最好的请求api组织方案

263 阅读4分钟

相信前端开发框架中,很多都是用的vue-admin-element,或者是ruoyi-ui(这个其实也是vue-admin-element),不过就是已经对好了接口的,可以直接用的

代码如何组织?

代码的组织无非就是下面提到的这些,然后部分取舍

  • 可维护性
  • 冗余
  • 复用
  • 可读性
  • 可扩展性

这就是框架要做的其中一件事情,框架要去做解耦和分层,这时候就会MVC,MVVM等概念的出现,都是为了更好的组织代码去实现一个功能,但同样的,这也给框架带来了入侵性,你无法平替到其它的框架平台

回归正题

我相信很多同行的项目里面都会有这个

image.png

image.png

这是ruoyi-ui的api和views代码,他这里的写法是ui对应api请求

因为官方是这样写的,所以后续二开的项目中基本也都是这样写,新建一个views的子文件夹,然后再新建一个api的子文件夹,这两个文件夹名字一样,在文件里面再建vue和请求js

首先第一个问题就是冗余

  • 无法避免后端的api接口只在这一个页面上用
  • 按照之前的做法就是再建立一个api文件,去对应ui,这就带来了很大的冗余
  • 因为这个冗余就会带来第二个问题

第二个问题就是乱

  • 项目开发中但凡有一位同事复用了api,可维护性立马下降到冰点
  • 也就是views子文件夹复制一份然后api的迁移,也就是模块迁移
  • 这就带来了第三个问题

第三个问题文件夹复制

叫文件夹,其实更应该叫模块,相信开发的时候都是把基本差不多的功能页面放在一个views下面,也就是一个模块的功能全部放在一起,所以感觉叫模块比较好

比如有这样一个场景:

  • 来了一个新的项目,新项目里面有一个模块和这个项目里面的一个模块很像,所以项目经理就说复制一个这个模块出来,然后进行改

在代码组织中:

  • 后端:基本上是一个模块就是jar,所以请求也是统一的,全部放在这个jar中,所以后端在迁移的时候就是直接复制这个模块生成一个新的jar,然后统一修改请求,再改改数据库就ok了
  • 前端:如果严格遵循ruoyi-ui的方法其实复制也是很简单的,但是无法避免有同事给你复用其他的api,然后复制出来的模块这个api你就凉了,你需要各个页面去找,去做迁移,然后改api前缀,这个工作量无法预估,且无法保证是否完全迁移完成

方案

针对上面的问题以及在不修改工程基本结构的情况下,api的组织最好的方案就是跟着后端走,相信springboot的api组织应该是最好的,不然这个框架也不会活这么久,生态还越来越好

所以api组织中个人认为这样分是最好的

比如有url:

  • /base/name/url1
  • /base/name/url2
  • /base/name/url2/urlchildren1
  • /base/name/url2/urlchildren2
  • /base/name --- get
  • /base/name --- post
  • /base2/name/url1
  • /base2/name/url2
  • /base2/name --- get
  • /base2/name --- post

那么文件结构就是这样的

  • api
    • base
      • name.js
        • baseNameUrl1()
        • baseNameUrl2()
        • baseNameUrl2Urlchildren1()
        • baseNameUrl2Urlchildren2()
        • baseNameGet()
        • baseNamePost()
    • base2
      • name.js
        • base2NameUrl1()
        • base2NameUrl2()
        • base2NameGet()
        • base2NamePost()

也就是方法的名称就是完整url的驼峰,这样个人认为有几个好处:

  • 因为是完整url,所以方法的名字是唯一的,不需要担心重复,这个springboot启动的时候会检测url唯一,不唯一就会报错
  • 方便定位,很多时候我们都是看url去找方法,这样写url的定位一目了然
  • 没有冗余
  • 项目迁移,后端复制一个模块,你就复制对应的api和views,然后全局替换路径即可,不用担心缺胳膊少腿

最后 个人意见,不许勿喷

欢迎关注公众号致心空间:O(∩_∩)O😁

致心空间