aeria-org/aeria
GitHub: aeria-org/aeria
Aeria 是一个基于 TypeScript 的 Web 框架,通过自定义 DSL 和轻量级 MongoDB 抽象层,以类型安全的方式简化 CRUD 应用的开发。
Stars: 478 | Forks: 5

[](https://npmjs.com/package/aeria) 
[文档](https://aeria-org.github.io/docs/aeria/) |
[如何贡献](.github/CONTRIBUTING.md)
Aeria 是一个旨在通过类型安全、对开发者友好的体验来简化基于 CRUD 应用程序的框架。它包含一个轻量级的 **MongoDB** 抽象层和一个用于模型定义的 DSL,支持嵌套对象、数组、引用、上传字段等,使其成为具有复杂数据结构和关系逻辑的应用程序的理想选择。此外,还提供了一个带有极简绑定的 HTTP 路由 API,用于构建业务逻辑。
创建该项目是为了提供一种比 Express/Mongoose 等替代方案更具凝聚力且更直接的方法,以使用 MongoDB 创建以数据为中心的应用程序。
### 快速入门
### 功能特性
- 身份验证
- 文件管理
- 安全性(速率限制、实体所有权、RBAC 等)
- 类似 tRPC 的 1:1 类型化 SDK
- 即用型、可通过 [Vue](https://github.com/vuejs/core) 扩展的仪表板
### 演示

### 常见问题
#### Aeria 是一种编程语言吗?
人们在接触类似 Aeria 的事物时常有的一个疑问是:“我是不是要学习一整套新语言才能使用这个东西?”。
Aeria 的学习曲线非常平缓,因为它不是一个完全成熟的编程语言。它只有两个主要概念:**集合**(collections)和**契约**(contracts)。半小时甚至更短的时间内就可以掌握它的全部。
你可能很容易就能猜出下面这段代码的作用:
```
collection Person {
icon "person"
properties {
name str
job enum @values([
"programmer",
"doctor",
"policeman",
])
age int @minimum(1) @maximum(120)
profile_picture File @accept(["image/*"])
}
functions {
get
getAll
insert
remove
upload
}
}
```
或者这一段:
```
contract GetPersonBySlug {
payload {
properties {
slug str
}
}
response
| Error {
properties {
httpStatus int
code str
}
}
| Result Person
}
```
#### 为什么我应该考虑使用它?
当你需要快速构建 MVP 原型,随后再将其扩展为更健壮的项目时,Aeria 会带来很多好处。最明显的是,得益于该框架提供的 DSL 和内置功能,与传统方法相比,实现某个功能所需的代码量(以及因此耗费的时间)被大幅减少。
除此之外,它还提供了一个即用型可扩展的仪表板和 1:1 类型化的 SDK。在[处理引用时,它也比 Mongoose 和 Prisma 快得多](https://github.com/aeria-org/benchmark)。
总结一下:如果你选择 MongoDB 作为数据库,并且希望快速构建一个项目,同时注重类型安全,Aeria 就是你的正确选择。
### 社区
联系我们以了解更多关于 Aeria 的信息并了解即将推出的功能。
[](https://aeria.is-a.dev/discord)
标签:Android, API开发, CRUD, DSL, HTTP路由, MITM代理, MongoDB, Mongoose替代, NPM包, OSV-Scalibr, RBAC, SOC Prime, tRPC, TypeScript, Vue, Web开发框架, 后端框架, 安全插件, 开发工具, 数据结构, 文件管理, 文件系统扫描, 类型安全, 自动化攻击, 领域特定语言