Yao 0.10.2 正式发布 你好零代码 你好零零后
wptr33 2024-11-14 19:21 23 浏览
无代码开发平台是可以让程序设计者及一般用户不用传统程序设计语言即可以开发应用程序的开发平台,使用的是图形用户界面(GUI)以及配置。(维基百科)
在一些特定场景中, 使用图形界面开发, 确实可以有效的提升程序开发的生产力, 也有很多优秀的实践案例。
然而, 这种开发效率提升, 是以牺牲通用性、无法精确掌控逻辑、应用必须与平台深度绑定、存在数据泄露风险、甚至无法掌控业务数据为代价。
不仅如此, 应对一些常见场景, 通过 ”托拉拽“ 编程更低效。 比如:
- 一张数据表有 100 个字段, 使用托拉拽配置一个数据管理表格。
- 一个业务系统有 200 张数据表, 使用图形界面配置出管理后台。
- 在没有数据分析平台的前提下, 一个业务指标统计涉及到多张表查询和复杂的数据处理。
- ...
Yao 没有采用大力出奇迹的办法, 而是换了一个新思路, 去解决这些问题。
Yao v0.10.2 重构了界面引擎、新增 Studio CLI、DSL 编写处理器, 发布了 Yao Brain 平台 (DEMO 版)。
基于这些新特性, 开发者可以轻松根据上下文逻辑, 用程序编程序, 开发出 真无代码 产品。
Yao Admin
为了演示效果, 我们用 Yao 开发了一个通用管理后台 Yao Admin。
无需 ”托拉拽“, 连接数据库, 你就有了一个管理后台。
稍加完善后, Yao Admin 将作为一个独立的产品发布, 了解更多特性可以访问代码仓库。
代码仓库: https://github.com/YaoApp/yao-admin
开源协议: Apache-2.0
Yao 是什么?
Yao 是一款开源应用引擎, 使用 Golang 编写, 下载即用。适合开发业务系统、REST API、管理后台、自建低代码平台等。
GitHub 仓库: https://github.com/yaoapp/yao
Github Stars: 4.8K
开源协议: Apache 2.0
官方文档: https://yaoapps.com/doc
Yao vs 低代码/无代码平台
与大部分低代码平台相比, Yao 有更好的通用性、应用独立发布(可申请软著)、非一次性代码,可持续迭代升级、不限于”托拉拽“, 有多种编写方式等优势。
应用独立发布
与大部分低代码平台不同, Yao 是给开发者使用的应用开发工具和运行时。
使用 Yao 开发的应用, 代码独立发布(可申请软著), 无缝对接云原生工具链, 与使用 PHP, NodeJS 等脚本语言开发的应用无差别。
非一次性代码
不同于代码生成器, Yao DSL 开发者可阅读、可以编写, 开发者可精确掌控业务逻辑, 应用可持续迭代升级。
应用引擎全量开源, 技术团队可完全掌控全部代码。
Table DSL 示例:
{ "name": "::Bind Model", "action": { "bind": { "model": "pet", "option": { "form": "pet" } }, "search": { "process": "scripts.pet.Search", "default": [null, 1, 5] } }}
可替代脚本语言
Yao 内建 JavaScript Runtime, 可以使用脚本实现 95% 以上常见业务逻辑。
这使得 Yao 具备脚本语言的基础能力, 大部分场景下可以代替脚本语言使用。
多种编程方式
Yao 应用有多种编程方式,且这些编程方式可以随意切换。
- 支持手工编写, 开发者可以使用任意编程工具编写调试。
- 支持程序生成, 根据上下文逻辑, 自动生成 DSL 或脚本代码, 甚至可以接入 AI 让人工智能编程序。
- 支持可视化编程, 使用 Studio 通过托拉拽图形编程工具制作。
新特性
新界面
v0.10.2 重构了 XGEN 界面引擎, 同时优化界面描述 DSL, 使用 Yao 开发业务系统、管理后台等类型应用更方便。
Bind
在 Table DSL, Form DSL 中与 Model 绑定, 即可自动生成一个数据管理模块。
在表格中使用 Table DSL
Table DSL:
{ "name": "绑定模型", "action": { "bind": { "model": "pet" } }}
{ "name": "绑定模型和表单", "action": { "bind": { "model": "pet", "option": { "form": "pet" } } }}
{ "name": "复制表格", "action": { "bind": { "table": "user" } }}
在表单中使用
Form DSL:
{ "name": "绑定模型", "action": { "bind": { "model": "pet" } }}
{ "name": "绑定表格", "action": { "bind": { "table": "pet" } }}
{ "name": "复制表单", "action": { "bind": { "form": "pet" } }}
更多用法参考 Widget 手册
Cloud Props
在开发界面交互时, 经常需要为一些组件提供查询接口。比如, 某个资源所属类目的下拉列表, 在用户点击时, 需要请求一个接口, 获取类目数据。
可以使用 Cloud Props 特性, 将组件参数与处理器绑定, 应用引擎加载时, 自动生成查询接口。
Table/Form DSL:
{ "宠物": { "bind": "where.status.in", "edit": { "type": "Select", "props": { "xProps": { "$remote": { "process": "yao.component.SelectOptions", "query": { "model": "pet", "wheres": [ { "column": "created_at", "op": "ge", "value": "2020-01-02" } ] } } } } } }}
更多用法参考 Widget 手册
Compute
通常情况下,在数据读取和写入时需要对字段数值处理, 来满足呈现和存储的需要。
可以使用 Compute , 在声明字段使用的组件时, 指定处理器对数值进行处理。
为便于使用, 新增了一组 Compute处理器,用于常见的数据处理, 开发者也可以根据需要, 使用自定义处理器。
处理器 | 参数表 | 返回值 | 说明 |
Get | [<字符串参数>] | <字符串参数> | 读取数值 示例 |
Trim | [<字符串参数>] | 过滤首尾空格 示例 | |
Concat | [...<字符串参数>] | "value1value2.." | 连接字符串 示例 |
Hide | [] | "" 空字符串 | 返回空字符串 示例 |
Download | 将路径转换为下载地址 示例 | ||
Upload | 将下载地址转换为路径 示例 | ||
... |
Table/Form DSL:
{ "相关图片": { "bind": "images", "view": { "type": "Image", "compute": "Download" }, "edit": { "type": "Upload", "compute": "Upload", "props": { "filetype": "image", "$api": { "process": "fs.system.Upload" } } } }, "是否在线": { "bind": "online", "view": { "bind": "online_view", "type": "Text", "compute": { "process": "scripts.compute.MappingOnline", "args": ["$C(row.online)", "$C(props.mapping)"] }, "props": { "mapping": { "1": "::Online", "0": "::Offline" } } }, "edit": { "type": "RadioGroup", "props": { "options": [ { "label": "::Online", "value": true }, { "label": "::Offline", "value": false } ] } } }}
更多用法参考 Widget 手册
Action
在界面描述中, 可以使用 Action 定义按钮的响应行为。 界面引擎提供了多个场景的行为。
KEY 执行动作 | VALUE 参数 | 说明 |
History.push | { "payload": "<路由地址>"} | 跳转到指定路由地址 |
Service.<名称> | { "method": "<函数名>", "args": [<参数表>] } | 调用云函数 |
Studio.<名称> | { "method": "<函数名>", "args": [<参数表>] } | 调用 Studio 云函数 仅开发模式下有效 |
.... | ... | ... |
更多用法参考组件文档
yao get 命令
为了更轻松的复制项目, 可以在空目录使用 yao get 命令下载 Yao 应用。
可供下载应用列表, 未来支持第三方应用上架。
应用 | 简介 |
yaoapp/yao-admin | 一个通用管理后台 |
yaoapp/demo-app | 演示应用 |
yaoapp/demo-project | 工程项目管理演示应用 |
yaoapp/demo-finance | 财务管理演示应用 |
yaoapp/demo-plm | 生产项目管理演示应用 |
mkdir -p /data/appcd /data/appyao get yaoapp/yao-admin
云函数
在 services 目录下, 创建添加 js 脚本, 这个脚本中定义的函数都可直接通过 aciton 访问, 也可通过 API 接口调用。
脚本文件 /data/app/services/foo.js
/** * Cloud Function * * POST /api/__yao/app/service/foo * {"method":"Bar", "args":["hello", "world"]} * * @param {...any} args * @returns */function Bar(...args) { return { message: $L("Another yao application") + " (Cloud Function: foo.Bar)", args: args, };}
Form DSL 中调用
{ "layout": { "primary": "id", "operation": { "preset": { "save": { "back": true }, "back": {} }, "actions": [ { "title": "测试云函数", "icon": "icon-cloud", "action": { "Service.foo": { "method": "Bar", "args": ["{{id}}", "{{name}}"] } } } ] } }}
安装界面
废弃原 yao init 命令, 使用安装界面完成应用初始化。
mkdir -p /data/appcd /data/appyao start
根据命令行提示, 进入应用初始化配置界面完成配置。
文件系统处理器 & JS API
新增一组文件系统处理器和 JS API。
查看处理器手册
HTTP 请求处理器 & JS API
新增一组 HTTP 请求处理器和 JS API。
查看处理器手册
更多处理器
新增编码解码、加密解密、证书导入等处理器。
查看处理器手册
Studio CLI、 Service、JSAPI
在 studio 目录下, 创建添加 js 脚本, 这个脚本中定义的函数都可直接通过 aciton 访问, 也可通过 API 接口调用。
stuido 目录下的脚本具有超级权限, 可以访问 dsl, script 等文件空间, 可用于实现生成 DSL 和脚本代码。
/** * Cloud Function * * POST http://<IP>:<Studio Port>/service/hello * {"method":"World", "args":["hello", "world"]} * * @param {...any} args * @returns */function World(...args) { return { message: $L("Another yao application") + " (Studio Function: hello.World)", args: args, };}
Studio CLI
cd /data/appyao studio run hello.World hi '::{"foo":"bar"}'
Form DSL 中调用
{ "layout": { "primary": "id", "operation": { "preset": { "save": { "back": true }, "back": {} }, "actions": [ { "title": "测试 Studio", "icon": "icon-cloud", "action": { "Studio.foo": { "method": "Hello", "args": ["{{id}}", "{{name}}"] } } } ] } }}
Yao Studio
Yao 即将提供一个可视化编辑器, 通过图形界面的方式编写 DSL。
当前正在开发中, 预计 2023 年第一季度上线。
预览(屏幕截图):
Yao Brain
最好的工具, 你应该感受不到它的存在。
我们始终坚信, 在未来的程序开发中, AI 助手可以完成 90% 的工作, 开发者在 AI 的工作成果基础上微调即可。
我们也正在积极探索这个路线, 发布了 Yao Brain 平台。
尽管现在还只是基于确定规则, 但已经可以实现像 Yao-Admin 这样的通用管理后台。
未来某天, 只要告诉 Yao Brain 你的需求, 它可以帮你生成一个 CRM, 一个 ERP 或是其他符合你业务需求的程序。
相关推荐
- Python自动化脚本应用与示例(python办公自动化脚本)
-
Python是编写自动化脚本的绝佳选择,因其语法简洁、库丰富且跨平台兼容性强。以下是Python自动化脚本的常见应用场景及示例,帮助你快速上手:一、常见自动化场景文件与目录操作...
- Python文件操作常用库高级应用教程
-
本文是在前面《Python文件操作常用库使用教程》的基础上,进一步学习Python文件操作库的高级应用。一、高级文件系统监控1.1watchdog库-实时文件系统监控安装与基本使用:...
- Python办公自动化系列篇之六:文件系统与操作系统任务
-
作为高效办公自动化领域的主流编程语言,Python凭借其优雅的语法结构、完善的技术生态及成熟的第三方工具库集合,已成为企业数字化转型过程中提升运营效率的理想选择。该语言在结构化数据处理、自动化文档生成...
- 14《Python 办公自动化教程》os 模块操作文件与文件夹
-
在日常工作中,我们经常会和文件、文件夹打交道,比如将服务器上指定目录下文件进行归档,或将爬虫爬取的数据根据时间创建对应的文件夹/文件,如果这些还依靠手动来进行操作,无疑是费时费力的,这时候Pyt...
- python中os模块详解(python os.path模块)
-
os模块是Python标准库中的一个模块,它提供了与操作系统交互的方法。使用os模块可以方便地执行许多常见的系统任务,如文件和目录操作、进程管理、环境变量管理等。下面是os模块中一些常用的函数和方法:...
- 21-Python-文件操作(python文件的操作步骤)
-
在Python中,文件操作是非常重要的一部分,它允许我们读取、写入和修改文件。下面将详细讲解Python文件操作的各个方面,并给出相应的示例。1-打开文件...
- 轻松玩转Python文件操作:移动、删除
-
哈喽,大家好,我是木头左!Python文件操作基础在处理计算机文件时,经常需要执行如移动和删除等基本操作。Python提供了一些内置的库来帮助完成这些任务,其中最常用的就是os模块和shutil模块。...
- Python 初学者练习:删除文件和文件夹
-
在本教程中,你将学习如何在Python中删除文件和文件夹。使用os.remove()函数删除文件...
- 引人遐想,用 Python 获取你想要的“某个人”摄像头照片
-
仅用来学习,希望给你们有提供到学习上的作用。1.安装库需要安装python3.5以上版本,在官网下载即可。然后安装库opencv-python,安装方式为打开终端输入命令行。...
- Python如何使用临时文件和目录(python目录下文件)
-
在某些项目中,有时候会有大量的临时数据,比如各种日志,这时候我们要做数据分析,并把最后的结果储存起来,这些大量的临时数据如果常驻内存,将消耗大量内存资源,我们可以使用临时文件,存储这些临时数据。使用标...
- Linux 下海量文件删除方法效率对比,最慢的竟然是 rm
-
Linux下海量文件删除方法效率对比,本次参赛选手一共6位,分别是:rm、find、findwithdelete、rsync、Python、Perl.首先建立50万个文件$testfor...
- Python 开发工程师必会的 5 个系统命令操作库
-
当我们需要编写自动化脚本、部署工具、监控程序时,熟练操作系统命令几乎是必备技能。今天就来聊聊我在实际项目中高频使用的5个系统命令操作库,这些可都是能让你效率翻倍的"瑞士军刀"。一...
- Python常用文件操作库使用详解(python文件操作选项)
-
Python生态系统提供了丰富的文件操作库,可以处理各种复杂的文件操作需求。本教程将介绍Python中最常用的文件操作库及其实际应用。一、标准库核心模块1.1os模块-操作系统接口主要功能...
- 11. 文件与IO操作(文件io和网络io)
-
本章深入探讨Go语言文件处理与IO操作的核心技术,结合高性能实践与安全规范,提供企业级解决方案。11.1文件读写11.1.1基础操作...
- Python os模块的20个应用实例(python中 import os模块用法)
-
在Python中,...
- 一周热门
-
-
C# 13 和 .NET 9 全知道 :13 使用 ASP.NET Core 构建网站 (1)
-
因果推断Matching方式实现代码 因果推断模型
-
git pull命令使用实例 git pull--rebase
-
面试官:git pull是哪两个指令的组合?
-
git 执行pull错误如何撤销 git pull fail
-
git pull 和git fetch 命令分别有什么作用?二者有什么区别?
-
git fetch 和git pull 的异同 git中fetch和pull的区别
-
git pull 之后本地代码被覆盖 解决方案
-
还可以这样玩?Git基本原理及各种骚操作,涨知识了
-
git命令之pull git.pull
-
- 最近发表
- 标签列表
-
- git pull (33)
- git fetch (35)
- mysql insert (35)
- mysql distinct (37)
- concat_ws (36)
- java continue (36)
- jenkins官网 (37)
- mysql 子查询 (37)
- python元组 (33)
- mybatis 分页 (35)
- vba split (37)
- redis watch (34)
- python list sort (37)
- nvarchar2 (34)
- mysql not null (36)
- hmset (35)
- python telnet (35)
- python readlines() 方法 (36)
- munmap (35)
- docker network create (35)
- redis 集合 (37)
- python sftp (37)
- setpriority (34)
- c语言 switch (34)
- git commit (34)