aah
一个安全、灵活、快速的 Go Web 框架。
访问 aah 的官方网站 https://aahframework.org,了解更多信息。
简介
aah 旨在为构建现代 Web、API 和 WebSocket 应用程序提供必要的组件。aah 框架是安全、快速和可扩展的。它充分考虑到了基础设施、模板代码、重复性活动、可重用组件等。
aah 是一个具有微框架性质的特性丰富的框架。
看看 aah 的 特性,了解使用 aah 的好处,它的文档 非常好。
- 真正地易于使用和配置驱动。
- 安全意识框架,安全会话,CSRF 预防,XSS 预防,认证,授权等。
- 构建强大的终端用户产品并交付使用。
- 可在模块层面进行扩展。如果没有,那就立即提出问题。
- 高度可维护,缩短交付时间,随着应用程序的增长而熠熠生辉。
- 稳步成熟的框架和功能集正在不断增强。
aah 的初始稳定版本 0.5.0 于2017年5月19日发布。
aah 特性
赋予工程和开发能力。
服务器及其扩展
aah 通过服务器提供强大的 OOTB 功能。
- HTTP, HTTPS (Certs & Let's Encrypt), HTTP/2, UNIX Socket
- 服务器扩展 - OnInit, OnStart, OnShutdown 等
- 优雅关机,自动 Gzip 压缩
- 访问日志,转储请求和响应
路由
原生多租户(域和子域)。
- 灵活,命名空间/组和反向路由
- 很好地整合了静态文件的流程和错误处理
- 对 RESTful APIs 的丰富支持(版本策略、路径参数、自动绑定等)
控制台命令
- 轻松地将 N 个用户定义的行为作为控制台命令添加到 aah 应用程序二进制中。例如:如命令迁移、安装、卸载等。
- 能够为应用程序的功能添加 CLI 访问。
配置
aah 配置的语法与 HOCON 的语法非常相似。
- 组织你的配置文件并使用 include reference
- 在非设备配置文件上通过 SIGHUP 重新加载应用程序的配置
多环境配置
aah 支持配置文件的概念,这有助于在不同环境下轻松组织配置。
- 默认情况下,定义了 dev 和 prod 配置文件
- 定义需要的配置文件并进行组织。例如:QA、Stage1 等。
参数自动解析和绑定
aah 提供了一个非常灵活的方式来自动解析和绑定请求值到合适的 Go 数据类型。
- 绑定路径、表单、查询到控制器动作参数或结构字段中
- 将 JSON 或 XML 请求体绑定到结构中
- 支持按类型绑定(非)指针目标和自定义值解析器
强大的响应功能
天然的 RESTful 或渲染的视图引擎的选择。
- 视图引擎——增强型 Go,Pug(Jade),[即将推出...] 。
- 强大的响应生成器——轻松编写响应
- 响应 HTML、JSON、JSONP、XML、文件、字节等。
- 天然的 HTML 最小化
支持 SPA 和移动应用
aah 支持独立的前端架构的趋势。
- 原生 RESTful,默认为无状态
- 在内容类型和接受上进行内容协商
- 内置 CORS 支持
- 强大的安全实现
实时应用程序支持
aah 支持实时应用架构。
- WebSocket —— 双向的
- 服务器发送的事件(SSE)—— 单向的[即将到来]
事件处理和调度
aah 提供简单高效的事件发布器,具有异步和同步功能。
- aah 服务器扩展点是围绕事件发布器建立的
- 支持一次发布功能
i18n 国际化
aah 提供 i18n 支持,又称消息。语言 ID 是 ISO 639-1,区域 ID 是 ISO 3166-1。
- 只需配置,应用程序就被国际化/本地化了。
- 在应用程序的任何地方访问消息
- 在 i18n 目录下按你想要的方式组织消息文件
日志
aah 提供简单而强大的日志功能,包括字段、子日志。
- 支持 OOTB 控制台和文件接收器
- 人类(文本)和机器(JSON)可读的日志格式
- 支持 Hook 和 drop-in 替换软件包的日志
错误处理
aah 提供结构良好的错误处理,具有灵活和分层的传播流程。
- 控制器级别的错误处理
- 应用层面的集中错误处理
- 框架的默认错误处理
静态文件传输
易于使用的静态文件传输。
- 送达目录和它的子目录
- 单个文件和目录列表功能
- 按每个 MIME 类型的头缓存控制
- 通过文件名进行简单的缓存破坏
Docker 和 systemd
aah CLI 提供了生成配置文件的命令,用于开发和生产。
- 对于 docker - Dockerfile.dev 和 Dockerfile.prod(多阶段构建,最小化尺寸)
- 对于 systemd - <app-name>.service 文件
(特性原文链接:https://aahframework.org/features.html)