【问题标题】:Building a web front end from an existing API从现有 API 构建 Web 前端
【发布时间】:2013-10-26 19:40:45
【问题描述】:

我正在从现有(RESTful)API 构建前端 Web 应用程序。

解决此问题的最佳方法是什么?我假设执行此操作的新标准方法是通过诸如骨干网之类的东西。

我还希望页面是不同的 URL,而不是单个页面应用程序。也就是说,我猜在我们不妨从服务器加载数据以启动时,请求页面然后触发异步 api 请求是不好的做法,对吧?我应该考虑什么样的架构或技术,以便我可以重用 API,但不会将两个请求背靠背发送到服务器,一个用于加载页面,一个用于加载数据?

【问题讨论】:

    标签: javascript rest backbone.js


    【解决方案1】:

    Backbone 和其他 JavaScript“MV*”框架绝对是高性能事件驱动 UI 的绝佳选择。您可以使用此设计并拥有不同的页面和 URL。它只是让在给定页面上执行异步操作变得更容易和更快,因为您将在 JSON 模型中拥有相关数据,并在数据更改时视图自动更新的环境中使用 pub/sub 模式。这种设计的另一个优点是您可以将数据放在模型中,而不是遍历 DOM 来获取数据。

    【讨论】:

      【解决方案2】:

      除了 Girardi 的回答之外,您担心在初始页面加载时执行两个请求(一个用于页面,一个用于实际数据)是一个真正的问题。

      其中一种解决方案是将初始数据直接引导到页面中,这样您就可以跳过额外的异步请求。这称为模型引导。例如,您可以放置​​一个额外的 <script></script> 标签来保存引导模型:

      <script>
          window.I_MODEL = [
              {id: 1, name: "foo"},
              {id: 2, name: "bar"}
          ]
      </script>
      

      然后在服务器端构建您的模型,并借助一些模板机制将序列化模型直接打印到页面中。

      搜索主干模型引导,这是一个直接的例子:http://ricostacruz.com/backbone-patterns/#bootstrapping_data

      【讨论】:

      • 感谢您的回复!这绝对是我通常会为这类事情做的事情,但是,我正在同一台服务器上处理已经构建的 API,并且不想为初始数据集重复代码。我不确定将 API 类与我的 Web 应用程序控制器中的 API 控制器分开调用是否是一种已知做法。即便如此,API 控制器可能会在 JSON 返回之前进行更改,因此我无法保证类似的输出。你明白我的意思吗?
      • 我更喜欢,因为我的 Web 服务只是业务层方法的包装器。并且永远不会更改他们获得的数据,因此在我的情况下,直接调用它们是安全的,它们的输出将是相同的。我不熟悉您的环境,我不知道在您的后端可以保证或不能保证什么,但是对于这种情况呢:您有 2 个 REST 服务,一个提供 JSON 和一个生成网页。当有人请求该网页时,在您返回它之前,只需调用另一个以 JSON 响应的服务。获取该响应并将其呈现到页面中。
      【解决方案3】:

      好吧,首先加载页面然后请求异步数据并不是一个坏习惯。将模板(html)和数据调用分开,您可以最大限度地利用本地存储、浏览器缓存的好处。 Backbone 不会为您的应用程序注入任何魔法,它只是提供了一个框架来组织您的代码,并有助于一次又一次地避免一些样板代码。

      【讨论】:

      • 我认为总是有 2 个(或更多)请求是不好的做法。这可能是一种练习,但这并不是很好的练习。
      • @FritsvanCampen 每种方法都有利有弊。如果我想缓存模板以供功能使用,将它们分开将始终对您有所帮助。好吧,连接和最小化请求数量是好的,但是如果你有一个 gmail/facebook 大小的应用程序,那就不实用了。
      • 你说得对,对于像 facebook 这样的东西来说,这是一个完全合理的解决方案。但是,我正在假设它不适用于此应用程序,因为我不使用 facebook 大小的数据,对于我的应用程序来说,这将是浪费时间。
      猜你喜欢
      • 2017-10-25
      • 2018-03-19
      • 2012-01-09
      • 2021-02-02
      • 1970-01-01
      • 2017-06-11
      • 1970-01-01
      • 2018-06-13
      • 2015-04-23
      相关资源
      最近更新 更多