以 Schema 驱动的下一代国产服务端框架,不需要编写逻辑就能完成接口增删改查

本篇文章同时收录在公众号《泡芙玩编程》,主打前端、Rust,同步更新中

TEO 是什么?

Teo 是下一代的开源 Web 框架,它的第一次提交记录在 22年5月,是一个特别新的框架,关键还是个国产框架。

目前它支持三种编程方式:Node.js、Python 和 Rust。它受到了 GraphQL 和 Prisma 的启发且易于阅读,只需要在一份 schema 文件中编写对应的模型即可生成对应的接口,所见即所得,所写即所想,使用了它,开发一个 Web 服务器会变得非常非常简单,到底有多简单呢? 一会我们下面再细看。

快速开始一个 Demo

我们这里就用 Rust 的 cargo 来进行安装,首先你得有 Rust 的环境,这个自己去官网装就好。然后我们使用 cargo 来安装 teo。

注意 Rust 的版本必须要高于 1.74

复制代码
cargo install teo

安装完成后查看一下版本号

scss 复制代码
cargo teo --version

# 输出
# teo Teo 0.2.12 (Rust 1.76.0) [CLI]

创建项目文件

bash 复制代码
mkdir teo-demo
# 进入文件夹
cd teo-demo
# 新建一个 schema 文件
touch schema.teo

然后在 schema.teo 编写这些代码,如果没有代码高亮,可以在 vscode 中安装 teo 插件(我写下这篇文章的时候这个插件下载量还没超过100,目前用的人还比较少)

这里就以一个用户发表文章的场景作为例子,首先编写下面这样的一段 schema 代码

json 复制代码
// 数据存放在内存 sqlite 数据库中
connector {
  provider: .sqlite,
  url: "sqlite::memory:"
}
 
// 本地 localhost 3000 端口启动
server {
  bind: ("0.0.0.0", 3000)
}
 
model User {
  @id @autoIncrement @readonly
  id: Int
  @unique @onSet($if($presents, $isEmail))
  email: String
  name: String?
  @relation(fields: .id, references: .authorId)
  posts: Post[]
}
 
model Post {
  @id @autoIncrement @readonly
  id: Int
  title: String
  content: String?
  @default(false)
  published: Bool
  @foreignKey
  authorId: Int
  @relation(fields: .authorId, references: .id)
  author: User
}

@ 代表装饰器,可以描述一些属性或者功能,比如 @unique 表示唯一值,@relation 可以进行外键关联, <math xmlns="http://www.w3.org/1998/Math/MathML"> 表示管道,比如 e m a i l 这个字段的 表示管道,比如 email 这个字段的 </math>表示管道,比如email这个字段的presents 就表示这个值必传,$isEmail 表示它必须符合邮箱格式。更多的字段和属性可以参考官网。然后我们继续往下看

接下来启动服务器

复制代码
cargo teo serve

启动成功后控制台输出下面的内容表示启动成功了,这时候我们就能直接开始编写请求了

swift 复制代码
sqlite connector connected for `main` at "sqlite::memory:"
Teo 0.2.12 (Rust 1.76.0, CLI)
listening on port 3000

使用 Postman 请求接口

我们往 localhost:3000/USER/create发送一个 POST 的 json 请求试试

请求体:

json 复制代码
{
  "create": {
    "email": "puffmeow99@gmail.com",
    "name": "puffmeow",
    "posts": {
      "create": [
        {
          "title": "关注《泡芙玩编程》",
          "content": "介绍一下 TEO"
        }
      ]
    }
  },
  "include": {
    "posts": true
  }
}

响应内容

json 复制代码
{
    "data": {
        "id": 2,
        "email": "puffmeow99@gmail.com",
        "name": "puffmeow",
        "posts": [
            {
                "id": 3,
                "title": "关注《泡芙玩编程》",
                "content": "介绍一下 TEO",
                "published": false,
                "authorId": 2
            }
        ]
    }
}

这就完成了一个接口请求??? 非常简单啊有木有,只需要写了模型就能写对应的接口请求了,这不就是我们之前提到的所写即所得吗?这么一个简单的 schema 其实就能够完成平时大部分的需求编写了。

类似的还有 createMany 接口、 findMany 接口、update 接口等。

我们再看一个 update 的例子

请求体:

json 复制代码
{
    "where": {
        "id": 2
    },
    "update": {
        "email": "puffmeow88@gmail.com",
        "name": "22222222",
        "posts": {
            "update": {
                "where": {
                    "id": 3
                },
                "update": {
                    "content": "我来介绍 TEO 的update 啦"
                }
            }
        }
    },
    "include": {
        "posts": true
    }
}

响应结果:

json 复制代码
{
    "data": {
        "id": 2,
        "email": "puffmeow88@gmail.com",
        "name": "22222222",
        "posts": [
            {
                "id": 3,
                "title": "关注《泡芙玩编程》",
                "content": "我来介绍 TEO 的update 啦",
                "published": false,
                "authorId": 2
            }
        ]
    }
}

总结

除了上面的 schema 编写接口的方式以外, TEO 还提供了编写源码的方式。目前其实官方网站的内容也不是非常的完善,大家也可以去参考一下官网,我觉得这也是一种比较新颖的服务端方式,如果能配合可视化界面来编写 schema,以后一些简单的需求直接也能够以拖拉拽的形式去完成接口的编写,这也是未来的一个想象方向。或者说以后拿一堆常用的 schema 来训练喂饱 AI, 让 AI 来直接修改 schema 然后就能完成一些简单的需求了。更多的场景大家可以自己想象一下,我觉得这个还是比较有前景的。

相关推荐
恋猫de小郭16 分钟前
Flutter Zero 是什么?它的出现有什么意义?为什么你需要了解下?
android·前端·flutter
牛奔1 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌6 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
崔庆才丨静觅7 小时前
hCaptcha 验证码图像识别 API 对接教程
前端
passerby60618 小时前
完成前端时间处理的另一块版图
前端·github·web components
KYGALYX8 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了8 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结
崔庆才丨静觅8 小时前
实用免费的 Short URL 短链接 API 对接说明
前端
崔庆才丨静觅8 小时前
5分钟快速搭建 AI 平台并用它赚钱!
前端
爬山算法8 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate