我目前正在开发一个Rails应用程序,其逻辑我想扩展到我们的本机移动应用程序可以使用的API。我知道这一切在概念上是如何工作的,但我很难规划出代码的实际结构。
有一些关于如何从现有Rails应用程序扩展API的指南。我在这些指南中看到的问题是它们需要专门为API创建单独的控制器。我觉得维护太多了 - 如果我在网络应用程序控制器中进行更改,我必须在API控制器中进行相同的更改。我希望我的更改能够反映在所有控制器上。
话虽如此,您认为构建此应用程序的最佳方式是什么?我看到的一个选项是使用rails-api gem并从这个较轻的Rails版本创建一个API,对于Web应用程序的前端,我可以使用Backbone.js并调用此API。我们计划使用的移动应用也可以调用此API。
或许我根本不需要使用Backbone?有没有办法仍然使用Rails视图并为Web应用程序和API提供相同的控制器? 我不确定是否有另一种好方法可以解决这个问题。我读到Rails 5将整合rails-api gem,但是直到秋天我才相信。
或者是否值得为API构建单独的控制器,因为我将继续开发API并可能对其进行版本化?
到目前为止,我一直在开发网络应用程序作为移动网站而不考虑API。我在开发方面有点深入,但我并不是因为对应用程序进行大幅改动太难了(例如,重新考虑API组件重做应用程序)。
答案 0 :(得分:0)
这里有一个非显而易见的解决方案是将网络应用程序实现为Single Page Application (SPA)。 purebread SPA只包含一个HTML骨架,无论用户点击什么路径,它都会被提供。
所有渲染和模板都在客户端使用JavaScript和Ajax完成。这为您的应用提供了真正的响应感。
由于所有渲染都是在客户端完成的,因此您甚至不需要在同一个Rails应用程序中使用SPA Web应用程序,甚至不需要将Rails用于SPA。
将您的服务器端API分离到自己的应用程序听起来有点疯狂,但实际上有很大的好处 - 因为您的应用程序仅关注数据,所以您可以非常清晰地分离关注点。摆脱所有渲染和前端宝石,使您的应用和测试套件运行得非常快。
构建SPA的流行框架是Meteor.js,Ember.js和Angular.js。 Backbone可用于构建SPA,但它的设计非常简单,因此您需要自己进行大量的框架编码。
如果SPA不是你的一杯茶,或者你需要支持关闭javascript的neckbeards,那么减少重复的诀窍就是让你的控制器保持尽可能薄 - 我的意思是病得很瘦。
保持控制器精简的一些好方法是将方法移动到模型中,或者创建service objects来干掉它们。