无代码开发平台是可以让程序设计者及一般用户不用传统程序设计语言即可以开发应用程序的开发平台,使用的是图形用户界面(GUI)以及配置。(维基百科) 在一些特定场景中,使用图形界面开发,确实可以有效的提升程序开发的生产力,也有很多优秀的实践案例。 然而,这种开发效率提升,是以牺牲通用性、无法精确掌控逻辑、应用必须与平台深度绑定、存在数据泄露风险、甚至无法掌控业务数据为代价。 不仅如此,应对一些常见场景,通过托拉拽编程更低效。比如:一张数据表有100个字段,使用托拉拽配置一个数据管理表格。一个业务系统有200张数据表,使用图形界面配置出管理后台。在没有数据分析平台的前提下,一个业务指标统计涉及到多张表查询和复杂的数据处理。。。。 Yao没有采用大力出奇迹的办法,而是换了一个新思路,去解决这些问题。 Yaov0。10。2重构了界面引擎、新增StudioCLI、DSL编写处理器,发布了YaoBrain平台(DEMO版)。 基于这些新特性,开发者可以轻松根据上下文逻辑,用程序编程序,开发出真无代码产品。 YaoAdmin 为了演示效果,我们用Yao开发了一个通用管理后台YaoAdmin。 无需托拉拽,连接数据库,你就有了一个管理后台。 稍加完善后,YaoAdmin将作为一个独立的产品发布,了解更多特性可以访问代码仓库。 代码仓库:https:github。comYaoAppyaoadmin 开源协议:Apache2。0Yao是什么? Yao是一款开源应用引擎,使用Golang编写,下载即用。适合开发业务系统、RESTAPI、管理后台、自建低代码平台等。 GitHub仓库:https:github。comyaoappyao GithubStars:4。8K 开源协议:Apache2。0 官方文档:https:yaoapps。comdocYaovs低代码无代码平台 与大部分低代码平台相比,Yao有更好的通用性、应用独立发布(可申请软著)、非一次性代码,可持续迭代升级、不限于托拉拽,有多种编写方式等优势。应用独立发布 与大部分低代码平台不同,Yao是给开发者使用的应用开发工具和运行时。 使用Yao开发的应用,代码独立发布(可申请软著),无缝对接云原生工具链,与使用PHP,NodeJS等脚本语言开发的应用无差别。非一次性代码 不同于代码生成器,YaoDSL开发者可阅读、可以编写,开发者可精确掌控业务逻辑,应用可持续迭代升级。 应用引擎全量开源,技术团队可完全掌控全部代码。 TableDSL示例:{name:::BindModel,action:{bind:{model:pet,option:{form:pet}},search:{process:scripts。pet。Search,default:〔null,1,5〕}}}可替代脚本语言 Yao内建JavaScriptRuntime,可以使用脚本实现95以上常见业务逻辑。 这使得Yao具备脚本语言的基础能力,大部分场景下可以代替脚本语言使用。多种编程方式 Yao应用有多种编程方式,且这些编程方式可以随意切换。支持手工编写,开发者可以使用任意编程工具编写调试。支持程序生成,根据上下文逻辑,自动生成DSL或脚本代码,甚至可以接入AI让人工智能编程序。支持可视化编程,使用Studio通过托拉拽图形编程工具制作。新特性新界面 v0。10。2重构了XGEN界面引擎,同时优化界面描述DSL,使用Yao开发业务系统、管理后台等类型应用更方便。Bind 在TableDSL,FormDSL中与Model绑定,即可自动生成一个数据管理模块。 在表格中使用TableDSL TableDSL:{name:绑定模型,action:{bind:{model:pet}}}{name:绑定模型和表单,action:{bind:{model:pet,option:{form:pet}}}}{name:复制表格,action:{bind:{table:user}}} 在表单中使用 FormDSL:{name:绑定模型,action:{bind:{model:pet}}}{name:绑定表格,action:{bind:{table:pet}}}{name:复制表单,action:{bind:{form:pet}}} 更多用法参考Widget手册CloudProps 在开发界面交互时,经常需要为一些组件提供查询接口。比如,某个资源所属类目的下拉列表,在用户点击时,需要请求一个接口,获取类目数据。 可以使用CloudProps特性,将组件参数与处理器绑定,应用引擎加载时,自动生成查询接口。 TableFormDSL:{宠物:{bind:where。status。in,edit:{type:Select,props:{xProps:{remote:{process:yao。component。SelectOptions,query:{model:pet,wheres:〔{column:createdat,op:ge,value:20200102}〕}}}}}}} 更多用法参考Widget手册Compute 通常情况下,在数据读取和写入时需要对字段数值处理,来满足呈现和存储的需要。 可以使用Compute,在声明字段使用的组件时,指定处理器对数值进行处理。 为便于使用,新增了一组Compute处理器,用于常见的数据处理,开发者也可以根据需要,使用自定义处理器。 处理器 参数表 返回值 说明 Get 〔字符串参数〕 字符串参数 读取数值示例 Trim 〔字符串参数〕 过滤首尾空格示例 Concat 〔。。。字符串参数〕 value1value2。。 连接字符串示例 Hide 〔〕 空字符串 返回空字符串示例 Download 将路径转换为下载地址示例 Upload 将下载地址转换为路径示例 。。。 TableFormDSL:{相关图片:{bind:images,view:{type:Image,compute:Download},edit:{type:Upload,compute:Upload,props:{filetype:image,api:{process:fs。system。Upload}}}},是否在线:{bind:online,view:{bind:onlineview,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云函数仅开发模式下有效 。。。。 。。。 。。。 更多用法参考组件文档yaoget命令 为了更轻松的复制项目,可以在空目录使用yaoget命令下载Yao应用。 可供下载应用列表,未来支持第三方应用上架。 应用 简介 yaoappyaoadmin 一个通用管理后台 yaoappdemoapp 演示应用 yaoappdemoproject 工程项目管理演示应用 yaoappdemofinance 财务管理演示应用 yaoappdemoplm 生产项目管理演示应用mkdirpdataappcddataappyaogetyaoappyaoadmin云函数 在services目录下,创建添加js脚本,这个脚本中定义的函数都可直接通过aciton访问,也可通过API接口调用。 脚本文件dataappservicesfoo。jsCloudFunctionPOSTapiyaoappservicefoo{method:Bar,args:〔hello,world〕}param{。。。any}argsreturnsfunctionBar(。。。args){return{message:L(Anotheryaoapplication)(CloudFunction:foo。Bar),args:args,};} FormDSL中调用{layout:{primary:id,operation:{preset:{save:{back:true},back:{}},actions:〔{title:测试云函数,icon:iconcloud,action:{Service。foo:{method:Bar,args:〔{{id}},{{name}}〕}}}〕}}}安装界面 废弃原yaoinit命令,使用安装界面完成应用初始化。mkdirpdataappcddataappyaostart 根据命令行提示,进入应用初始化配置界面完成配置。 文件系统处理器JSAPI 新增一组文件系统处理器和JSAPI。 查看处理器手册HTTP请求处理器JSAPI 新增一组HTTP请求处理器和JSAPI。 查看处理器手册更多处理器 新增编码解码、加密解密、证书导入等处理器。 查看处理器手册StudioCLI、Service、JSAPI 在studio目录下,创建添加js脚本,这个脚本中定义的函数都可直接通过aciton访问,也可通过API接口调用。 stuido目录下的脚本具有超级权限,可以访问dsl,script等文件空间,可用于实现生成DSL和脚本代码。CloudFunctionPOSThttp:IP:StudioPortservicehello{method:World,args:〔hello,world〕}param{。。。any}argsreturnsfunctionWorld(。。。args){return{message:L(Anotheryaoapplication)(StudioFunction:hello。World),args:args,};} StudioCLIcddataappyaostudiorunhello。Worldhi::{foo:bar} FormDSL中调用{layout:{primary:id,operation:{preset:{save:{back:true},back:{}},actions:〔{title:测试Studio,icon:iconcloud,action:{Studio。foo:{method:Hello,args:〔{{id}},{{name}}〕}}}〕}}}YaoStudio Yao即将提供一个可视化编辑器,通过图形界面的方式编写DSL。 当前正在开发中,预计2023年第一季度上线。 预览(屏幕截图): YaoBrain 最好的工具,你应该感受不到它的存在。 我们始终坚信,在未来的程序开发中,AI助手可以完成90的工作,开发者在AI的工作成果基础上微调即可。 我们也正在积极探索这个路线,发布了YaoBrain平台。 尽管现在还只是基于确定规则,但已经可以实现像YaoAdmin这样的通用管理后台。 未来某天,只要告诉YaoBrain你的需求,它可以帮你生成一个CRM,一个ERP或是其他符合你业务需求的程序。