Ruby on rails Rails处理不同控制器客户端(Web、iOS API)的方式是什么?

Ruby on rails Rails处理不同控制器客户端(Web、iOS API)的方式是什么?,ruby-on-rails,ios,json,api,Ruby On Rails,Ios,Json,Api,我有一个Rails应用程序,它有两个“客户端”——一个iOS应用程序读取/写入JSON,一个Web浏览器读取HTML 现在,如果我说“我希望不同的浏览器/客户端有不同的输出”,我们可以使用不同的ERB文件,并基于User-Agent或类似的方式进行渲染 Rails就是这样在Web世界中被想象出来的——在Web世界中,我键入“cap deploy”,我的所有“实例”都升级到最新版本(保存活动会话AJAX调用) 然而,作为一名iOS开发人员,我非常习惯于在代码中使用if块来处理不同的数据版本和客户端

我有一个Rails应用程序,它有两个“客户端”——一个iOS应用程序读取/写入JSON,一个Web浏览器读取HTML

现在,如果我说“我希望不同的浏览器/客户端有不同的输出”,我们可以使用不同的ERB文件,并基于
User-Agent
或类似的方式进行渲染

Rails就是这样在Web世界中被想象出来的——在Web世界中,我键入“cap deploy”,我的所有“实例”都升级到最新版本(保存活动会话AJAX调用)

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

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

我不想将所有版本控制逻辑与我的普通HTML(可以优雅地升级,如上所述)混为一谈,因此我考虑:

  • 有一个单独的控制器,或者只对来自iOS的API调用执行操作
  • 编写一个“转发器”,将HTML/Web版本视为API版本之上的一层

我是在试图解决一个已解决的问题吗?在开展这个项目时,我应该了解哪些资源或指导思想?

我建议您创建两个应用程序,一个用于webapp,另一个用于API

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

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

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

你觉得怎么样

编辑:

这就是我的想法,图书馆在中间。