常规Rails应用程序和Rails API之间有什么区别?

在学习Rails的过程中,我读到了如何将它与一些前端MV * JavaScript框架(如Backbone.js,Angular.js或Ember.js)结合起来以改进UX。

这引入了(对我而言)使用Rails作为API而不是Web应用程序的概念。

所以,现在,我很困惑:常规Rails应用程序和Rails API之间有什么区别?

常规的Rails应用程序将使用rails视图(erb或haml)直接呈现页面。 也就是说,它将处理数据并在视图中呈现此数据,直接用HTML页面回答客户端请求。

Rails API将仅处理您的操作,并假设其他人正在为客户端呈现视图。 因此,Rails API需要以适当的格式返回数据,如JSON,XML,或者只是要执行的JS代码。 然后,像AngularJS这样的前端框架的工作就是接收,解析和对数据做一些事情(比如更新一些HTML等)

简而言之,

  • Classic Rails应用程序是一体化应用程序,其中处理和呈现都由Rails处理。 然而,应用程序可能缺乏响应性或响应性,因为呈现完整页面,但通常以这种方式编写代码要快得多。
  • Rails API只是提供中间结果。 它将专注于提供数据。 如果您对设计/响应性有强烈要求,这可能会更好,因为您可以使用前端库更灵活。 通常只传输数据,因此它可以更快。 API存在一些问题。 例如,对于单页应用程序+完整的AJAX,在用户浏览器上设置前进/后退行为可能更困难。 此外,使用API​​将需要更多工作,但如果您有许多开发人员,则可以同意接口,并并行化工作服务器/前端。

现在,这不是我给出的黑色或白色答案。 你可以完全拥有一个主要构建为Web应用程序的Rails应用程序,但有一些API动作可以提高对某些页面的响应能力。 例如,有一个自动完成forms,即通过AJAX调用拉取数据。

根据官方rails网站 ,rails web应用程序和rails api有三个主要区别:

1 – api应用程序配置为以比正常情况更有限的一组中间件开始。 具体来说,默认情况下,它不会包含任何主要用于浏览器应用程序(如cookie支持)的中间件

2 – 在api应用程序中,ApplicationControllerinheritance自ActionController :: API而不是ActionController :: Base。 与中间件一样,这将省略任何提供主要由浏览器应用程序使用的function的Action Controller模块。

3 – api应用程序将生成器配置为在生成新资源时跳过生成视图,帮助程序和资产。

您始终可以将rails应用程序从其中一个转换为另一个。 为此,请按照上面提到的参考中的步骤操作。

我在Yoni Weisbrod的Rails API迷你指南中找到了一个非常明确的答案:

API和常规Rails应用程序之间的根本区别在于API返回数据以供进一步处理,而不是直接查看的数据。 因此,API不是生成看起来很漂亮的HTML文档(使用CSS和/或Javascript),而是生成简单的信息结构,可以通过消耗我们的API来进一步处理。