We're sunsetting PodQuest on 2025-07-28. Thank you for your support!
Export Podcast Subscriptions
cover of episode Choosing and using the right backend system for your app

Choosing and using the right backend system for your app

2025/2/23
logo of podcast Swift Developer Podcast - App development and discussion

Swift Developer Podcast - App development and discussion

AI Deep Dive AI Chapters Transcript
People
J
Jeff
使用ChatGPT来改善关系和解决争论
P
Phil
Topics
Jeff: 我认为后端是应用包外部的一切内容,例如API、数据库或我调用的内容页面。构建应用时,除非必要,否则不应学习新的后端技术。在选择数据库时,应优先选择成熟且易于使用的数据库,避免学习多种数据库技术。在应用上线时,应优先选择成熟可靠的后端服务,避免使用实验性的技术。如果为他人开发应用并构建后端,则需要负责后端的维护。 Phil: 我认为后端是指应用或产品与之通信的、独立于应用本身的服务器端组件。在选择后端技术时,应优先选择与现有技能匹配且易于集成的技术,而不是学习全新的技术。如果当前使用的语言缺乏良好的服务器端生态系统,则应考虑使用其他语言或框架。选择后端技术时,应优先选择具有良好生态系统、易于集成数据库的语言和框架。如果自行构建后端,应选择可靠的托管服务,例如AWS、Google Cloud Platform等。

Deep Dive

Chapters
This chapter explores the necessity of a backend system for different types of applications. It defines what constitutes a backend and provides examples of apps that might not require one, focusing on client-side experiences and local data storage.
  • Not all apps need a backend.
  • A backend is anything outside the app bundle (APIs, databases, external content).
  • Local file storage isn't considered a backend.
  • Consider whether your app needs features like multiplayer or user data synchronization.

Shownotes Transcript

在本集中,我们讨论了选择合适的支持您应用程序的后端。我们讨论了各种选项以及如何找到合适的解决方案来保持您的应用程序运行并让用户满意。成为Patreon会员并帮助此播客生存https://www.patreon.com/compileswift 感谢我们每月的支持者

Adam Wulf bitSpectre Arclite

★ 支持此播客在Patreon上 ★ </context> <raw_text>0 大家好!欢迎收听播客。我们今天又有一集要给大家。我们将讨论为您的应用程序选择正确后端的问题,这是一个难题,当然也是人们会发表意见的问题。

嘿,Jeff。你好吗?你这一周过得怎么样?我们一直在重新组合和忙碌的几个星期过得怎么样?他们一直都很好。我一直在从事许多不同的项目,但没有一个项目已经发布。但是好吧,你知道,有时就是这样。哦,好吧,那么,一切照旧,对吧?当然。你知道,这就像我可以发布也可以不发布。我可以发布一件东西,也可以同时进行三个项目,但一件都没发布。

而Phil无论如何都成功了。没错。所以我也有类似的情况。所以那些关注的人,是的,Groundhog关卡在Endless Hurdles中仍然有效,因为我没有发布更新,其实没有很好的理由。我修复了bug,我只是没有……你知道,有时候你就像……

它还不够糟糕,以至于我只想为这件事发布一个全新的版本,对吧?所以我也是一样的情况。我有一些事情要做。没有一件事情已经发布。也许其中一件会在某个时候发布。就是这样。好了,让我们深入探讨一下。是的,我们在这里讨论的是应用程序的后端。

让我们首先定义我们认为后端是什么,并确保我们都在同一页上。对我来说,后端是指任何在我的应用程序、我的应用程序包之外的东西。它可能非常类似于我调用的某些API、数据库、我调用的某些内容页面。对我来说,所有这些都是后端支持内容。

用于使应用程序运行,对吧?这就是我对后端的定义。你对此怎么看?你的定义是什么?是的,我认为这是一个很好的定义。你知道,你的整个应用程序都有前端和后端。但我认为我们讨论的是更像是客户端类型的应用程序。

应用程序的前端和应用程序的服务器端后端。你指的是你的应用程序或你的产品与其进行通信的东西,它与应用程序本身是分开的。因此,即使您发布的是网络应用程序,例如,您将拥有 JavaScript 客户端,然后您将拥有其他服务器端的东西。就我们的定义而言,这就是您的后端。

所以我想首先要提到的就是,根据这个定义,你的应用程序可能实际上并不需要一个所谓的“后端”,对吧?

你可能有一些完全专注于客户端的体验。你有一些完全独立创建的生产力工具。你可能有一个没有多人游戏或排行榜之类的游戏。你可能能够拥有一个根本没有后端的应用程序,这没关系。如果你的应用程序不需要,你不需要去构建一个带有服务器的东西。

对于某些类型的体验,这是绝对需要的。就像我说的,多人游戏,你多少需要某种后端,如果没有其他原因,也要让你的玩家互相交流。但是,根据我们一直在使用的定义,完全有可能构建没有后端的应用程序。我同意。这里有一些例子。你知道,你存储在你的电脑本地文件系统上的任何东西,

你的应用程序所在的任何地方。我认为这不是后端。它只是你的本地文件系统。所以使用这个游戏就是一个很好的例子,对吧?如果我要存储一些玩家偏好或高分之类的,而我只是要存储它

在设备本身的某种文件中。我不倾向于认为这是后端。这只是应用程序的一个组成部分。这就是我的看法。同样,就像你说的,如果不需要调用任何设备外部的东西,那么这不是后端。例如,我不认为与操作系统上的API进行通信是

后端,对吧?这只是系统层的一部分,这就是我的看法。所以假设你确实需要某种后端,无论你的定义是什么以及你的应用程序的要求是什么,

让我们谈谈使用现有技能与新技能,以及可能由其他人为你做这件事。我非常提倡现在不是学习新东西的时候,除非有必要。所以如果我正忙于制作一个应用程序,并且我正准备尝试发布这个东西,

现在不是说:“你知道吗?我一直想学习如何做一个节点服务器。”现在可能不是一个好时机。你最终会陷入那个兔子洞,对吧?然后你就会参与到所有这些事情中。接下来你就会发现,你没有在做你的应用程序。所以我认为在那里使用新技能不一定是正确的做法。但我知道你对此有略微不同的看法。

你怎么看?总的来说,我认为这不是,你知道,你不想一定要跳出来说,好吧,我在这方面是专家,我知道如何以我想要的方式构建和运行它。现在我要去学习一些完全不同的东西。只是,你知道,在让一些东西发布、让一些东西发布时,增加了更多工作,

而,你知道,你应该关注的是构建你的应用程序。话虽如此,一定要专注于使用正确的工具来完成工作。如果你……

某人正在使用一种没有很好服务器生态系统的语言来构建应用程序,你可能确实想要看看你的专业领域之外的东西。如果你正在某种游戏制作器、游戏引擎(例如Godot)中构建应用程序,你可能不想尝试在其中构建Web服务器。

如果你正在开发iOS应用程序,但是你知道,你是老派程序员,你仍然使用Objective-C,那么我认为那里没有很多很好的Objective-C服务器解决方案。嗯,

Swift有一些很棒的服务解决方案。我们之前在播客中讨论过。你知道,Python、Ruby、Node.js,所有这些,都有一些具有更好生态系统的系统。我会说,找到一个接近你所知道的东西。找到一个简单且在线上有大量专业知识的系统,然后去研究类似的东西。同样,像

确保它与你想要做的事情集成。你知道,如果你,如果你知道你需要一个数据库,就像使用一种不仅有服务器生态系统,而且还连接到该数据库的语言一样。例如,我不会去寻找一种语言,它有

一个很棒的服务器生态系统,但没有很多其他东西。我想在这里坦诚一点。希望到目前为止,大家知道我是一个持续学习的倡导者,对吧?所以我不是说,嘿,你知道吗?如果有一个机会让你学习一些新东西或你以前没有做过的一些方面,那就去做吧。我只是说现在可能不是最好的时机,因为你已经试图发布一个产品或产品的一部分

产品。而这些后端系统和类似的东西,它们支持这一点,对吧?除非有必要,否则它们不应该成为项目本身。所以我确实同意你的观点,嘿,如果出现机会,而且不会以任何方式伤害你,那就去做吧。

但是,你知道,不要跳入深水区,接下来你就会发现,哦,我到处都有问题,你知道,我有这个我不懂的后端,你知道,诸如此类的事情。我认为数据库肯定是一个很好的例子,对吧?我的意思是,这是另一个有无数选项的例子,但是也有……

许多不同的方法来操作这些东西,而学习三种不同的数据库方法可能不是你在试图发布这个产品时最好的时间利用方式,因此,让我们继续讨论可能的选项,在我们深入研究这些选项之前,因为我知道那里会有一些人说这不是所有内容的详尽列表

我们只会列出我们认为一些更常见的选项,当然是一些已经被广泛使用的选项。因此,你会发现那里有很好的支持,很好的社区,再次强调,在我看来,找到良好的支持、文档和社区对于你所做的几乎任何将要投入生产的事情都至关重要。

因此,话虽如此,对吧,你知道,让我们从这里的一些显而易见的选项开始。如果您使用的是Apple平台并且正在为Apple平台开发,那么有两个非常容易上手的选项,它们基本上是紧密相连的,即CloudKit和iCloud,对吧?我在我的一个应用程序中使用了这些,并且……

它对我来说效果很好。我知道其他人有不同的意见,但它非常容易上手。这立即为您提供了跨设备支持,对吧?所以对我来说,你知道,这是一个很好的选择。

当然也有很多平台可以利用。也许最著名的一个平台是Firebase。它非常流行。我在一些应用程序中使用它,并且对此非常满意。Firebase实际上是一组服务。人们倾向于认为它只是一两件事,例如在线数据库等等。但它实际上是一组服务。所以如果你想走这条路……

您可以使用Firebase进行实时数据库。例如,您可以在实时聊天应用程序中使用它。您有崩溃分析。您有性能分析,所有这些服务都在其中。它开箱即用,对吧?同样,文档非常完善的服务。

它支持许多不同的语言。它们为许多最流行的选项预先构建了库。例如,我用它与Android一起使用过。我用它与原生iOS一起使用过。我的意思是Swift和Objective-C。我还用它与React Native一起使用过。许多人也将其用于网络应用程序。

所以Firebase是一个不错的选择。当然还有许多其他服务。例如,我们可以开始流式传输,亚马逊有一些,微软有一些,等等。但这些是一些预先构建的服务。

但是,还有另一条路可以走。如果你想自己动手玩得开心一些,有一些选择。Jeff,你想列举一些流行的选择吗?在最顶层,你有了从头开始构建自己的东西并创建

就像我之前说的,有很多不同的语言非常擅长这一点。可能最流行的选择是用于JavaScript生态系统的Node.js。然后,如果你是熟悉Python生态系统,那么还有几个不同的Python生态系统服务器框架。但是是的,基本上是……

不。

所以这实际上是从头开始构建一些东西,并真正支持你自己的完整服务生态系统。我想强调你刚才说的一点,我认为这一点非常重要。我认为人们不应该低估。无论何时你为自己推出任何东西,

无论是前端、后端还是其他什么,你都负责维护并确保它能够运行。这非常重要。如果您使用这些预构建的选项之一,那么您需要做的工作就会少得多。例如,Firebase不会宕机,您不必修复它,对吧?那种事情。如果您自己创建的后端,我的意思是,您更有能力,我并不是说您不应该这样做,

但是如果出了问题,您必须自己解决,对吧?因为它是您拥有的,您构建的,您必须解决问题,这是需要考虑的事情。因为特别是如果您正在为其他人构建应用程序并构建后端来配合它,

他们会期望您维护它。而且您多少有责任维护它,对吧?您不太可能签订一份合同,上面写着,我将构建这个东西然后离开。没错。我同意。就像你说的,Firebase和任何这些第三方系统一样,CloudKit也是如此,这些都是其他人将要维护的东西,并且,你知道,

它并非百分之百完美。它们可能会不时宕机,你知道,嗯,有时会发生一些事情,你,你知道,但这并不是你的工作。如果维护它们是你的工作,你必须确保你正在使用可靠的服务。因此,你知道,可能不要将它托管在你地下室的Mac mini上。嗯,如果你有狗,你知道,它们会绊倒电源线,你知道,你的应用程序就宕机了。

你可能想要使用可靠的托管服务。你不想在与Apple进行应用程序审核时,你知道,你的服务没有运行,因为他们会启动你的应用程序,他们会说,它不起作用,他们会立即拒绝你。

所以我希望这里的重点是现在不是进行太多实验的时候。你真的想要使用一些经过尝试和测试并且已经存在的东西,对吧?最好,正如我们所说,由一些大型公司托管或维护,这些公司非常重视确保他们为你提供的这些服务正在运行,因此它们正在为你的应用程序以及你的客户运行。

当然,去学习新东西,尝试一下。但是当你投入生产时,我个人觉得现在不是测试我的极限的时候。我更愿意拥有我可以专注于我的应用程序并且知道后端良好且稳定并且不必担心它的东西。所以我认为这差不多涵盖了这里的内容。Jeff,人们在哪里可以找到你?像往常一样,我在kokotype.com上可以找到我目前正在做的事情的链接,并且……