RESTful API communciation from Ruby on Rails (4.0)
RESTful API communciation from Ruby on Rails (4.0)
我们正在进行一个实现LMS的RoR项目。我们需要将数据发送到由外部服务器提供的外部REST服务。数据是在某些事件完成时发送的,其中一些事件可能不是由客户端触发的(点击等)
此外,我们需要在rails模型中保持一致性,因为我们需要记录用户活动。
提供了一个使用API的库,该库是用JavaScript编写的。它使大部分工作变得容易,因此我们希望使用而不是为API请求创建自己的实现。
以下每种方法之间有什么区别?一个比另一个好吗?
-
使用javascript发送数据,在视图,但让客户端执行可能会一些严重的影响(分数改变、虚假成功等)。
-
使用NodeJS服务器来执行Javascript,但我们真的不知道如何与主服务器(Rails)通信
-
最后,使用Rails应用程序中的HTTP客户端将请求发送到服务。然而,我们不知道如何做到这一点,还有一个问题是这些代码在MVC模式中的位置。
您可能已经意识到,选项#1是不可能的。为了让客户代表您进行API调用,您需要向他们发送您的密钥/令牌/您需要使用API进行身份验证的任何东西。但一旦他们有了这些,他们就可以使用脚本控制台"像你一样"进行他们想要的任何API调用。这将是非常灾难性的。
选项#2可能非常复杂——我个人不确定你会怎么做。使用像therubyracer这样的库,从Ruby代码中执行JavaScript代码是可能的,但存在一定程度的沙盒,这可能会破坏需要网络访问的代码。
这就给您留下了选项#3,编写您自己的Ruby库来与API交互。这可能很容易,也可能很难,这取决于API有多庞大,但您手头已经有了JavaScript版本(希望还有REST服务本身的文档),因此与RestClient或HTTParty之类的东西相结合,前进的道路应该是清晰的。
至于API调用在Rails代码中的位置:如果您的模型基本上是通过REST服务镜像您正在交互的资源,那么添加相关的API调用作为这些模型上的方法或回调可能是有意义的。否则,把它们放在相关的控制器操作中可能没问题,但要注意代码的复杂性,如果情况变得不好,就提取到一个单独的类或模块中。
(如果您不需要等待API的响应,然后再向用户发送内容,您可能需要使用DelayedJob或类似功能在后台对API调用进行排队。)
- Ruby on Rails javascript getting truncated
- 在ruby on rails中使用jquery getJSON获取数据
- Ruby On Rails应用程序与angularJS关于AJAX
- Angular JS/Rube-on-Rails-控制器未识别错误
- ruby on rails:用于不同页面的选项卡
- Ruby On Rails Ajax 提交提交两次
- Ruby on Rails - 引导旋转木马按钮不起作用
- 按索引迭代数组时,单击提交按钮Ruby on Rails
- 如何将.js从视图移动到单独的资产 - Ruby On Rails
- 如何在Ruby on Rails中集成Arbor.js
- geolocation with javascript and ruby on rails
- Ruby on Rails 4:在 Rails Web 应用程序中添加 Javascript 文件时遇到问题
- Window.onload 未被调用 [Ruby on Rails] [Vanilla Javascript]
- Rails应用程序中的每个javascript文件都需要.on('page:change',初始化)吗?
- 如何在Ruby on Rails会话过期时重新加载或刷新页面
- 重命名上传的文件Ruby On Rails
- Ruby on Rails - grouped_collection_select error
- 带有jquery.min.map的Ruby on Rails:未能加载资源状态406
- Ruby on rails-更新ajax的PUT方法
- Rails on iOS - action "show"无法在:method =>:删除