虽然现在有非常多的Api调试工具,比如大名鼎鼎的PostMan,功能也非常强大,但我感觉每次都特意的开一个调式工具,本身还是非常麻烦的。不如自己手写一个Api调试工具,然后把它整合到自己的后台管理系统,这样每次在编写程序的时候就不需要单独的开一个工具。当然它还需要能自动生成文档,只要在后端生成了一个Api前端的页面也会自动更新。效果图如下
1:设计思路
首先我们要确保Api能自动显示到前端页面,那么最开始想到的是手动把API列表信息全部录入到数据库里,通过数据库来查询。但感觉此方法就谈不上自动了。那么此方法就放弃了。然后想到通过反射来获取到后台Api的所有方法。然后生成JSON文档返回给前台,这样就无需数据库,也能自动实现实时更新。
2:项目分析
首先我们编写的Api肯定是有一定规律的,比如mvc里Api的返回肯定都是在Controllers里实现的,那么它们的命名空间基本都比较相同。而我自己本身的项目都是把后台管理系统的Api直接以Get和Post来区分,然后统一放到各自的命名空间下。
上图命名空间AdminGet下的所有类都是用来显示Get数据的API,另外还有一个AdminPost。所以所有的Api方法都集中在这2个命名空间下,只需要反射这2个命名空间下的所有类就可以得到全部的Api列表。
3:代码编写
分析完毕后,那么就开始撸代码了,新建一个类专门用来处理这些反射回来的信息。我这里编写了一个ToGetApi方法,里面只有一个Tips参数用来区分是GET还是POST方法
里面其实关键代码只有一行
Var g = Assembly.GetExecutingAssembly().GetTypes().Where(t => t.Namespace == $"ide.Controllers.Admin.{ms}");
通过变量g遍历符合条件的命名空间可得到所有该命名空间的类名,然后再继续反射获取类下的方法和参数。然后把这些方法全部按照既定的格式返回给前端。我这边是直接使用object变量来制作键值对。然后把object返回给前端。最后前端返回的示例图如下
4:前端处理
后了数据后我们再前端就可以处理这些数据了,前端效果图如下
5:前端处理逻辑
既然我们有了参数和发送网址,那么前端只需要通过Ajax把这些信息显示和拼合起来就可以得到后端返回的数据。最终的效果就是本文开头的GIF图所显示的。
6:可以继续优化的程序
当然通过反射的方法,我们可以拓展很多功能,但因为我嫌麻烦所以没有做。比如API的详细说明。我这里其实有2个方法,方法1是读取类下方法的注释,但因为我用C#如果需要读取注释信息的话需要开启生成文档功能,我感觉挺麻烦的就没采用。方法如下图,打开功能后就可以读取注释了。
不好意思,上图我标注的地方有错误。是开启箭头下面的文档文件,把它打勾就可以读取注释了。
还一种方法是直接再类下方法里定义一个私有的变量来说明API的信息内容。然后同样通过反射来获取这个私有变量的值就可以了。这个方法我认为比我第一种方法更好。
7:最后总结
因为每个人的系统不同,我这里就不给出详细的源代码了。但原理基本是一样的。主要是通过反射来获取到文件的信息。然后把这些信息处理完毕后发送给前台,前端再生成可以操作的界面。这样我们再写前端的时候就不需要额外的开一个工具来查看API了,直接再后台系统里查看就行。当然我们还可以通过反射原理做出一些很不错的功能,比如编写TypeScript的时候我们经常需要频繁的去查看后端源码里的数据类型。那么通过反射,我们也可以把这些数据类型的信息反射给前端。
至此整个Api调试工具开发完毕,如果大家需要找开发ASP.NET CORE项目的同学,看的起小弟的话可以加我的微信或则QQ24722谢谢!