全栈开发:如何决定一些代码应该放在前端还是后端?

Full stack development: how to decide whether some code should go in the front end or back end?

例如,假设您正在构建一个 Plex/Kodi-like 网络应用程序。你的后端由一个数据库组成,在 /movies 上有一个 CRUD API,所以 GET /movies returns 数据库中的所有电影,GET /movies/:id returns 通过 ID 的特定电影,等。现在你想实现按流派、标题、发布日期等对电影进行排序的功能。前端应该只是 GET /movies 然后进行排序,还是后端应该提供一个新的 API 方法像 GET /movies/{byTitle, byGenre, byReleaseDate} 这样 returns 排序列表?

这是一个具体示例,但我也有兴趣知道在使用完整堆栈时如何决定通常将代码放在哪里。如果绝对必须,事情是否应该只在客户端?

回答你的最后一个问题:是的,一般来说,将逻辑放在客户端只是作为最后的手段,或者让用户体验更具响应性(但请提供替代方案!)。

在您的具体情况下,您可能想到的是一组相当小的电影样本。实际上,使用像 IMDB 这样的东西,将整个电影数据库发送到客户端是绝对不可能的,因为(即使没有像缩略图这样的任何媒体),它的大小也会有数百兆字节。

这就是数据库系统的工作——不仅要高效地存储数据,还要高效、快速地查询、排序、过滤和检索数据。以前在前端做筛选和排序,直到最近,由于JavaScript在所有主流浏览器中得到广泛支持和更高的性能,框架变得更加强大。

另一件需要考虑的事情是可访问性。尽管 JS 在主流浏览器中得到广泛支持,但除了台式机/笔记本电脑/手机之外,还有其他设备。支持互联网的电子阅读器、适用于视障人士的屏幕阅读器、旧版浏览器;选择禁用 JavaScript 的人,例如NoScript 以改善隐私(请参阅 TorBrowser)。这些可能只是市场的一小部分,您的目标受众可能根本不包括他们,但这是需要考虑的事情。一个设计良好的网站仅在可用时使用 JavaScript,在必要时回退到非 JS 解决方案(不幸的是,近年来不太正确)。

为了更好地使用后端进行数据提升、过滤、排序、混合、合并和丰富,它将有能力完成这些工作。

使用客户端逻辑了解客户端功能以及如何最好地呈现信息。

客户端越薄,就越容易跨浏览器、设备等进行移植