Viktor 是 Serverpod 的创始人兼首席开发者,Serverpod 是一个新发布的开源后端,使用 Dart 编写,面向 Flutter 社区。Viktor 拥有计算机科学硕士学位,并拥有超过 20 年的行业经验,在软件工程方面拥有扎实的背景。在创办 Serverpod 之前,他在硅谷的 Google Flutter 团队工作。他曾在麻省理工学院、卡内基梅隆大学和加州大学伯克利分校等国际会议和大学发表演讲并担任客座讲师,主题包括编程、应用程序创建和计算机图形学。
<raw_text>0 嗨,感谢收听。这是 It's All Widgets Flutter 播客。我的名字是 Kolo Korn。在每一集中,你都有机会与 Flutter 社区的杰出成员交谈。在本集中,我们非常幸运地能够与 Victor 交谈,他是 ServerPod 的创始人。欢迎。谢谢。我很高兴来到这里。感谢你的参与。那么,首先,你能分享一下你的背景吗?好的。我做开发已经很久了。我大概 12 岁就开始编程了。
嗯,我父母的电脑想玩电脑游戏,实际上我在游戏行业工作了很长时间,这带我去了——我来自瑞典,但这带我去了旧金山和菲利库姆谷,所以我最终搬到了那里。我被旧金山的一家大型游戏公司招聘,在那里工作了一段时间,然后我收到了一家
那里的初创公司的邀请,所以我搬到了那里。我基本上构建了一个用于制作电脑游戏或移动游戏的工具,所以这家初创公司所有客户都使用我的工具来构建游戏,是的,那是一段非常棒的时光,不幸的是,他们像一些初创公司那样资金耗尽了,然后他们把我告上了谷歌,我最终加入了 Flutter 团队
所以我实际上很早就参与了 Flutter 的工作,是的,在谷歌工作很棒,但我想这可能在我的基因里,我必须看看我自己的项目,所以我最终搬回了瑞典,我现在住在斯德哥尔摩,在这里经营这家初创公司已经几年了,我
显然,我使用 Flutter 来构建应用程序,但我真的很想念一个好的后端。所以这就是 ServerPod 的起源,想法就是这样产生的。这就是我过去 18 个月一直在做的事情。是的,这是一个非常快速的背景介绍。太棒了。这正好引出了 ServerPod。你想花一点时间解释一下它是什么以及人们为什么要使用它吗?
是的,我是一个 Flutter 开发者,我想你们大多数听众也是。我确实觉得我缺少一个好的后端。对于我们正在构建的应用程序类型,使用 Firebase 实际上是不可能的。所以我开始寻找不同的选项,并尝试了一些,但并没有真正找到我非常喜欢的。
一件大事是,你最终会使用两种计算机语言,我觉得在工作时这有点分散注意力。Dart 是一种非常好的语言。所以我决定花时间构建 ServerPod,这是一个专门为 Flutter 构建的后端。但它也使用 Dart 来实现全栈。这样就可以……
你开始使用单一语言。我们在 ServerPod 中添加了一些非常酷的创新。它实际上会分析你的服务器代码,找到你的后端方法,并在客户端复制这些方法。因此,当你调用 ServerPod 中的方法时,就像在应用程序中调用本地方法一样,这非常酷。
我们构建了一个非常好的序列化层。所以它实际上使用的是一个非常标准的 REST API。当你使用 ServerPod 时,你只需要忘记它就可以了,这非常好。所以你可以忘记编写所有这些代码。我们为它创建了一个很棒的 ORM。所以从数据库中提取对象非常容易。你可以实际提取一个对象。你可以直接将其发布到客户端。如果你需要去除
某些可能是敏感的字段,它会为你做到这一点。我们围绕它构建了一切,例如使用 Terraform 设置基础设施、上传文件、身份验证,所有这些你在构建应用程序时通常需要的东西。我们只是把它内置进去了。因此,当你设置你的 Serverpod 时,你可能在开始构建时不会考虑这些事情。
努力工作,但从长远来看,准备好这些东西会为你节省大量时间。这包括诸如我们构建非常好的缓存、非常好的日志记录之类的东西。我们实际上有一个图形用户界面用于读取日志,这非常好。是的,我想这就是 ServerPod 的第六天。
太棒了。我给你我的参考框架。我们正在开发的应用程序,我们使用 Flutter 作为前端,对于后端,我们使用 Laravel,但我们花费了大量时间编写粘合代码。我们使用 REST API 来连接前端和后端。例如,仅仅保持模型同步本身就是一个挑战。除此之外,还有简单地序列化数据并将其来回传递。听起来 Cipherbot 消除了所有这些,你只需在客户端发出请求,它实际上是在幕后调用后端代码。
这太棒了。是的,我的意思是,这很多,这是我从使用,特别是,你知道,不同的,用不同语言编写的不同后端
得到的非常常见的反馈,你真的需要做所有这些转换代码来解码你的对象,创建 API,并且所有这些都为你准备好了。而且,你知道,ServerPod 确保所有内容都保持同步。保持向后兼容性非常容易,这也非常重要,因为,你知道,应用程序,当你更新某些内容时,有一个小的循环
当你发布更新时,人们可能需要很长时间才能获得新的更新。因此,能够保持向后兼容性以及保持所有内容同步非常重要。使用 ServerPod,你实际上不必担心这个问题。它可以正常工作。非常酷。至于托管 ServerPod 应用程序,是否有推荐的平台?是 AWS 还是任何 Dart 服务器都可以?
我的意思是,你基本上可以在任何可以运行 Dart 的地方托管它。你需要一个连接到它的 Postgres 数据库。这几乎是唯一的要求。Dart 几乎可以在任何地方以原生性能运行。所以这并不是一个问题。我们为 AWS 编写了 Terraform 脚本,它将设置你的完整基础设施。所以这是,你知道,与……
自动缩放、负载均衡器、用于上传文件的存储桶、来自 GitHub 的部署,就像整个事情一样。它实际上只需要 10 到 15 分钟就可以设置所有内容,包括所有域名证书,所有内容。现在,我们也在研究……这实际上是我现在正在研究的功能……
为 Google Cloud 提供相同的体验。因此,你基本上有两个非常好的选择,但如果你想自己完成所有这些设置,你可以在任何地方托管它。但我认为这将是一个非常好的补充,也是很多人要求的东西。
我完全同意。我想说,让我最相信这个项目的一件事是,当我看到 Node 的成功时。我做过很多 JavaScript 编程。它有其怪癖或挑战,但 Node 非常流行,即使它使用的是 JavaScript,我认为很大程度上是因为你能够在前端和后端共享一种语言。因此,我认为如果你采用这种范例并将其转移到 Dart,在那里你拥有真正优秀的语言,能够在前端为你的 UI 构建 Flutter,然后在后端使用 Dart,这似乎非常有意义。
是的,Dart 作为一种语言……我的意思是,它主要不是为后端构建的,但它在后端运行得非常好,所以……
我认为这是一个不错的选择。我今天唯一要说的是,它不如 Node.js 成熟,对吧?你可以找到很多示例和代码,而 Dart 在后端的时间并不长。所以它还需要一些时间。但对于所有标准的东西,
它就在那里,例如,你可以获得 Dart 中的整个 Google API,例如,使用不错的 API,Serverpod 直接支持它,因此你可以使用 Google 设置身份验证,然后你可以访问所有服务器端的 API,这实际上很难在没有 Serverpod 的情况下做到,这需要大量的工作才能做到……
ServerPod 真正基于应用程序开发人员的需求以及你在构建应用程序时需要的所有东西以及你并不一定立即想到会需要的东西而构建的。我认为缓存就是一个很好的例子,它通常是事后才想到的。当你……
当你意识到事情变得太慢时,你才会添加它。将它内置到服务器中非常方便。因为它使在需要时添加这些东西变得非常容易。以及查找错误。因此,我们为 ServerPod 构建了一个非常酷的日志记录系统。所以说……
你有一个执行速度有点慢的方法。你可以打开日志记录以显示所有缓慢的方法调用。当你找到它们时,你可以更改该特定方法的设置以提高日志记录级别。你记录发生的所有事情,包括所有数据库调用。这是导致事情变慢的一个非常常见的原因。你可以基本上……
查看你执行的每个查询,以及它花费了多长时间。查询实际上是用 Dart 的堆栈跟踪保存的。你可以单击堆栈跟踪,它会直接带你回到你的代码。我认为这是一个非常巧妙的功能,它将为人们节省大量时间。我不知道你是否尝试过深入研究数据库日志并查找缓慢的查询,但这可能会非常乏味。
绝对的。你可以在模型定义中定义诸如索引之类的内容吗?那将如何工作?是的,当然。这也是我们将在 ServerPod 的下一个重大更新中进行改进的内容。而且这是
我的意思是,它已经执行索引,并且会为你生成数据库表,但它尚未处理数据库迁移。这绝对是我们将来要添加的内容,并使该过程更加流畅。这显然包括索引,尽管已经支持了所有这些,但是
能够在你的定义文件中添加它,并让它在服务器上生效将非常棒。我们在应用程序中遇到的一个很大的问题是模型之间的关系。加载一条记录很容易,但是该记录可能具有一对一、一对多、多对多的关系。在诸如 Euroloading、延迟加载之类的功能中是否处理了这个问题?在某种程度上,我会说,但是仍然需要做一些工作来改进它。而且
如果我们在 ORM 中不支持它,你始终可以使用任何 SQL 代码。所以你实际上没有任何限制,但是能够进行延迟加载之类的事情并直接使用它会非常棒。你会说将它与 Firebase 或 Superbase 进行比较是否公平,只是后端也使用 Dart 吗?是的,我会说与 Firebase 相比,它……
它对服务器的设置方式略有不同。所以它实际上,服务器可以在 ServerPod 中具有状态,这使得构建其他类型的应用程序成为可能,而这些应用程序使用 Firebase 非常难以实现,我会说。例如,如果你进行实时通信,它可能是一个游戏,但即使你这样做
需要来回推送更多数据,并且你不想让它通过数据库,那么 Serverpod 是一个理想的选择,所以我们制作了一个名为 pixorama.live 的简单示例应用程序,我建议大家查看一下,它基本上是一个多用户绘图体验,任何人都可以在网格上绘制像素,并且你们可以同时进行
同时进行。所以这是一个非常有趣的项目,但是使用 ServerPod 来做这样的事情非常非常容易。整个后端代码不到一页。我不知道你之前是否查看过,但我建议大家去查看一下。网址是 pixorama.live。你可以在浏览器中打开它。它显然适用于 Flutter Web。它适用于
在设备上。太棒了。公司只有你一个人吗?还是团队还有其他人?我还想知道,如果人们想添加功能,人们能否做出贡献?是的,我先回答你的第二个问题。是的,人们,它是完全开源的。我们已经从社区获得了许多贡献,其中一些非常重要,并且
一些很酷的功能,我认为这将成为下一个版本的一个非常巧妙的功能。基本上,它允许你在服务器上抛出异常并在客户端捕获它。它实际上会序列化异常并……
将其传递给客户端,解包它,并抛出相同的异常。显然,并非所有异常都会发生这种情况,但你可以创建扩展到特定类的特殊异常,这些异常将具有这种行为。这实际上为一种非常方便的错误处理新方法打开了大门。所以你可以传递错误消息。你知道,异常在很多地方都非常方便。
在你的应用程序代码中,但现在你获得了从服务器到客户端的整个体验。这是一个来自社区的非常酷的贡献,有人刚刚做到了。至于团队,我在假期前为 ServerPod 筹集了资金,所以我正在组建一个团队,我希望很快就能组建起来。
嗯,在接下来的几个月里,我有一些非常优秀的人似乎很感兴趣,所以我们很快就会有一个团队,但现在只有我一个人,我想投资者也提供了很多帮助,所以这太棒了,祝贺你,祝你好运,这非常令人兴奋,谢谢,是的,是的,这确实非常令人兴奋,而且……
所以我认为,你知道,当你只有几个人时,你不需要在早期就找到合适的人。但到目前为止,除了贡献之外,我都是自己编写所有代码的,是的,有些贡献实际上相当重要。所以我会说有几个人实际上正在开发 ServerPod。
如果你有兴趣帮忙,他们可能还可以编写教程或示例、文档、博客。除了编写代码之外,构建生态系统肯定也很有帮助。是的,这绝对是我们需要帮助的地方。已经有一些 YouTuber 制作了关于 ServerPod 的教程视频。我知道还有一些教程正在制作中。
所以肯定会有更多内容出现,我知道文档可以在某些方面进行补充。但是……我的意思是,它每周都在改进,所以有很多事情正在发生。我发布 ServerPod,我想现在可能已经三个星期了,但是是的,自从发布以来,反响相当不错。如此多的兴趣,以及……
如此多的贡献和人们的帮助,所以围绕它形成了一个非常活跃的社区,这太棒了,但也非常具有挑战性,需要跟上一切,这是一个令人高兴的问题,是的,是的,太酷了,网站是什么?serverpod.dev,在那里你可以找到 GitHub,在那里你也可以找到
和讨论区以及其他内容。在某个时候,我们可能会创建一个 Discord 或 Slack 服务器,但目前,所有内容基本上都在 GitHub 上。说到这里,我很想知道你对 Flutter 的总体看法。例如,当你构建 Flutter 应用程序时,我们经常被问到的一个问题是使用哪种状态管理方法。你使用特定的包还是继承小部件?好的。我的意思是……
最近,我主要使用 RiverPod。我认为这非常有效。我也做过简单的,你知道,get state。这取决于用例。我会说,如果你编写可重用的部件,我认为只使用 set state 可能是最好的方法。对于我自己的项目,我使用 RiverPod。
但是,是的,我并没有特别偏好。只是大多数人都在使用它,所以我选择了它。你知道,我很满意。我相信使用 ServerPod,你可以使用任何方法。这无关紧要。它只是 Dart 代码。是的,是的。是的,完全正确。你对刚入门的人有什么建议吗?好问题。嗯……
我认为也许可以从几个较小的项目开始,如果你是学习者,那就完成这些项目,也许不要从像 ServerPod 这样的项目开始。在做几个项目之前这样做非常有帮助。而且,我认为做一些较小的应用程序来……
构建你的简历,例如,如果你正在寻找 Flutter 工作。我知道在招聘时,我肯定会查看人们之前做过什么,以及他们是否有东西可以展示,以及他们是否有代码可以展示,这应该很有用。所以这绝对是我会给刚入门的人的一些建议,如果你想成为一名专业的 Flutter 开发者,那么构建一个你可以展示的优秀的投资组合非常重要
我认为这几乎或可能比拥有强大的计算机科学背景或类似的东西更重要。尽管这取决于工作权利。这也很有用。我的学位和我在那里学到的东西确实对我很有帮助。这是一个很好的建议。我同意。我认为现在你的 GitHub 个人资料比以前重要得多。
无论好坏。是的,是的,绝对的。我的意思是,一种方法是为像 SilverPod 这样的开源项目做出贡献,或者有很多这样的选择。这可能是学习的好方法,而且,你知道,可以获得你编写的代码的反馈。因为我认为对于大多数开源项目来说,在所有内容合并到你的项目之前,都会进行代码审查。
所以获得这种反馈非常非常有帮助。我认为这是我在谷歌工作中学到的最重要的一点,代码审查非常重要。我可能花在让我的代码通过审查上的时间比我花在编写代码上的时间还要多,让团队中的每个人都对你的工作感到满意。我认为对于大多数项目来说,你不需要……
太酷了,那是完美的。但在开源框架中,这非常重要,对吧?存在测试,代码稳定,一切正常。
绝对的。现在,作为一个程序员,我认为你经常可以独自编写很多程序,但当你开始作为团队的一部分进行编程时,你才会真正学习成为一名程序员。我直到在乐队演奏时才真正学会成为一名音乐家,对吧?你可以待在家里,自己弹吉他,尽可能多地练习,并且变得非常出色,但是直到你学习与一群音乐家、乐队环境中的音乐家团队互动的挑战,那时你才会真正掌握你的技艺。我认为编程也是如此,正如你提到的,拉取请求和代码审查以及理解这个过程才能真正成为一名高效的程序员。是的,我的意思是,绝对的,是的,
很大的区别。当我学习编程时,我的意思是,这是……
几乎在互联网出现之前。所以你必须去书店买一本关于 C 编程的书。我得了肺炎,大约持续了三个星期,我花时间阅读计算机编程书籍,学习 C 编程。我病得很重,几乎没有下床。所以我只是看书。我甚至没有电脑来尝试一下。
我就是这样学习编程的。但是你编写的代码,我的意思是,我从那本书中学到了很多东西。然后我最终,显然,变得更好一些,我开始在电脑前编程。但是那本书中没有编程的某些方面。我的意思是,它包含了所有内容,例如,这就是你编写 C 程序的方式,对吧?
但它没有说明如何构建你的程序。所以我基本上在一个文件中编写了整个程序。它没有教你如何使用头文件。我的意思是,我认为现在大多数编程语言都不再使用它了。但是是的。
在过去,能够在文件之间共享代码是一个要求,我只是无法做到这一点,所以我不知道。是的,所以我猜当我开始编程或学习计算机科学并参加了一些课程时,他们真的强迫你构建你的代码和这些部分,我认为
我想这就像我是一个有点孤僻的人,只是在一个巨大的单一文件中编写代码,对吧?当你开始与其他人一起工作或接受其他人的审查时,他们会说,“哦,你在做什么?”我想。所以我猜,我的意思是,很容易陷入你的……
同样的轨道,是的,而且……这真的,真的非常有帮助,可以从其他开发人员那里获得反馈,当然,太酷了,还有什么你想推广的吗?好的,嗯,我不认为我有什么要推广的,除了 ServerPod,所以去看看吧,网址是 serverpod.dev,我