Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我应该如何开发一个最终将拥有巨大API组件的Rails应用程序?_Ruby On Rails_Ruby_Api_Ruby On Rails 4_Rails Api - Fatal编程技术网

Ruby on rails 我应该如何开发一个最终将拥有巨大API组件的Rails应用程序?

Ruby on rails 我应该如何开发一个最终将拥有巨大API组件的Rails应用程序?,ruby-on-rails,ruby,api,ruby-on-rails-4,rails-api,Ruby On Rails,Ruby,Api,Ruby On Rails 4,Rails Api,我目前正在开发一个Rails应用程序,我想将其逻辑扩展到我们的本地移动应用程序可以使用的API。我知道这一切在概念上是如何运作的,但我很难规划出代码的实际结构 关于如何从现有Rails应用程序扩展API,有一些指南。我在这些指南中看到的问题是,它们需要专门为API创建单独的控制器。我觉得这太难维持了——如果我在web应用程序控制器中做了更改,我就必须在API控制器中做同样的更改。我希望我的更改反映在所有控制器上 话虽如此,您认为构建此应用程序的最佳方式是什么?我看到的一个选项是使用rails a

我目前正在开发一个Rails应用程序,我想将其逻辑扩展到我们的本地移动应用程序可以使用的API。我知道这一切在概念上是如何运作的,但我很难规划出代码的实际结构

关于如何从现有Rails应用程序扩展API,有一些指南。我在这些指南中看到的问题是,它们需要专门为API创建单独的控制器。我觉得这太难维持了——如果我在web应用程序控制器中做了更改,我就必须在API控制器中做同样的更改。我希望我的更改反映在所有控制器上

话虽如此,您认为构建此应用程序的最佳方式是什么?我看到的一个选项是使用rails api gem并从这个轻量级的rails版本创建一个api,对于web应用程序的前端,我可以使用Backbone.js并调用这个api。我们计划拥有的移动应用程序也可以调用此API

或者我根本不需要使用主干线?有没有办法仍然使用Rails视图,并为web应用程序和API使用相同的控制器? 我不确定是否还有别的好办法。我读到Rails 5将集成Rails api gem,但我相信要到秋天才会发布

或者,由于我将继续开发API并可能对其进行版本化,为API构建单独的控制器是否值得


到目前为止,我一直在将web应用程序开发为一个移动站点,而没有考虑API。我在开发方面有点深入,但我还没有到对应用程序进行重大更改的程度(例如,在重新编写应用程序时更多地考虑API组件)。

这里有一个不明显的解决方案,就是将web应用程序作为一个应用程序来实现。purebread SPA只包含一个HTML框架,无论用户点击哪条路线,都会提供该框架

所有的渲染和模板都是在客户端使用JavaScript和Ajax完成的。这给你的应用程序带来了一种真正灵敏的感觉

由于所有渲染都是在客户端完成的,所以您甚至不需要在同一个Rails应用程序中使用SPA web应用程序,甚至不需要在SPA中使用Rails

将服务器端API分离到自己的应用程序中听起来有点疯狂,但实际上有着巨大的好处——因为你的应用程序完全以数据为中心,所以你得到了一个真正干净的关注点分离。去掉所有的渲染和前端gems可以让你们的应用程序和测试套件运行得非常快

构建SPA的流行框架有Meteor.js、Ember.js和Angular.js。主干网可以用来构建SPA,但它的设计非常简单,所以您需要自己进行大量的框架编码

如果SPA不是你的拿手好戏,或者你需要支持关闭javascript的人,那么减少重复的诀窍就是让你的控制器尽可能薄——我的意思是像病态的薄一样


保持控制器精简的几个好技巧是将方法移动到模型中或创建以使其干燥。

您可以使用respond\u to块从现有控制器操作中返回JSON。看看拉布尔。如果您要构建一个可能需要涉及版本控制和某种单独的令牌身份验证的大型API,那么继续构建并与常规控制器分开并使用活动模型序列化程序可能会有回报。@BryceJohnston Hmmm,是的,这样做可能会有意义。我肯定需要令牌授权,这是我将不断开发的东西,所以我可能会对它进行版本化。我唯一担心的是维护两套不同的控制器。您对我如何以尽可能少的代码重复来实现这一点有什么建议吗?据我所知,没有一种很好的方法可以防止API和web控制器之间的重复,只要尽量减少控制器中所需的逻辑,如果在模型中进行操作是有意义的,因为它们将共享同一个模型。@BryceJohnston好的,这是有意义的。非常感谢!