Architecture 有关于构建可扩展前端体系结构的资源吗?

Architecture 有关于构建可扩展前端体系结构的资源吗?,architecture,web,frontend,Architecture,Web,Frontend,我将创建一个全新的网站,从头开始编写所有内容,主要是在前端部分。我只是想知道是否有关于构建可伸缩前端架构的资源,因为我以前从未有过这种经验。如有任何建议、想法或书籍推荐,将不胜感激 很难回答您的问题,因为我们不确定问题的每一部分。据我所知,没有“可伸缩前端架构”这样的定义。可扩展和前端都是非常广泛的话题,所以我只能猜测 我假设在您看来,前端意味着单页javascript应用程序,可伸缩部分意味着功能可伸缩性(而不是服务器端上下文中通常使用的负载可伸缩性)。有了这些限制,我认为REST架构是我所知

我将创建一个全新的网站,从头开始编写所有内容,主要是在前端部分。我只是想知道是否有关于构建可伸缩前端架构的资源,因为我以前从未有过这种经验。如有任何建议、想法或书籍推荐,将不胜感激

很难回答您的问题,因为我们不确定问题的每一部分。据我所知,没有“可伸缩前端架构”这样的定义。可扩展和前端都是非常广泛的话题,所以我只能猜测

我假设在您看来,前端意味着单页javascript应用程序,可伸缩部分意味着功能可伸缩性(而不是服务器端上下文中通常使用的负载可伸缩性)。有了这些限制,我认为REST架构是我所知道的最好的匹配

  • 根据REST体系结构,有REST服务和REST客户端。两者都是应用程序。您可以在浏览器中作为前端应用程序运行REST客户端,也可以在服务器上作为后端应用程序运行REST服务。REST是为HTTP 1.1协议而设计的,因此正如您所看到的,它可以轻松地适应HTTP客户机和服务器的常规上下文

  • 常规web服务只向其客户机提供数据(例如JSON格式),客户机应该知道如何处理这些数据。因此,客户机必须包含业务逻辑的片段。该服务还包含业务逻辑,因为它是检查请求有效性的唯一安全环境,并且只有它可以访问公共持久性存储(数据库)。因此,在这种情况下,服务和客户机都包含相同的代码片段,因此,web应用程序的代码并不枯燥。我想你已经知道非干式代码很难维护。。。通过REST体系结构,服务不仅向客户端发送数据,还向客户端发送抽象控制器(链接和表单)的表示。这可以通过发送任何超媒体格式来完成。如果您认为HTTP通信也会这样做,它会以HTML格式发送控制器和数据表示。我们可以使用HTML作为消息格式,但不建议使用它,因为解析它既困难又缓慢,而且没有任何建议如何以HTML格式序列化数据。XML和JSON不同,它们是为数据序列化而设计的,但它们缺少控制器描述。目前有许多新诞生的基于XML和JSON的超媒体格式,它们能够做到这一点:ATOM+XML、HAL+XML、HAL+JSON、JSON-LD、siren(JSON)、collection+JSON等等

  • 因此,您的REST客户机从REST服务获取超媒体格式的数据和控制器表示。例如,通过个人资料页面,您可以获得姓名、出生日期等。。。作为数据和编辑表单,删除链接等。。。作为控制器。目前,关于如何描述控制器的标准/建议很少。您可以学习我提到的媒体类型,也可以制作自己的媒体类型。这并不难。。。重要的是,REST客户机在得到确切的控制器之前不应该知道任何关于它们的信息。它只能知道如何显示从服务获取的控制器。例如,通过注册表单,它不应该知道url、方法、输入字段的名称等。。。但它必须知道如何显示以当前超媒体格式描述的注册表。浏览器也会这样做,它们将表单作为HTML表单元素获取,并很好地显示它们,尽管它们不知道将填充的表单发送回服务器时会发生什么。因此,浏览器对其显示的web应用程序的业务逻辑一无所知。REST客户端对REST服务也做同样的事情,他们不知道REST服务的业务逻辑,他们只知道如何显示REST服务发回的超媒体,以及如何向服务发送请求。我认为这是一个容易理解的方法。。。由于这种设计方法,REST客户机和REST服务是松耦合、容错和易于维护的。例如,如果您向REST服务添加新功能(例如新链接),通常不会影响您的REST客户端,因为它们已经准备好处理链接


我认为理解REST体系结构的理论非常容易,但是技术诀窍要困难得多。人们经常将他们的常规web服务称为REST服务,这引起了很多困惑,因为REST体系结构现在是一种炒作。每个人都想这样做,但很少有人做得对…

可扩展前端?通常,前端(我这里指的是客户端,例如浏览器)不必扩展到超过1个用户。也许我遗漏了一些东西。我真正的意思是,由于我需要编写大量javascript文件,如何在大型网站中构造这些js文件?如果你计划在客户端使用框架(如果你不打算的话,我建议你),那么这只是在互联网站上搜索人们所做的事情。例如,对于AngularJS,seed应用程序模板()运行良好。如果您没有使用框架,那么就不可能回答您的问题,因为这将取决于您如何构建前端(mvc、mvvm等)。“要求我们推荐或查找工具、库或喜爱的非网站资源的问题与堆栈溢出无关,因为这些问题往往会吸引固执己见的答案和垃圾邮件。相反,以及迄今为止为解决这些问题所做的工作。”我不认为您或其他人对可伸缩前端的定义是准确的,正因为如此,很难回答您的问题。