工程师工具箱系列(2)hasor

文章目录

    • 工程师工具箱系列(2)hasor
      • 简介
      • 特点
      • 环境准备
        • 引入依赖
        • 数据库脚本
        • 文件配置
        • Hasor配置
      • 运行测试
      • 小结

工程师工具箱系列(2)hasor

简介

Hasor有着自己的独立的生命周期与Spring的不同,是一套完整的体系,提供了注入DataQL、Dataway、hasor-web等等,让你的代码无需在写Controller、Service、Dao、BO、VO、mapper等等东西,这是一个数据聚合项目。

Hasor 本身是由多个不同系列框架组合而成的一个框架体系。这些子框架的能力涵盖了 IoC、Aop、WebMVC、数据库以及其它方方面面。这一切的基础要归功于 Hasor 的插件化能力。

Hasor 帮助您设计更好的 API,它独有的框架扩展能力可以使新的能力完全无缝的集成到统一的 API 体系中。我们构建了通用功能,使您能够扩展 Hasor,而不是向核心框架添加每个特性。

Hasor 的扩展能力更像是一个乐高玩具的接口,任何人都可以通过非常简单的方式提供乐高积木,然后轻松的将它们融合到一起。在使用的过程中完全感受不到背后是多个不同的框架在协作。

特点

Hasor 的设计思想是 “微内核+插件”。微内核是指提供少量必要的功能支持,其余功能全部通过插件化方式实现。这样一来扩展 Hasor 就只需要无限制的添加插件而不是修改核心框架。

Hasor 独有的 API 融合机制会,让框架新的能力完全无缝的集成到统一的 API 体系中。下面这张图是 Hasor 的现有框架体系

环境准备

引入依赖

以主流Maven和Springboot工程为例

<!-- dataway -->
<dependency><groupId>net.hasor</groupId><artifactId>hasor-spring</artifactId><version>${hasor.version}</version>
</dependency>
<dependency><groupId>net.hasor</groupId><artifactId>hasor-dataway</artifactId><version>${hasor.version}</version>
</dependency>
<!-- druid 连接池 -->
<dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.21</version>
</dependency>
<!--mysql 驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.19</version>
数据库脚本

考虑到不同版本字段不同,数据脚本最好从依赖包中获取,目前支持好几种数据库,大家根据数据库类型自选

以下是4.2.5版本脚本

CREATE TABLE interface_info (api_id          varchar(64)  NOT NULL COMMENT 'ID',api_method      varchar(12)  NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',api_path        varchar(512) NOT NULL COMMENT '拦截路径',api_status      varchar(4)   NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',api_comment     varchar(255) NOT NULL COMMENT '注释',api_type        varchar(24)  NOT NULL COMMENT '脚本类型:SQL、DataQL',api_script      mediumtext   NOT NULL COMMENT '查询脚本:xxxxxxx',api_schema      mediumtext   NOT NULL COMMENT '接口的请求/响应数据结构',api_sample      mediumtext   NOT NULL COMMENT '请求/响应/请求头样本数据',api_option      mediumtext   NOT NULL COMMENT '扩展配置信息',api_create_time varchar(32)  NOT NULL COMMENT '创建时间',api_gmt_time    varchar(32)  NOT NULL COMMENT '修改时间',PRIMARY KEY (api_id),UNIQUE KEY uk_interface_info (api_path)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway 中的API';
CREATE TABLE interface_release (pub_id           varchar(64)  NOT NULL COMMENT 'Publish ID',pub_api_id       varchar(64)  NOT NULL COMMENT '所属API ID',pub_method       varchar(12)  NOT NULL COMMENT 'HttpMethod:GET、PUT、POST',pub_path         varchar(512) NOT NULL COMMENT '拦截路径',pub_status       varchar(4)   NOT NULL COMMENT '状态:-1-删除, 0-草稿,1-发布,2-有变更,3-禁用',pub_comment      varchar(255) NOT NULL COMMENT '注释',pub_type         varchar(24)  NOT NULL COMMENT '脚本类型:SQL、DataQL',pub_script       mediumtext   NOT NULL COMMENT '查询脚本:xxxxxxx',pub_script_ori   mediumtext   NOT NULL COMMENT '原始查询脚本,仅当类型为SQL时不同',pub_schema       mediumtext   NOT NULL COMMENT '接口的请求/响应数据结构',pub_sample       mediumtext   NOT NULL COMMENT '请求/响应/请求头样本数据',pub_option       mediumtext   NOT NULL COMMENT '扩展配置信息',pub_release_time varchar(32)  NOT NULL COMMENT '发布时间(下线不更新)',PRIMARY KEY (pub_id),KEY idx_interface_release_api  (pub_api_id),KEY idx_interface_release_path (pub_path)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Dataway API 发布历史。'
文件配置

配置项目工程中properties.yml文件

  # 数据源datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverdruid:driver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: 123321qqurl: jdbc:mysql://localhost:3306/mp?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8&allowMultiQueries=true# 是否启用 Dataway 功能(必选:默认false)
HASOR_DATAQL_DATAWAY: true
# 是否开启 Dataway 后台管理界面(必选:默认false, 生产环境不要打开!)
HASOR_DATAQL_DATAWAY_ADMIN: true
# SQL执行器方言设置(可选,建议设置)
HASOR_DATAQL_FX_PAGE_DIALECT: mysql
# dataway  API工作路径(可选,默认:/api/)
HASOR_DATAQL_DATAWAY_API_URL: /interface/
# dataway-ui 的工作路径(可选,默认:/interface-ui/)
HASOR_DATAQL_DATAWAY_UI_URL: /config/
Hasor配置
  • 配置启动类,需要加上二个注解:@EnableHasor,@EnableHasorWeb

  • 配置Module接管Spring容器和数据源

这里要注意,V4.2.2开始,Dataway前后端不再处理任何编码,需要自己指定请求和响应的编码,否则可能出现中文乱码

运行测试

运行项目Application启动类,启动过程会出现Hasor boot的样式,说明集成成功了

启动成功后,打开你的本地地址:http://127.0.0.1:10086/config

一开始整个页面是空的,你可以点击new操作按钮来添加你的接口
整个页面的布局分为三大块空间:

  • 1号区域:API列表区
  • 2号区域:调用接口参数配置区,以及相关操作
  • 3号区域:响应结果区

【示例】新增一个查询接口,查询user表里name包含某个字的人
1号区域中写下SQL语句:select * from user where `name` like concat('%',#{userName},'%')

2号区域中写下查询条件示例:{"userName":"567"} ,点击执行后

3号区域中出现响应结果:

如果接口没问题,你进行保存后再执行冒烟测试(从数据库取出示例数据进行测试),通过后你就可以发布了,发布后会在interface_release表新增一条数据

注意:同一个接口可以被发布多次,只有发布过的接口才能被访问

这里为了演示简单,采用的是常用的sql语句方式,你可以使用功能更加强大的DataQL,编写语法稍微会复杂写。不过可以支持函数式方式编写任何你想要的逻辑,格式化你需要的返回数据。

使用Postman进行调用演示:

小结

hasor的一些设计思想还是值得我们借鉴的,特别是对轻业务逻辑的系统非常适用。还有与Spring如何集成的一些思想和方法也具有很高的参考的价值。

我们可以适当加以改造实现接口配置化,同时把加入权限功能,可以解放企业中非业务层重复劳动。特别是一些报表和查询类的系统,真的是非常灵活,可以解放好多的生产力。

推荐阅读:https://www.hasor.net/doc/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691655.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计

文章目录 背景构建自动化内容生产平台系统架构设计架构详细设计流程介绍笔记来源笔记抓取干预 笔记 AIGC 赋能笔记 Rule 改写笔记特征库构建 附录Bash Cron 定时任务Golang 与 Pyhon AIGC 实践 小结 背景 在大模型的浪潮下&#xff0c;ChatGPT、Sora、Gemini、文言一心 等新技…

具有CMOS输出,高速响应特点的新型汽车级晶振SG2520CAA

爱普生推出的汽车级晶振SG2520CAA。SG2520CAA是一款CMOS输出的&#xff0c;具有高响应速度的2520封装汽车级晶振&#xff0c;具有低电流消耗&#xff0c;1.6 V至3.63 V的宽工作电压&#xff0c;以及-40C至85C的宽工作温度范围&#xff0c;此外还可提供高达125C的工作温度。符合…

实现红黑树

目录 红黑树的概念 红黑树的节点结构定义 红黑树的插入 红黑树的验证 实现红黑树完整代码 红黑树的概念 红黑树 &#xff0c;是一种 二叉搜索树 &#xff0c;但 在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是 Red 或 Black 。 通过对 任何一条从根到叶子的…

[BJDCTF2020]ZJCTF,不过如此 1

涉及&#xff1a;php的伪协议、preg_replace函数的漏洞和正则表达式的运用。 解题步骤 <?phperror_reporting(0); $text $_GET["text"]; $file $_GET["file"]; if(isset($text)&&(file_get_contents($text,r)"I have a dream"))…

7.STL_string(详细)

1. 什么是STL STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架。 2. STL的版本 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版…

FANUC机器人基本保养概述

对于工业机器人来说&#xff0c;定期保养机器人可以延长机器人的使用寿命。对于FANUC机器人来说&#xff0c;FANUC机器人的常规保养周期可以分为日常、三个月、六个月、一年、两年、三年。以下是FANUC机器人的基本保养周期概览&#xff1a; 在实际生产应用中&#xff0c;可以参…

【ORACLE战报】2024.4月最新OCP考试喜报.

课程介绍 DBA数据库管理必备认证&#xff1a;ORACLE OCP 19C 教材下载 ORACLE OCP 19C 官方电子教材 ORACLE OCP 12C官方电子教材 题库下载 ORACLE 19C题库 &#xff08;083384题、082362题&#xff09;-2024答案修正版.rar 所有的收获都是默默耕耘的成果 2024.4月【最新考试成…

加密与CA证书

文章目录 加密与CA证书http协议是不安全的使用对称秘钥进行数据加密非对称秘钥加密CA证书应用补充 加密与CA证书 CA 证书是什么&#xff0c;证书的目的是什么 首先明确一点&#xff0c;CA证书是数字时代中确保身份和数据安全的重要工具&#xff0c;为用户提供了安心、便捷和可…

向量数据库:Chroma

目录 一、Chroma 介绍 二、安装 Chroma 2.1 创建虚拟 python 环境 2.2 安装 Chroma 2.3 运行 Chroma 三、Backend API 一、Chroma 介绍 Chroma是一个开源的嵌入式数据库。Chroma通过使知识(knowledge)、事实(facts)和技能(skills)可插拔&#xff0c;从而简化了大型语言模…

设计模式之组合模式:探索对象组合的动态管理与操作技巧

​ 一、什么是组合模式 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型模式&#xff08;Structural Pattern&#xff09;&#xff0c;它主要解决的是如何将对象组合成树状以表示“部分-整体”的层次结构&#xff0c;并且可以对整个树进行统一的操作&#xff0…

Redis过期删除策略和内存淘汰策略有什么区别?

Redis过期删除策略和内存淘汰策略有什么区别&#xff1f; 前言过期删除策略如何设置过期时间&#xff1f;如何判定 key 已过期了&#xff1f;过期删除策略有哪些&#xff1f;Redis 过期删除策略是什么&#xff1f; 内存淘汰策略如何设置 Redis 最大运行内存&#xff1f;Redis 内…

住宅IP代理和数据中心/机房IP代理之间的区别

一、什么是数据中心/机房IP代理&#xff1f; 数据中心/机房IP代理是使用数据中心拥有并进行分配和管理的IP的代理&#xff0c;俗称机房IP代理。 二、数据中心/机房IP代理的特点 与住宅代理通过使用ISP拥有和分配的IP地址的设备路由请求的情况不同&#xff0c;数据中心代理利…