以 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 可以进行外键关联, 表示管道,比如 e m a i l 这个字段的 表示管道,比如 email 这个字段的 表示管道,比如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 然后就能完成一些简单的需求了。更多的场景大家可以自己想象一下,我觉得这个还是比较有前景的。

相关推荐
程序员cxuan2 小时前
一招教你在 Codex 中开启 1M 上下文
人工智能·后端·程序员
hyf3266332 小时前
高收益玩法:站群泛程序结合本地服务引流变现全流程
运维·服务器·前端·搜索引擎·蜘蛛池
IT_陈寒2 小时前
Vite热更新失效?八成是这个配置在搞鬼
前端·人工智能·后端
qq_22589174662 小时前
基于Flask的空气质量监测与预测分析系统
开发语言·后端·python·信息可视化·django·flask
恋猫de小郭3 小时前
社区版 Dart macros?一个可以解决 JSON 序列化的Fluter “宏编程”第三方包
android·前端·flutter
覆东流3 小时前
4.Java运算符与表达式
java·开发语言·后端
马丁玩编程3 小时前
GitHub 3.5k Star 之后,Ragent AI 框架新版本来了
后端·面试·github
微石科技3 小时前
医疗设备维保如何从被动维修转向预防管理?宁波微石科技让运行数据提前发信号
java·后端·struts
2601_965798473 小时前
Contractor Web Setup: Deploying Bathrooms & Kitchens Theme Fast
前端·web3·php·wordpress
AINative软件工程3 小时前
LLM 应用的 Warm-Up 工程实践:冷启动延迟从 12 秒砍到 800ms 的 5 个工程手段
后端·llm·ai编程