【问题标题】:What is the difference between a regular Rails app and a Rails API?常规 Rails 应用程序和 Rails API 有什么区别?
【发布时间】:2015-09-15 02:29:45
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 frontend backend rails-api


    【解决方案1】:

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

    API 和常规 Rails 应用的根本区别在于 API 返回数据以供进一步处理,而不是返回数据 旨在直接查看。因此,与其生产一个 看起来很漂亮的 HTML 文档(带有 CSS 和/或 Javascript),API 产生简单的信息结构,可以进一步处理 任何会消耗我们 API 的东西。

    【讨论】:

    • 问题是RAILS api 和RAILS web 应用程序有什么区别。您的回答似乎只涵盖了 api 和一般网络应用程序之间的区别。
    【解决方案2】:

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

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

    简而言之,

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

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

    【讨论】:

    • 一个非常常见的案例是带有 API 的“Web 应用程序”,该 API 主要用于为第 3 方客户端提供数据和交互性——而不仅仅是供内部使用。 “吃自己的狗粮”是一个很好的起点,但如果您不将 API 与您自己的使用隔离开来,通常会导致 API 混乱。一个非常常见的例子是人们提供了一个完全损坏的 JSON 响应,因为他们主要构建了端点来显示图表。
    【解决方案3】:

    根据official rails website,rails web 应用程序和rails api 之间存在三个主要区别:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-16
      • 1970-01-01
      • 2017-06-06
      • 2015-10-01
      • 2017-04-11
      • 2014-10-09
      • 1970-01-01
      • 2014-07-13
      • 1970-01-01
      相关资源
      最近更新 更多