使用HttpReports快速搭建API分析平台
httpreports
简单介绍
httpreports 是 .net core下的一个web组件,适用于 webapi 项目和 api 网关项目,通过中间件的形式集成到您的项目中, 通过httpreports,可以让开发人员快速的搭建出一个 api 性能分析的基础报表网站。
主要包含 httpreports 中间件 和 httpreports.web 报表项目:
httpreports: https://github.com/springleee/httpreports
httpreports.web: https://github.com/springleee/httpreportsweb
如何使用
1.运行 httpreports.web
在github下载 httpreports.web 项目,项目地址:https://github.com/springleee/httpreportsweb, web项目是.net core mvc 项目,使用三层实现。
下载完成后,在vs中打开,然后还原nuget程序包,完成后首先 appsettings.json
appsettings.json
{ "connectionstrings": { "httpreports": "max pool size = 512;server=.;uid=sa;pwd=123456;database=httpreports;" }, "httpreportsconfig": { "dbtype": "sqlserver", "username": "admin", "password": "123456" } }
主要参数:
- httpreports:配置一个可用的连接字符串;
- dbtype:数据库类型,支持sqlserver和mysql;
- username: web项目的登录名;
- password: web项目的登录密码;
假设我们使用的是sqlserver 数据库,需要先配置connectionstrings,然后手动创建数据库 httpreports(web项目会根据数据库自动创建表,并且在第一次运行的时候mock一些数据 ),我们直接f5运行项目, 没有问题的话,会直接跳到登录页面,输入用户名密码 admin 123456,登录后,应该可以看到下面的页面
现在可以看到项目有 auth,payment,sms 三个服务节点,服务节点的定义如下:
请求地址 | 服务节点 | 说明 |
---|---|---|
auth | ||
log | ||
default | 如果没有前缀的话,就是default节点 |
如果你的项目是单个webapi项目,那么服务节点只有一个 default,如果你的项目是 gateway 网关项目,那么web项目就可以读取到多个服务节点,比如 auth 认证,payment支付等。
2.在api项目中使用
首先要删除 web 项目的mock数据,打开数据库 httpreports,打开表 requestinfo,清空数据,执行sql
delete * from [httpreports].[dbo].[requestinfo]
配置数据库连接字符串
httpreports 适用单个api项目和网关项目,这里使用 ocelot网关项目为例.
我们打开appsetting.json, 配置数据库连接字符串,需要和web项目一致
nuget引用httpreports
安装nuget包 httpreports ,打开startup
在configureservices 方法下添加:
services.addhttpreportsmiddlewire();
如果是mysql数据库,则添加:csharp services.addhttpreportsmiddlewire(options =>{ options.dbtype = dbtype.mysql; });
加入到 configure 方法 ,需要放在 app.usemvc() 或者 app.useocelot().wait() 的前面,要不然不生效
app.usehttpreportsmiddlewire();
connectionstrings 配置的连接字符串和数据库类型要一致,全部完成了以后,我们就可以使用 web 项目了。
项目环境基本要求
webapi或者网关项目支持的.net core 版本 2.2, 3.0, 3.1;
httpreports.web 的core版本为 2.2
性能事项
httpreports 中间件是异步操作,所以对api接口请求的时间可以忽略,但是由于实质使用的是数据库存储,所以要注意直接请求到数据库的压力。
下面是用postman做的一个简单测试:
webapi内的方法:
public string sql1() { sqlconnection con = new sqlconnection( "max pool size = 512;server=.;uid=sa;pwd=123456;database=hybasicdata;"); var list1 = con.query(" select * from [hybasicdata].[dbo].[customers] "); var list2 = con.query(" select * from [hybasicdata].[dbo].[customers] "); var list3 = con.query(" select * from [hybasicdata].[dbo].[customers] "); return list1.count().tostring(); }
postman分别对添加中间件和不添加中间件的 api请求 1000次,每300ms请求一次
说明 | 请求次数 | 平均响应时间 |
---|---|---|
原生api | 1000 | 32.535 |
使用中间件 | 1000 | 32.899 |
总结
httpreports 的实现原理并不复杂,如果你想给你的 webapi项目,快速的添加一套分析系统 ,那么使用httpreports 是一个不错的选择
联系作者
如果您在使用过程中遇到了什么问题或者有好的建议的话,可以添加我的微信,希望可以帮助到您