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

mak*_*dad 3 api json ruby-on-rails ios

我有一个Rails应用程序,它有2个"客户端" - 一个iOS应用程序读/写JSON,以及读取HTML的Web浏览器.

现在,如果我说"我想为不同的浏览器/客户端提供不同的输出",我们可以使用不同的ERB文件并基于User-Agent或类似地进行渲染.

通过这种方式,Rails在Web世界中被想象 - 我键入"cap deploy",并且我的所有"实例"都升级到最新版本(保存活动会话AJAX调用).

然而,作为iOS开发人员,我非常习惯于if在代码中阻止处理不同的数据版本和客户端应用程序版本.这很痛苦(但需要).

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

我不想将所有版本控制逻辑与我的普通HTML混合(可以优雅地升级,如上所述),所以我想到了:

  • 从iOS获得一个单独的控制器或仅用于我的API调用的操作
  • 编写一个"转发器",将HTML/Web版本视为API版本之上的一个层

我想解决一个解决的问题吗?在进行这个项目时,我应该知道任何资源或指导原则吗?

Val*_*res 5

我建议你创建2个应用程序,一个用于webapp,另一个用于API.

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

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

使用此模型,您还可以创建特定需求,例如,您可能需要更短的api网址而不是真正的webapp,因为您不关心API中的SEO.

你怎么看?

编辑:

这就是我的想法,图书馆在中间. 在此输入图像描述