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

Thi*_*ent 6 frontend ruby-on-rails backend rails-api ruby-on-rails-4

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

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

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

Cyr*_*ris 13

常规的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动作可以提高对某些页面的响应能力.例如,有一个自动完成形式,即通过AJAX调用拉取数据.


Mey*_*hhi 10

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

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

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

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

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


Thi*_*ent 4

我在 Yoni Weisbrod 的Rails API Mini Guide中找到了一个非常明确的答案:

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

  • 问题是 RAILS api 和 RAILS Web 应用程序之间有什么区别。您的答案似乎只涵盖了 api 和 web 应用程序之间的一般差异。 (5认同)