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

What is the difference between a regular Rails app and a Rails API?

在学习Rails的过程中,我了解到如何将其与一些前端MV*JavaScript框架相结合——例如Backbone.js、Angular.js,或 Ember.js — 改善用户体验。

这向(我)介绍了使用 Rails 作为 API 而不是 Web 应用程序的概念。

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

我在 Yoni Weisbrod 的 Rails API Mini Guide:

中找到了一个非常明确的答案

The fundamental difference between an API and a regular Rails app is that an API returns data for further processing, rather than data that is meant to be viewed directly. Therefore, rather than producing an HTML document (with CSS and/or Javascript) that looks pretty, APIs produce simple information structures that can be further processed by whatever will be consuming our API.

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

A Rails API 将只处理您的操作,并假定其他人正在为客户端执行渲染视图的工作。因此,一个 Rails API 应该以适当的格式 return 数据,例如 JSON、XML,或者只是一段要执行的 JS 代码。然后 AngularJS 等前端框架的工作就是接收、解析数据并对数据执行某些操作(例如更新一些 HTML 等)

简而言之,

  • 经典 Rails 应用程序是一体化应用程序,其中处理和渲染都由 Rails 处理。然而,应用程序可能缺乏响应能力,因为会呈现整页,但以这种方式编写代码通常要快得多。
  • Rails API 只是提供中间结果。它将专注于仅提供数据。如果您对 design/responsiveness 有强烈要求,这可能会更好,因为您可以更灵活地使用您可以使用的前端库。通常只传输数据,因此速度更快。 APIs 有一些问题。例如,对于单页应用程序 + 完整 AJAX,可能更难在用户浏览器上设置 forward/back 行为。此外,使用 APIs 将需要更多工作,但如果您有很多开发人员,您可以就接口达成一致,并并行化工作 server/frontend.

现在,我给出的不是非黑即白的答案。您完全可以拥有一个主要构建为 Web 应用程序的 Rails 应用程序,但可以使用一些 API 操作来提高对某些页面的响应能力。这方面的一个例子是拥有一个自动完成表单,即通过 AJAX 调用提取数据。

根据 official rails website,rails 网络应用程序与 rails api:

之间存在三个主要区别

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

2 - 在 api 应用程序中,ApplicationController 继承自 ActionController::API 而不是 ActionController::Base。与中间件一样,这将忽略提供主要由浏览器应用程序使用的功能的任何 Action Controller 模块。

3 - api 应用程序将生成器配置为在您生成新资源时跳过生成视图、助手和资产。

您可以随时将您的 rails 应用程序从其中一个转换为另一个。为此,请按照我上面提到的参考资料中的步骤进行操作。