無代碼開發(fā)平臺是可以讓程序設(shè)計(jì)者及一般用戶不用傳統(tǒng)程序設(shè)計(jì)語言即可以開發(fā)應(yīng)用程序的開發(fā)平臺,使用的是圖形用戶界面(GUI)以及配置。(維基百科)
在一些特定場景中, 使用圖形界面開發(fā), 確實(shí)可以有效的提升程序開發(fā)的生產(chǎn)力, 也有很多優(yōu)秀的實(shí)踐案例。
然而, 這種開發(fā)效率提升, 是以犧牲通用性、無法精確掌控邏輯、應(yīng)用必須與平臺深度綁定、存在數(shù)據(jù)泄露風(fēng)險(xiǎn)、甚至無法掌控業(yè)務(wù)數(shù)據(jù)為代價(jià)。
不僅如此, 應(yīng)對一些常見場景, 通過 ”托拉拽“ 編程更低效。 比如:
- 一張數(shù)據(jù)表有 100 個(gè)字段, 使用托拉拽配置一個(gè)數(shù)據(jù)管理表格。
- 一個(gè)業(yè)務(wù)系統(tǒng)有 200 張數(shù)據(jù)表, 使用圖形界面配置出管理后臺。
- 在沒有數(shù)據(jù)分析平臺的前提下, 一個(gè)業(yè)務(wù)指標(biāo)統(tǒng)計(jì)涉及到多張表查詢和復(fù)雜的數(shù)據(jù)處理。
- …
Yao 沒有采用大力出奇跡的辦法, 而是換了一個(gè)新思路, 去解決這些問題。
Yao v0.10.2 重構(gòu)了界面引擎、新增 Studio CLI、DSL 編寫處理器, 發(fā)布了 Yao BrAIn 平臺 (DEMO 版)。
基于這些新特性, 開發(fā)者可以輕松根據(jù)上下文邏輯, 用程序編程序, 開發(fā)出 真無代碼 產(chǎn)品。
Yao Admin
為了演示效果, 我們用 Yao 開發(fā)了一個(gè)通用管理后臺 Yao Admin。
無需 ”托拉拽“, 連接數(shù)據(jù)庫, 你就有了一個(gè)管理后臺。
稍加完善后, Yao Admin 將作為一個(gè)獨(dú)立的產(chǎn)品發(fā)布, 了解更多特性可以訪問代碼倉庫。
代碼倉庫: https://Github.com/YaoApp/yao-admin
開源協(xié)議: Apache-2.0
Yao 是什么?
Yao 是一款開源應(yīng)用引擎, 使用 Golang 編寫, 下載即用。適合開發(fā)業(yè)務(wù)系統(tǒng)、REST API、管理后臺、自建低代碼平臺等。
GitHub 倉庫: https://github.com/yaoapp/yao
Github Stars: 4.8K
開源協(xié)議: Apache 2.0
官方文檔: https://yaoapps.com/doc
Yao vs 低代碼/無代碼平臺
與大部分低代碼平臺相比, Yao 有更好的通用性、應(yīng)用獨(dú)立發(fā)布(可申請軟著)、非一次性代碼,可持續(xù)迭代升級、不限于”托拉拽“, 有多種編寫方式等優(yōu)勢。
應(yīng)用獨(dú)立發(fā)布
與大部分低代碼平臺不同, Yao 是給開發(fā)者使用的應(yīng)用開發(fā)工具和運(yùn)行時(shí)。
使用 Yao 開發(fā)的應(yīng)用, 代碼獨(dú)立發(fā)布(可申請軟著), 無縫對接云原生工具鏈, 與使用 PHP, NodeJS 等腳本語言開發(fā)的應(yīng)用無差別。
非一次性代碼
不同于代碼生成器, Yao DSL 開發(fā)者可閱讀、可以編寫, 開發(fā)者可精確掌控業(yè)務(wù)邏輯, 應(yīng)用可持續(xù)迭代升級。
應(yīng)用引擎全量開源, 技術(shù)團(tuán)隊(duì)可完全掌控全部代碼。
Table DSL 示例:
{ "name": "::Bind Model", "action": { "bind": { "model": "pet", "option": { "form": "pet" } }, "search": { "process": "scripts.pet.Search", "default": [null, 1, 5] } }}
可替代腳本語言
Yao 內(nèi)建 JavaScript Runtime, 可以使用腳本實(shí)現(xiàn) 95% 以上常見業(yè)務(wù)邏輯。
這使得 Yao 具備腳本語言的基礎(chǔ)能力, 大部分場景下可以代替腳本語言使用。
多種編程方式
Yao 應(yīng)用有多種編程方式,且這些編程方式可以隨意切換。
- 支持手工編寫, 開發(fā)者可以使用任意編程工具編寫調(diào)試。
- 支持程序生成, 根據(jù)上下文邏輯, 自動生成 DSL 或腳本代碼, 甚至可以接入 AI 讓人工智能編程序。
- 支持可視化編程, 使用 Studio 通過托拉拽圖形編程工具制作。
新特性
新界面
v0.10.2 重構(gòu)了 XGEN 界面引擎, 同時(shí)優(yōu)化界面描述 DSL, 使用 Yao 開發(fā)業(yè)務(wù)系統(tǒng)、管理后臺等類型應(yīng)用更方便。
Bind
在 Table DSL, Form DSL 中與 Model 綁定, 即可自動生成一個(gè)數(shù)據(jù)管理模塊。
在表格中使用 Table DSL
Table DSL:
{ "name": "綁定模型", "action": { "bind": { "model": "pet" } }}
{ "name": "綁定模型和表單", "action": { "bind": { "model": "pet", "option": { "form": "pet" } } }}
{ "name": "復(fù)制表格", "action": { "bind": { "table": "user" } }}
在表單中使用
Form DSL:
{ "name": "綁定模型", "action": { "bind": { "model": "pet" } }}
{ "name": "綁定表格", "action": { "bind": { "table": "pet" } }}
{ "name": "復(fù)制表單", "action": { "bind": { "form": "pet" } }}
更多用法參考 Widget 手冊
Cloud Props
在開發(fā)界面交互時(shí), 經(jīng)常需要為一些組件提供查詢接口。比如, 某個(gè)資源所屬類目的下拉列表, 在用戶點(diǎn)擊時(shí), 需要請求一個(gè)接口, 獲取類目數(shù)據(jù)。
可以使用 Cloud Props 特性, 將組件參數(shù)與處理器綁定, 應(yīng)用引擎加載時(shí), 自動生成查詢接口。
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
通常情況下,在數(shù)據(jù)讀取和寫入時(shí)需要對字段數(shù)值處理, 來滿足呈現(xiàn)和存儲的需要。
可以使用 Compute , 在聲明字段使用的組件時(shí), 指定處理器對數(shù)值進(jìn)行處理。
為便于使用, 新增了一組 Compute處理器,用于常見的數(shù)據(jù)處理, 開發(fā)者也可以根據(jù)需要, 使用自定義處理器。
處理器 | 參數(shù)表 | 返回值 | 說明 |
Get | [<字符串參數(shù)>] | <字符串參數(shù)> | 讀取數(shù)值 示例 |
Trim | [<字符串參數(shù)>] | 過濾首尾空格 示例 | |
Concat | […<字符串參數(shù)>] | "value1value2.." | 連接字符串 示例 |
Hide | [] | "" 空字符串 | 返回空字符串 示例 |
Download | 將路徑轉(zhuǎn)換為下載地址 示例 | ||
Upload | 將下載地址轉(zhuǎn)換為路徑 示例 | ||
… |
Table/Form DSL:
{ "相關(guān)圖片": { "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 定義按鈕的響應(yīng)行為。 界面引擎提供了多個(gè)場景的行為。
KEY 執(zhí)行動作 | VALUE 參數(shù) | 說明 |
History.push | { "payload": "<路由地址>"} | 跳轉(zhuǎn)到指定路由地址 |
Service.<名稱> | { "method": "<函數(shù)名>", "args": [<參數(shù)表>] } | 調(diào)用云函數(shù) |
Studio.<名稱> | { "method": "<函數(shù)名>", "args": [<參數(shù)表>] } | 調(diào)用 Studio 云函數(shù) 僅開發(fā)模式下有效 |
…. | … | … |
更多用法參考組件文檔
yao get 命令
為了更輕松的復(fù)制項(xiàng)目, 可以在空目錄使用 yao get 命令下載 Yao 應(yīng)用。
可供下載應(yīng)用列表, 未來支持第三方應(yīng)用上架。
應(yīng)用 | 簡介 |
yaoapp/yao-admin | 一個(gè)通用管理后臺 |
yaoapp/demo-app | 演示應(yīng)用 |
yaoapp/demo-project | 工程項(xiàng)目管理演示應(yīng)用 |
yaoapp/demo-finance | 財(cái)務(wù)管理演示應(yīng)用 |
yaoapp/demo-plm | 生產(chǎn)項(xiàng)目管理演示應(yīng)用 |
mkdir -p /data/appcd /data/appyao get yaoapp/yao-admin
云函數(shù)
在 services 目錄下, 創(chuàng)建添加 js 腳本, 這個(gè)腳本中定義的函數(shù)都可直接通過 aciton 訪問, 也可通過 API 接口調(diào)用。
腳本文件 /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 中調(diào)用
{ "layout": { "primary": "id", "operation": { "preset": { "save": { "back": true }, "back": {} }, "actions": [ { "title": "測試云函數(shù)", "icon": "icon-cloud", "action": { "Service.foo": { "method": "Bar", "args": ["{{id}}", "{{name}}"] } } } ] } }}
安裝界面
廢棄原 yao init 命令, 使用安裝界面完成應(yīng)用初始化。
mkdir -p /data/appcd /data/appyao start
根據(jù)命令行提示, 進(jìn)入應(yīng)用初始化配置界面完成配置。
文件系統(tǒng)處理器 & JS API
新增一組文件系統(tǒng)處理器和 JS API。
查看處理器手冊
HTTP 請求處理器 & JS API
新增一組 HTTP 請求處理器和 JS API。
查看處理器手冊
更多處理器
新增編碼解碼、加密解密、證書導(dǎo)入等處理器。
查看處理器手冊
Studio CLI、 Service、JSAPI
在 studio 目錄下, 創(chuàng)建添加 js 腳本, 這個(gè)腳本中定義的函數(shù)都可直接通過 aciton 訪問, 也可通過 API 接口調(diào)用。
stuido 目錄下的腳本具有超級權(quán)限, 可以訪問 dsl, script 等文件空間, 可用于實(shí)現(xiàn)生成 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 中調(diào)用
{ "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 即將提供一個(gè)可視化編輯器, 通過圖形界面的方式編寫 DSL。
當(dāng)前正在開發(fā)中, 預(yù)計(jì) 2023 年第一季度上線。
預(yù)覽(屏幕截圖):
Yao Brain
最好的工具, 你應(yīng)該感受不到它的存在。
我們始終堅(jiān)信, 在未來的程序開發(fā)中, AI 助手可以完成 90% 的工作, 開發(fā)者在 AI 的工作成果基礎(chǔ)上微調(diào)即可。
我們也正在積極探索這個(gè)路線, 發(fā)布了 Yao Brain 平臺。
盡管現(xiàn)在還只是基于確定規(guī)則, 但已經(jīng)可以實(shí)現(xiàn)像 Yao-Admin 這樣的通用管理后臺。
未來某天, 只要告訴 Yao Brain 你的需求, 它可以幫你生成一個(gè) CRM, 一個(gè) ERP 或是其他符合你業(yè)務(wù)需求的程序。
版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn),該文觀點(diǎn)僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。