ruby-on-rails - Rails 处理不同 Controller 客户端(Web、iOS API)的方式是什么?

标签 ruby-on-rails ios json api

我有一个 Rails 应用程序,它有 2 个“客户端”——一个 iOS 应用程序读取/写入 JSON,以及一个读取 HTML 的网络浏览器。

现在,如果我说“我想为不同的浏览器/客户端提供不同的输出”,我们可以使用不同的 ERB 文件并根据 User-Agent 或类似的方式呈现。

在 Web 世界中,Rails 就是这样想象的——我在其中键入“cap deploy”,我所有的“实例”都升级到最新版本(保存事件 session AJAX 调用)。

然而,作为一名 iOS 开发人员,我非常习惯在代码中使用 if block 来处理不同的数据版本和客户端应用程序版本。这很痛苦(但必须)。

我很想说“我会神奇地想到 1.0 版中的完美数据结构”,但我们可能都知道这不是真的——我想随着时间的推移添加和弃用属性甚至模型去。

我不想将所有这些版本控制逻辑与我的普通 HTML(可以优雅地升级,如上所述)混合在一起,所以我考虑过:

  • 为来自 iOS 的 API 调用设置单独的 Controller 或仅执行操作
  • 编写一个“转发器”,将 HTML/Web 版本视为 API 版本之上的一层

我是在尝试解决已解决的问题吗?在进行此项目时,我应该了解哪些资源或指导思想?

最佳答案

我建议您创建 2 个应用程序,一个用于 webapp,一个用于 API。

您可以拥有一个外部库,其中包含这两个应用程序中使用的所有模型、测试和业务逻辑。

然后,如果需要,您可以将 api 锁定到特定版本的库。 您可以创建多个版本的 API 而不会影响旧版本。 如果需要,您可以在库级别实现缓存,它会自动影响所有应用程序。

使用此模型,您还可以创建特定需求,例如,您可能希望 api 的 url 比真正的 webapp 更短,因为您不关心 API 中的 SEO。

你怎么看?

编辑:

这是我的想法,图书馆在中间。 enter image description here

关于ruby-on-rails - Rails 处理不同 Controller 客户端(Web、iOS API)的方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9866260/

相关文章:

ruby-on-rails - STI 多态 has_many 使用错误的类型值

ios - 从另一个类检索NSInteger属性的正确方法?

JSON 模式 - 具有相同数据类型的对象

iOS Objective-c 同步

jquery - 使用 Youtube Google API 和 jQuery

PHP:按键对 JSON 数据进行排序

ruby-on-rails - 如何在 Rails 的关注点内使用属性 API?

ruby-on-rails - mongoid中references_many和has_many的区别

ruby-on-rails - 通过 form_for 中的 text_field_tag 传递额外参数

ios - 如何将 Flash 中构建的 iOS 应用程序本地化为不同的语言?