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 是一个不错的选择

联系作者

如果您在使用过程中遇到了什么问题或者有好的建议的话,可以添加我的微信,希望可以帮助到您