如果您已经有经典编程或其他无代码/低代码平台的经验,那么很多概念都会很熟悉。
与其他无代码和低代码解决方案不同,AppMaster采用经典的方法来构建应用程序。AppMaster的基本项目是一个项目,而不是其他平台上的应用程序。项目可以由多个后台、Web和移动应用程序组成。解决方案的架构是客户服务器(而不是像Bubble或类似平台那样的单体)。
当从其他无代码平台转移到AppMaster时,请记住,在AppMaster中,您可以使用不同的平台工具分别创建后台、web和移动应用程序。对于这些用户来说,最令人沮丧的时刻之一就是要记住你需要创建单独的应用程序,并在应用程序中构建逻辑。
如何开始?
对于大多数项目,您需要创建后台和Web,或后台和移动,甚至所有类型的应用程序。
重要的是确保在后台应用程序中实现大部分逻辑。切勿将重要的逻辑放在您无法控制的Web或移动应用程序中。前端仅用于数据可视化和从用户输入中收集信息。
最直接的方法是从创建后台应用程序开始。
后台应用程序
后端步骤1.在后台数据模型设计器中定义您的数据模型。您可以把每个模型看作SQL数据库中的一个表(有关系)。在AppMaster中,数据模型不仅用于定义主数据库表,还可以作为跨项目的结构声明。例如,如果您的逻辑使用了数据模型 "User",您可以确定该类型的任何结构都将具有相同的字段集。
右键单击数据模型设计器的画布以创建新模型,并从一个模型边框拖动到另一个模型边框以创建关 系。单击关系或模型字段进行编辑。
请注意字段属性,如Unique、Not NULL或Index:如果您在现有数据库中应用NOT NULL或Unique策略,并使用空值或重复值,数据库模式迁移将最终失败。
后端第2步。为您的应用程序创建业务流程。业务流程(BP)在AppMaster Platform中只是经典编程中函数的一个独特术语。
每个后台BP都有2个必填块:开始和结束。如果您需要向您的BP传递数据,您需要在Start块中定义变量(它将像经典编程中的函数参数一样工作),并将它们连接到BP内部的块。
要从BP返回数据,您可以在End块中添加变量(就像经典编程中函数的return一样)。
BP块之间有两种类型的连接:
- 蓝色实线箭头称为流连接,定义了块的执行顺序(下一个块应该执行哪个块)
- 多种颜色的细线称为变量连接,定义数据绑定(从哪里获取数据--BP块之间的数据连接)。每种颜色代表不同的数据类型
通常,BP块中用于流或变量连接的地方称为连接器。BP块左侧的所有连接器都是In连接器(接收Flow或数据),右侧的是Out连接器(向前传递Flow或数据)。
要创建连接,您需要从一个连接器拖动到另一个连接器(在需要连接的块之间拖动)。
无论您从哪一边开始拖动,都会形成连接。
BP编辑器会自动检查变量连接的数据类型,如果数据类型不一致,将不会让您连接,同时也会防止任何循环或不良连接。
您可以从一个BP调用另一个BP--只需从左侧面板拖放相应的块即可。我们经常使用这种方法来减少逻辑复杂性,并在项目中多次重复使用相同的逻辑。
在后台应用程序中有2种类型的变量,您可以将其放置到BP中以临时存储数据:
- 局部变量--在当前BP的生命周期内存储数据(最高效,仅在内存中)。
- 全局变量--在后端应用程序的生命周期内存储您的数据(也仅在内存中,一旦应用程序重启将重置)。
在通过从BP编辑器左侧面板拖动全局变量来使用它之前,您需要使用后端逻辑的一部分来创建一个全局变量。
如果您的BP需要通过API从外部调用(从您的网页、手机、使用postman/curl、从外部系统),您需要将BP附加到端点。
后台步骤3.创建端点。在AppMaster中,我们使用相同的经典REST API方法来创建端点。虽然AppMaster不仅支持REST API端点,还支持WebHooks和WSS端点,但我们将专注于第一种类型。
创建端点时,请在方法(GET, POST, PUT, PATCH, DELETE)、有效载荷(使用JSON)和URL(没有非ASCII字符,没有空格,以斜线开始和结束)方面遵守REST API标准。
创建端点的过程非常简单直接:选择BP、定义URL和REST方法,如果需要对端点进行授权--检查中间件设置。
一旦数据模型、业务流程和端点准备就绪,就可以发布了--点击发布按钮!通常,在30秒内,AppMaster平台就会获取您所有的蓝图(是的,实际上,您所做的一切都是为未来的软件创建蓝图),生成源代码,编译,打包成docker镜像并部署到AppMaster云。当发布过程完成后,您可以打开REST API文档(OpenAPI/Swagger),并使用Swagger内置请求或第三方工具(如Postman或Insomnia)测试您的端点。
重要。如果您使用 "学习与探索 "订阅,我们的 "资源节约守护进程 "将在您在Studio中不活动30分钟后停止您的应用程序容器。要重新运行,请点击部署计划切换或再次发布。
网络应用
当后端规划和创建完成后,就该转向前端了。我们将从Web应用程序开始。
Web应用程序 步骤1.如果项目中没有Web应用程序,请创建一个。到目前为止,我们有2种类型的Web应用设计器:当前的和新的(测试版)。主要区别在于自定义的数量。当前版本的WebApp设计器的用户界面定制功能非常有限,但可以简单轻松地构建标准的管理面板和客户门户的用户界面。新版本(目前处于测试阶段)可以完全定制用户界面的外观和填充--采用SPA(Vue、React方式)布局的flexbox方式。两个设计器都内置了业务流程,包括触发器和大量有用的块。
WebApp步骤2.从顶部面板(当前设计器)或左侧面板(新设计器)拖放用户界面元素,开始设计Web应用程序的用户界面。对于一些内部有枚举的元素(如表格和列表),您需要在初始拖放阶段选择数据模型以自动调整元素。
在Web应用程序中有2种类型的业务流程:触发器和标准。触发器可用于每个 UI 元素和应用程序范围(应用程序触发器)。要访问 UI 元素的触发器,请选择该元素,然后在 BP 选项卡中创建一个触发器。与标准BP不同,触发器有多个开始块:每个事件一个块,没有结束块。由于触发器从不返回任何值,因此不需要结束块。您仍然可以在Web应用程序中创建标准的业务流程,但是执行它们的唯一方法是从触发器中调用它们。这是将常用逻辑移至标准Web BP并通过触发器调用的好方法。
重要。请记住,后端BP将在后端应用程序中运行,Web应用程序BP将在用户的浏览器中运行,尽量减少Web工作量将有利于用户体验。
有几个非常重要的应用级触发器。例如,当浏览器中的应用程序刚刚启动时,App onLaunch会触发。这是检查用户是否通过身份验证的最佳位置,如果没有,则重定向到正确的页面(如果需要身份验证的话)。
不要忘记保存您的Web应用程序模式并发布您的项目以查看更改。
移动应用程序
当您需要创建移动应用程序时,流程与web应用程序相同:创建屏幕、放置UI元素、创建UI元素触发器、调整App onLaunch触发器,然后您就可以开始了。AppMaster移动应用程序没有网页预览,但是您可以安装AppMaster Developer移动应用程序的Android和IOS版来实时预览您的应用程序,包括所有与硬件相关的功能,如BLE,NFC等。
当您完成移动应用程序的开发并准备发布时,AppMaster有一个特殊的发布向导,可以从项目中所有移动应用程序列表的上下文菜单中找到。对于Android系统,AppMaster将生成APK和AAB文件,这些文件可以在AppMaster中发布。
概述
AppMaster是一个大型的集成开发环境,您可以通过数据模型设计器、业务流程编辑器、Web和移动设计器中的高级蓝图来规划您的应用程序。
常见问题
为什么我们需要每个项目有多个应用程序?
AppMaster使用的是客户端-服务器架构,而不是单体架构。在许多情况下,当您需要分离功能时,您可能需要在每个项目中使用多个应用程序:
- 复杂的项目:比如出租车,当一个应用程序为乘客服务,一个为司机服务时,需要使用同一个后台。
- 创建多个后端应用程序,以平衡工作量,使变更更容易,风险更小
虽然您已经可以为每个项目创建多个网络和移动应用程序,但我们仍在努力为每个项目引入多个后台应用程序。
生成应用程序的优点和缺点是什么?
最明显和最显著的优点是性能明显提高,可扩展性强,能够获得在内部运行的二进制文件,源代码能够通过认证和审计。我们使用最新版本的Go编程语言生成后端应用程序。Go语言使编译后的应用程序性能更强,可在多种操作系统和CPU架构下交叉编译,并通过保持灵活性实现整体简洁性。
最常见的缺点是,当您对蓝图进行修改时,每次都需要重新生成和构建应用程序,中等规模的项目通常平均需要35-45秒。此外,由于我们需要在云中运行应用程序,因此会产生一些额外的复杂性和成本:我们在docker容器中运行的每个应用程序都会消耗CPU和RAM(即使空闲),并且需要进行数据库模式迁移(我们会自动完成)。
但总的来说,代码生成的应用程序和传统编程的应用程序一样好用。
网络应用程序使用什么技术?
我们使用Vue3框架和TypeScript (TS)生成Web应用程序。网络应用程序以SPA和SSG模式相结合的方式运行。服务器端渲染(SSR)将在稍后添加,仅适用于新的Web应用程序设计者。
移动应用程序使用什么技术?
我们的移动应用程序使用声明性后台驱动方法构建:我们使用完全原生(最原生)的代码库,IOS使用Swift和SwiftUI,Android使用Kotlin和Jetpack Compose。从技术上讲,移动应用程序使用JSON和Protobuf通过网络按需加载配置和屏幕,以获得最高性能。这种方法有很多好处:您可以实时更改应用程序,无需向AppStore或Play Market发布更新版本的应用程序,可以完全离线工作,并且可以访问所有硬件功能。我们的移动应用程序不使用HTML/JS/ReactNative或PWA技术。在AppMaster中创建的移动应用程序需要通过AppStore、Play Market或任何其他分发平台进行分发(从技术上讲,您可以共享Android的apk/aab文件,但这是一个很大的努力)。
你们默认将应用程序托管在哪里?
我们在AWS基础架构之上构建了AppMaster云,为我们的客户提供最可靠和可扩展的服务。默认情况下,任何订阅的客户都可以使用3个核心区域之一:北美(美国),欧洲(德国),亚洲。对于专用托管计划,我们提供大部分的AWS区域(除核心区域外)。如果您需要一个特定的国家来托管您的应用程序 - 请告诉我们。
如何获得应用程序的捆绑包、二进制文件或源代码?
要获得二进制文件或捆绑包,您必须至少拥有 Business 订阅。后端应用程序可以作为二进制文件从artifact store下载,或通过docker pull从我们的注册中心(如Docker Hub)提取。移动和Web捆绑包也可以从工件商店下载。除了 "学习与探索 "之外,您可以通过任何订阅下载移动应用程序捆绑包。要获得应用程序的源代码,您必须拥有企业订阅。通过企业订阅,您将获得后台和Web应用程序的完整源代码,但移动应用程序的代码库有限,因为我们使用的是后台驱动的方法。
模型和虚拟模型有什么区别?
我们使用 "模型 "一词来表示我们将在数据库中创建表格的结构,并将自动预创建数据库块,以便对数据库表进行搜索、创建记录等基本操作。虚拟模型是相同的,只是我们不会创建表格,也不会有DB块。虚拟模型是大多数开发人员最想要的功能之一。虚拟模型最常见的用例是当您需要创建一个结构(如JS或JSON中的对象)并将其用于外部请求、UI元素或端点时。奇怪的是,在后端应用程序中定义的模型会自动以虚拟模型的形式出现在Web和移动应用程序中:在Web和移动应用程序中,您需要了解任何数据结构才能使用这些数据结构。
如何在业务流程中使用模型?如何提取字段等。
对于每个模型,我们预先生成Make和Expand块。Make会将字段收集到模型记录中,Expand会从模型记录中提取字段。请注意,这些块不会改变传递给块输入的初始数据。
如何设置局部变量或全局变量的值?
当您将初始数据传递给输入时,您将使用的所有块都不会改变初始数据。唯一会改变数据的代码块是Set Variable:连接变量和值,代码块执行后,您将获得变量中的值。移动应用程序和网络应用程序中的全局变量可以具有持久性,如果设置了相应的标志,全局变量将在应用程序重启后继续存在。
如何调用外部系统的API?
向外部系统发出请求的最佳方式是从您的后台应用程序发出。通过这种方式,您将获得对数据和安全性的更多控制。有两种方法可以做到这一点:
- 使用HTTP请求块是最简单的方法,您可以在任何后端BP中使用它。
- 使用外部API设计器首先创建一个请求,然后在您的BP中使用制作好的块。
虽然您不仅可以在后端应用程序中使用HTTP请求块调用外部系统,也可以在Web和移动应用程序中使用,但您需要有理由这样做:当您的前端应用程序想要调用本地网络中的设备时,或者如果这是第三方系统的设计。
调用外部系统时支持哪些类型的请求和协议?
目前,我们支持带有JSON或XML有效载荷、纯文本或二进制有效载荷的REST API请求。目前还不支持gRPC,但我们正在积极努力在未来几个月内通过我们全新的外部API设计器引入gRPC。
AppMaster创建的应用程序支持WebSockets吗?
是的,您可以在后端应用程序中创建WSS端点,并使用它们在Web或移动应用程序中进行通信。此外,您还可以在创建WSS端点时使用模型定义自己的有效载荷结构。使用WebSockets与外部系统通信尚未实现。
如何从Web或移动应用程序调用后端端点?
对于您在后端应用程序中创建的每个端点,平台都会为Web和移动应用程序创建服务器请求块。只需在任何触发器中放置该块并调用即可。您可以在浏览器开发人员控制台的网络请求选项卡中监控服务器请求块的执行情况。在移动应用程序中,您可以使用日志(必须首先在AppMaster开发者应用程序设置中启用)。
我可以创建自定义验证和注册吗?
当然可以,您可以完全禁用内置的认证模块并创建一个完全自定义的解决方案。您需要在后台应用程序中创建一个单独的BP,来处理自动验证令牌牵引(通常来自请求头),并根据您的规则进行检查。您可以使用BP块Get Request Headers 获取 请求头。请注意,一旦您禁用内置认证,您将无法使用Get Current User(获取当前用户)块。此外,您可以使用任何ID、电话号码或其他标识符来代替标准认证模块中的电子邮件。
是否有办法为可靠计数器和其他有序执行情况创建线程安全操作?
AppMaster支持业务流程执行的单线程模式,当业务流程的所有调用以严格的顺序执行时,一次执行一个。这种模式在高工作量的情况下可能会有性能下降,但在大多数情况下,它不会导致任何明显的性能下降。请注意,该模式的调用堆栈(队列)是有限的。
使用短信、电子邮件或OTP进行2FA?
是的,您可以调整您的验证逻辑以包含2FA方法。要使用短信或电子邮件,您必须连接外部提供商,如Twilio。最简单的方法是扩展会话,并在会话中包含控制2FA的附加字段。在2023年第三季度,我们将推出基于时间的OTP模块,该模块将与谷歌和微软的Authenticator一起使用。
我可以在其他网络或移动应用程序中使用AppMaster生成的后台吗?
可以,AppMaster生成的后台应用程序具有标准的REST API端点。对于每个应用程序,REST API文档(OpenAPI/Swagger)会自动生成并在单独的端点上提供。
我可以使用模板来创建项目或应用程序吗?
我们还没有模板,但我们会在不久的将来发布。AppMaster项目比WebFlow或Bubble更复杂,我们需要更多的时间来实现它们。
AppMaster支持什么类型的数据库?
从PG12开始,AppMaster生成的后台应用程序可以在任何兼容PostgreSQL的数据库中运行,但我们推荐使用最新版本的PostgreSQL DB(本文发布时为15.3)。MSSQL、MariaDB、MySQL和SQLite支持计划将于2023年底/2024年初添加。
我如何直接访问数据库编辑记录?
AppMaster不支持在AppMaster云中托管的应用程序直接访问数据库。如果您使用内部托管,您可以使用任何可视化工具,如PGAdmin或使用pgsql命令行工具访问数据库。在未来,我们将添加一个功能,让客户直接编辑数据库。
是否有实时协作?我们可以作为一个团队在同一个项目上工作吗?
我们仅在新网页设计器中有实时协作功能。新的网页设计器(测试版)使用无冲突复制数据类型协议(CRDT)的网络草案,涵盖所有使用情况,并提供状态管理(Ctrl+Z,操作回滚)。未来,我们将逐步将CRDT推广到BP编辑器和数据模型设计器中。如果您需要团队合作,请不要编辑数据模型模式、相同的BP或相同的Web/移动应用程序,因为这会导致数据丢失。
AppMaster可能缺少哪些重要功能?
- 可视化SQL设计器。虽然支持大多数基本操作,如带过滤器和连接的搜索、通过id获取一条记录、更新、修补、删除和软删除,但为了获得更好的灵活性和性能,我们正在开发Visual SQL Designer,它将于2023年10月发布。
- 后端微服务。我们正在积极为每个项目实现多个后端应用程序。目前,每个项目只能创建一个后端应用程序。
- 网络应用程序还没有SSR。对于高度优化的 Web 应用程序和网站,SSR 可为 SEO 带来额外的好处。ETA Nov-2023。
- 支持外部API请求的gRPC。我们计划添加带有protobuf有效载荷和压缩选项的gRPC,以扩展系统间互连的可能性。
- 项目、网络和移动应用程序模板。我们正在努力引入模板。作为第一步,我们将在2023年9月添加网络应用模板。整个项目模板还没有ETA。