使用Zipper快速构建无服务器应用程序:编写TypeScript,将其他所有工作卸载
使用Zipper快速构建无服务器应用程序,卸载其他工作
我记得第一次看到Ruby on Rails的演示。演示者几乎不费吹灰之力就创建了一个可以用于真实业务目的的全栈Web应用程序。我印象深刻 – 尤其是当我想到使用Seam和Struts框架交付类似解决方案需要多少时间时。
Ruby于1993年创建,旨在成为一种易于使用的脚本语言,同时包含面向对象的特性。Ruby on Rails在2000年代中期将事情推向了一个新的水平 – 正好在Twitter、Shopify、GitHub和Airbnb的初创阶段成为首选技术。
我开始思考,“是否有可能拥有一个像Ruby on Rails这样的产品,而无需关心基础架构或底层数据层?”
那时我发现了Zipper平台。
- VoAGI新闻,9月20日:Python在Excel中:这将永久改变数据科学 • 新的VoAGI调查!
- 2024年的前5所大学证书
- “视频分割可以更具成本效益吗?认识DEVA:一种解耦的视频分割方法,可以节省注释并在不同任务之间泛化”
关于Zipper
Zipper是一个使用简单的TypeScript函数构建Web服务的平台。您可以使用Zipper创建applets(与Java无关,尽管它们共享相同的名称),然后在Zipper的平台上构建和部署它们。
Zipper最酷的地方在于它让您专注于使用TypeScript编写解决方案,而无需担心其他任何事情。Zipper负责处理以下事项:
-
用户界面
-
托管解决方案的基础架构
-
持久化层
-
与您的applet交互的API
-
身份验证
尽管该平台目前处于测试阶段,但消费者可以使用它。在我撰写本文时,已经有四个模板可帮助新用户入门:
-
Hello World – 一个基本的applet,让您入门
-
CRUD模板 – 提供一个待办事项列表,可以创建、查看、更新和删除项目
-
Slack App模板 – 提供与Slack服务交互的示例
-
AI生成的代码 – 用人类语言表达您的解决方案,并让AI为您创建一个applet
Zipper平台上还有一个画廊,提供可以像基于Git的存储库一样派生的applets。
我打算对Zipper平台进行测试,并创建一个投票applet。
HOA投票用例
美国的住宅所有者协会(HOA)概念在20世纪开始在美国蓬勃发展。分区成立HOA来处理诸如公共区域的维护以及为居民制定规则和准则等事务。他们的目标是在房屋建筑商完成开发之后,长期保持分区的整体生活质量。
HOA经常举行选举,让业主对他们认为最符合他们观点和观念的候选人投票。实际上,去年我发表了一篇关于如何使用Web3技术创建HOA投票的文章。
对于本文,我希望使用Zipper采用相同的方法。
投票要求
投票applet的要求是:
-
作为投票所有者,我需要能够创建候选人列表。
-
作为投票所有者,我需要能够创建注册选民列表。
-
作为选民,我需要能够查看候选人列表。
-
作为选民,我需要能够为单个候选人投票。
-
作为选民,我需要能够查看已投给每个候选人的当前投票总数。
此外,我认为一些额外目标也不错:
-
作为投票所有者,我需要能够清除所有候选人。
-
作为投票所有者,我需要能够清除所有选民。
-
作为投票所有者,我需要能够为投票设置一个标题。
-
作为投票所有者,我需要能够为投票设置一个副标题。
设计选票小程序
为了开始在Zipper平台上工作,我导航到zipper.dev并点击登录按钮。接下来,我选择了一个认证源:
登录后,我使用仪表板上的创建小程序按钮创建了一个新的小程序:
生成了一个唯一的名称,但可以根据您的用例进行更改。现在,我保留了所有默认值,并点击了下一步按钮 – 这使我能够从四个不同的小程序创建模板中进行选择。
我从CRUD模板开始,因为它提供了一个很好的例子,展示了在Zipper平台上常见的创建、查看、更新和删除流程的工作原理。代码创建完成后,屏幕如下所示:
现在我们已经有一个完全功能的小程序,我们可以更新代码以满足HOA选票的使用要求。
建立核心元素
对于选票小程序,我想要做的第一件事就是更新types.ts文件,如下所示:
我想要在一个名为constants.ts的新文件中为选票标题和副标题建立常量值:
为了只允许选票所有者对选票进行更改,我使用小程序的Secrets选项卡创建了一个所有者密码,其值为我的电子邮件地址。
然后,我引入了一个包含validateRequest()函数的common.ts文件:
这样我就可以将上下文传递给这个函数,以确保只有owner密码中的值才能被允许对选票和选民进行更改。
建立候选人
在了解了原始CRUD小程序中如何创建ToDo项目后,我可以引入create-candidate.ts文件,如下所示:
对于这个用例,我们只需要提供一个候选人名称,但候选人对象包含一个唯一的ID和收到的投票数。
在这里,我继续编写了delete-all-candidates.ts文件,用于从键/值数据存储中删除所有候选人:
此时,我使用预览功能创建了候选人A、候选人B和候选人C:
注册选民
选票准备好后,我需要能够为选票注册选民。所以我添加了一个create-voter.ts文件,内容如下:
为了注册选民,我决定提供电子邮件地址和姓名的输入。还有一个名为voted的布尔属性,用于强制执行一次性投票规则。
与之前一样,我继续创建了delete-all-voters.ts文件:
现在我们准备注册一些选民,我将自己注册为选票的选民:
创建选票
我需要做的最后一件事是建立选票。这涉及到更新main.ts文件,如下所示:
我在处理逻辑中添加了以下验证:
-
必须包含电子邮件属性,否则将显示“您必须提供有效的电子邮件地址以便为此选票投票”的消息。
-
提供的电子邮件值必须与注册选民匹配,否则将显示“提供的电子邮件地址未经授权,无法为此选票投票”的消息。
-
必须至少有一个候选人可供投票,否则将显示“此选票尚未配置任何候选人”的消息。
-
如果已注册选民已经投票,选票上的所有候选人的投票按钮将被禁用。
main.ts文件中包含每个候选人的按钮,它们都调用了vote.ts文件,如下所示:
此时,选票小程序已经准备就绪。
HOA选票的运行
对于每个注册选民,我会给他们发送一封电子邮件,其中包含类似下面列出的链接:
https://squeeking-echoing-cricket.zipper.run/run/[email protected]
该链接将根据email查询参数自定义以提供适当的电子邮件地址。点击链接会运行main.ts文件并传递邮箱参数,避免了选民需要输入他们的电子邮件地址的需求。
选票如下所示:
我决定为候选人 B 投票。一旦我点击按钮,选票会被更新如下:
候选人 B 的票数增加了一票,所有的投票按钮都被禁用了。成功!
结论
回顾投票小程序的要求,我意识到我能够在大约两个小时内满足所有的标准,包括额外的目标,而且这还包括了用户界面、基础设施和部署。这次经验最好的一点是,我百分之百的时间都专注于构建我的解决方案,而不需要花时间处理基础设施甚至持久性存储。
我的读者可能还记得,我一直专注于以下使命宣言,我认为这可以适用于任何 IT 专业人士:
“将时间专注于交付扩展您的知识产权价值的功能/功能。对于其他的一切,利用框架、产品和服务。”
– J. Vester
Zipper 平台完全符合我的个人使命宣言。事实上,他们比 Ruby on Rails 更进一步,因为我不需要担心我的服务将在哪里运行,也不需要配置哪种数据存储。使用小程序的方法,我的选票已经部署并准备就绪。
如果你有兴趣尝试小程序,请登录 zipper.dev 并开始构建。目前,使用 Zipper 平台是免费的。试试 AI 生成的代码模板,因为只需要提供一个段落描述你想要构建的内容,就可以看到生成的小程序与你设想的有多接近。
如果你想尝试我的选票小程序,也可以在 Zipper 图库中进行分支,位置如下:
https://zipper.dev/johnjvester/ballot
祝你度过愉快的一天!





