dbrest 配置说明

Posted by Henry on 01-06,2024

本系列其他文章

dbrest 快速入门
dbrest 功能介绍
dbrest 配置说明
dbrestapi调用说明含样例代码
dbrest lua脚本模板
dbrest小试牛刀
dbrest压测结果

conf.xml配置说明

<?xml version="1.0" encoding="UTF-8" ?>
<Config>
   <!--http监听端口-->
   <ListenPort>9000</ListenPort>
   <TLSConfig>
      <Enabled>true</Enabled>
      <CertPath>your_ssl.pem</CertPath>
      <KeyPath>your_ssl.key</KeyPath>
   </TLSConfig>
   <!--是否以Debug模式运行,Debug模式会输出完整日志。缺省值:false-->
   <Debug>true</Debug>
   <!--api路径名称,缺省值:/api-->
   <ApiPath/>
   <!--http读写超时(秒),缺省值:300-->
   <ReadWriteTimeout/>
   <!--是否支持Gzip,启用时会响应Accept-Encoding: gzip。缺省值: false-->
   <EnableGzip/>
   <!--是否支持跨域调用-->
   <EnableCors/>
   <!--限定来源域配置,仅在EnableCors设置为true时,此配置项才生效。多来源域用英文逗号分隔。缺省默认值:*,表示允许所有来源域-->
   <AllowedOrigins/>
   <!--是否启用IP限速-->
   <Limitable/>
    <!--每秒钟限制请求数;仅在Limitable设置为true时,此配置项才生效。-->
   <LimitRps/>
   <!--http请求body大小限制(KB);缺省值:0,表示不限制-->
   <MaxRequestBodySize/>
   <!--代理深度;经由几层反向代理服务器访问此服务;缺省值:0-->
   <ProxiedDepth/>
   <!--序列化JSON时是否转义html;缺省值:false-->
   <EscapeHtml/>
   <!--数据库配置-->
   <DBConfig>
      <!--supported driver: [mysql, mssql, postgres]-->
     <Driver>mysql</Driver>
     <Server>127.0.0.1</Server>
     <Port>3306</Port>
     <User>root</User>
     <Password>123456</Password>
     <Database>db1</Database>
     <!--与数据库建立连接时超时时间(秒),缺省值:15-->
     <ConnectTimeout></ConnectTimeout>
     <!--最大连接数,缺省值:数据库中设置-->
     <MaxOpenConns></MaxOpenConns>
     <!--连接存活时间(秒),缺省值:数据库中设置-->
	  <ConnMaxLifetime></ConnMaxLifetime>
     <!--DSN Enabled为true时,使用ConnectionString中定义的连接字符串连接数据库。ConnectionString支持URL格式也支持Driver特有的格式。
      请注意,不同的数据库Driver,ConnectionString的URL格式有差异。
      mysql中密码含有特殊字符时无需转义,其余需要预先urlEnocde转义
      xml中&要转义为&amp;
      mysql:ConnectionString="username:password@tcp(host:port)/dbname?charset=utf8&multiStatements=true&timeout=15s"
      mssql:ConnectionString="sqlserver://username:password@host:port?database=dbname&encrypt=disable&connection+timeout=15"
      pg:ConnectionString="postgres://username:password@host:port/dbname?sslmode=disable&connect_timeout=15"
     -->
     <DSN Enabled="false" ConnectionString="root:123456@tcp(127.0.0.1:3306)/db1?charset=utf8&amp;multiStatements=true&amp;timeout=15s"/>
     <!--时区,默认值UTC,本地时区用Local表示-->
     <Location/>
     <!--数据库返回的日期格式,默认UTC格式-->
     <DBDateTimeFormat/>
     <!--时区时差(分)-->
     <DBZoneOffsetMinutes/>
   </DBConfig>
   <!--表名是否强制转为小写,缺省值:false,当配置为true时,配置中涉及到的表名称,
   以及客户端请求URL路径中的表名称,会强制转为小写进行路由匹配。-->
   <LowerCaseTableNames/>
   <!--代理的表集合-->
   <Tables>
      <Table>
         <!--Schema名称,缺省值:空。匹配数据库用户的默认Schema-->
         <Schema/>
         <!--表名称,LowerCaseTableNames配置值为false时,区分大小写-->
         <Name>tab1</Name>
         <!--SQL中表名是否需要用引括号括住(``,[],""),表名中含有特殊字符或者postgres表中使用了大写字母时需要设置为true,缺省值:false-->
         <NeedQuoted/>
         <!--表查询是否需要用户认证,缺省值:false-->
         <NeedAuth>true</NeedAuth>
         <!--表是否允许Insert,缺省值:false-->
         <Insertable>false</Insertable>
         <!--表是否允许Update,缺省值:false-->
         <Updatable>false</Updatable>
         <!--表是否允许Delete,缺省值:false-->
         <Deletable>false</Deletable>
         <!--表中AccessKey对应的列名,缺省值:空值。注意:配置了列名后,针对http Get查询, 仅当NeedAuth为true时,过滤才生效-->
         <UserIDColumn/>
         <!--并发写入数,缺省不限制并发数-->
         <ParallelCount/>
         <!--扩展的lua脚本文件,lua文件模板参考demo.lua文件。缺省值:空值。-->
         <LuaFile/>
         <!--Lua脚本生成的SQL是否在主事务中执行,缺省值:false-->
         <LuaProcessInTrans/>
         <!--表查询默认返回记录数量的limit限制,缺省值:0-->
         <DefaultLimit/>
      </Table>
      <Table><Schema/><Name>emp</Name><NeedAuth>true</NeedAuth><Insertable>true</Insertable><Updatable>true</Updatable><Deletable>true</Deletable><ParallelCount/></Table>
   </Tables>
   <!--IP拦截器配置;细粒度优先级大于粗粒度优先级,允许优先级高于阻塞优先级,默认允许所有-->
   <IPBarrierConfig>
      <!--是否启用IPBarrier模块,缺省值:false 表示不开启-->
      <Enabled>true</Enabled>
      <!--缺省是否阻塞(true:阻塞,false:允许); 缺省值false,表示允许所有IP-->
      <BlockByDefault/>
      <!--split multiple ip or subnet addresses by commas-->
      <AllowedIPs/> 
      <BlockedIPs/>
      <!--split multiple country ISO codes by commas-->
      <BlockedCountries>AU,CA,US,JP</BlockedCountries>
      <AllowedCountries/>    
   </IPBarrierConfig>
   <AuthConfig>
      <!--dbrest支持三种鉴权:BasicAuth, MD5Auth, BearerTokenAuth-->
	   <!--BasicAuth即 http basic authorization,
	   AccessAccount中配置的AccessKey与AccessSecret
	   分别对应basic authorization认证需要的username与password
	   验证方法请自行百度,此处不再详述
	   -->
	   <!--MD5Auth鉴权方式:调用方在发送http请求前,在Headers中增加4个键值对,伪代码如下:
      //AccessAccount中配置的AccessKey值
		var AccessKey ="client2";
		//AccessAccount中配置的AccessSecret值
		var AccessSecret = "12345";

		//当前时间戳(格式yyyyMMddHHmmss,例如:20200928234836)
	    var clientTime = DateTime.Now().ToString("yyyyMMddHHmmss");

		//对上面定义的三个字符串变量连接后进行md5签名
		//Utils.MD5表示对字符串进行md5计算的函数
		var md5Sign = Utils.MD5(AccessKey+clientTime+AccessSecret);
		http.Request.Headers.Add("AccessKey",AccessKey);
	   http.Request.Headers.Add("ClientTime",clientTime);
		http.Request.Headers.Add("Authorization",md5Sign);
		http.Request.Headers.Add('Content-Type':'application/json;charset=utf-8')
		
		//向服务器发送请求(CURD)...
	   -->

      <!--BearerTokenAuth鉴权方式, 即jwt(json web token); 分两个步骤,第1步,调用生成jwt的api,生成一个jwt。第2步访问业务API时Headers参数中携带生成的jwt。
       1.生成jwt:
       1.1) 生成jwt的api的URL格式: http://您的服务器IP:端口/<ApiPath>节点参数值+_gentoken
       例如:ApiPath默认值是"api",端口配置为9000, 则本地访问url为: http://127.0.0.1:9000/api_gentoken
       例如您修改配置的ApiPath的值为api2,则本地访问url为: http://127.0.0.1:9000/api2_gentoken
       1.2), http Method: 支持POST或者GET
       1.3),传参方式: 
       传参方式与MD5Auth鉴权方式完全相同,也是在Headers中增加4个键值对,细节不再重复说明,请参看MD5Auth鉴权方式。
       1.4)返回格式:
       调用成功返回http状态码200, 返回报文: {"token":"返回的token字符串","maxAge":"token存活时长(秒)","error":""}
       调用失败返回http对应的错误状态码, 返回报文: {"error":"错误描述"}
       说明:超过存活时长后,jwt将过期,你需要重新生成一个jwt.
       2.访问业务API:
       Headers中增加参数"Authorization",设置其值为"Bearer " + 第1步成功返回的报文中的token值。
       例如:第一步成功返回报文为:{"token":"aaabbbccc","maxAge":86400}
       则Authorization参数设置的伪代码如下:
       http.Request.Headers.Add("Authorization","Bearer aaabbbccc");

       //向服务器发送请求(CURD)...
      -->

      <!--AuthType: BasicAuth, MD5Auth, BearerTokenAuth; BasicAuth is default vlue-->
      <AuthType></AuthType>
      <!--客户端请求时间戳,与服务器时间误差范围允许的值范围,最小值3秒。AuthType值是MD5Auth时,此配置生效-->
      <!--minimum 3 seconds-->
      <AuthTimeout>10</AuthTimeout>
      <!--BearerTokenConfig is only useful when AuthType is BearerTokenAuth-->
      <!--SigningKey: jwt签名密钥,缺省值为"yourSecret"; MaxAge: jwt存活时间(秒),缺省值为86400-->
      <BearerTokenConfig SigningKey="yourSecret" MaxAge="86400"/>
      <!--调用方安全账户配置-->
      <AccessAccounts>		
		   <!---AccessKey:用户名;AccessSecret:用户密钥-->
         <AccessAccount AccessKey="client1" AccessSecret="abcde">
            <!--调用方允许访问的表名称,多表名之间用英文逗号","分割
            LowerCaseTableNames配置值为false时,表名区分大小写,
            建议表名称与Tables配置节的表名称保持一致.
            如果配置了Schema,请在此处用Schema名称.表名称,例如dbo.students
            -->
            <AllowedTables>tab1,tab2</AllowedTables> 
            <!--调用方允许访问的ApiFuncs的匹配模式;判断ApiFunc的Patterns是否匹配AllowedPatterns定义的正则pattern list,pattern之间以英文逗号','分隔-->
            <AllowedPatterns></AllowedPatterns>
            <!--是否启用验证调用方IP白名单-->
            <FilterByIP>false</FilterByIP>
            <!--调用方IP地址白名单,多IP用英文逗号","分割。-->
            <!--split multiple ip addresses by commas-->
            <ClientIP>127.0.0.1</ClientIP>
            <PubField01></PubField01>
            <PubField02></PubField02>
            <PubField03></PubField03>
            <PubField04></PubField04>
            <PubField05></PubField05>
            <PriField01></PriField01>
            <PriField02></PriField02>
            <PriField03></PriField03>
            <PriField04></PriField04>
            <PriField05></PriField05>
         </AccessAccount>
         <AccessAccount AccessKey="client2" AccessSecret="12345"> 
            <AllowedTables>*</AllowedTables>
            <AllowedPatterns>*</AllowedPatterns>
            <FilterByIP>true</FilterByIP>
            <!--split multiple ip addresses by commas-->
            <ClientIP>127.0.0.1, 192.168.243.1</ClientIP>
         </AccessAccount>
      </AccessAccounts>
   </AuthConfig>
   <!--定时任务配置,商用版支持-->
   <Jobs>
      <!--Cron表达式与linux cron表达式相同-->
      <Job Cron="*/1 * * * *" LuaFile="demo.lua" Func="job1"/>
      <Job Cron="*/2 * * * *" LuaFile="demo.lua" Func="job2"/>
   </Jobs>
   <!--文件服务器配置-->
   <FileServerConfigs>
      <FileServerConfig>
         <!--是否开启文件服务,缺省值:false 表示不开启-->
         <Enabled>false</Enabled>
         <!--服务器物理路径, 不允许空值-->
         <ResourcesRoot>c:/usbssd/</ResourcesRoot>
         <!--http请求根路径, 不允许空值-->
         <RequestURIRoot>/api_resources/</RequestURIRoot>
         <!--上传附件的key值, 缺省值"file"-->
         <!--g.print(g.requests("POST","http://127.0.0.1:9000/api_upload0",'','{"Content-Type":"multipart/form-data"}','{"@file":"c:/test.pdf"}'))-->
         <UploadFileKey>file</UploadFileKey>
         <!--上传附件存放到ResourcesRoot属性指定的目录下的子目录名称。缺省值为空,表示存放到ResourcesRoot属性指定的目录下-->
         <UploadSubDir>tmp</UploadSubDir>
         <!--文件服务是否需要鉴权, 缺省值"false"-->
         <NeedAuth>true</NeedAuth>
         <!--上传附件的大小限制(KB), 缺省值1024(即1MB),最大别超过100MB-->
         <MaxUploadSize/>
      </FileServerConfig>
   </FileServerConfigs>
   <ApiFuncs>
     <!--Pattern属性表示相对路径; Method表示HttpMethod,缺省值:"GET"; Synchronized表示是否需要线程同步, 缺省值"false"; NeedAuth表示是否需要鉴权, 缺省值"false"; Precompiled表示是否预编译,缺省值"false";-->
     <ApiFunc Pattern="/apid/func1" Method="POST" NeedAuth="false" LuaFile="apifunc.lua" Func="func1" Precompiled="true"/>
     <ApiFunc Pattern="/apid/func2" Method="GET" NeedAuth="false" LuaFile="apifunc.lua" Func="func2" Precompiled="true"/>
   </ApiFuncs>
   <!--反向代理配置-->
   <RPConfig >
     <!--是否开启服务,缺省值:false 表示不开启-->
     <Enabled>true</Enabled>
     <!--http请求根路径, 不允许空值, 缺省值为<ApiPath>节点的值+"_rp/"后缀。例如"/api_rp/"-->
     <RequestURIRoot></RequestURIRoot>
     <Locations>
       <!--Pattern属性表示代理子路径; HostName表示实际被代理的主机路径; NeedAuth表示是否需要代理服务器代鉴权, 缺省值"false"; -->
       <Location Pattern="/path1" HostName="https://www.infoswap.cn:443/" NeedAuth="true"/>
       <Location Pattern="/path2" HostName="http://100.100.100.100:9000/"/>
     </Locations>
   </RPConfig>
   <!--本地缓存大小(单位MB),缺省值512KB-->
   <LocalCacheSize/>
   <!--redis配置,Enable属性为"true"时,配置生效。DataBase属性表示DB的索引,Timeout属性表示连接以及读写操作的超时时间(秒)-->
   <RedisConfig Enabled="true" Host="127.0.0.1:6379" Password="" DataBase="0" Timeout="300"/>
   <!--mongodb配置,Enable为"true"时,配置生效。Uri属性表示DB的URI,Timeout属性表示连接以及读写操作的超时时间(秒)-->
   <MgoConfig Enabled="true" Uri="mongodb://localhost:27017/?maxPoolSize=3" Timeout="10"/>
   <License>pls paste your license here</License>
</Config>