gpt4 book ai didi

ruby-on-rails - ruby on rails web 应用程序的第三方 API 数据

转载 作者:行者123 更新时间:2023-12-04 00:26:54 24 4
gpt4 key购买 nike

我有一个 ruby on rails Web 应用程序,它使用第三方 API,它提供了一些我想使用 d3 可视化的数据。访问数据的最佳方式是什么?我只用静态数据集练习了 d3.js。

我读过 How to create d3 graph using data from Rails database我阅读了 AJAX 是什么,但还是有点迷茫。如果 AJAX 确实是 方式,那么任何人都可以详细说明该过程吗?

另外,当我这样做时,最好使用我的 Web 应用程序从第三方 API 检索到的数据,还是应该 d3 直接从第三方 API 获取数据?差别大吗?

最佳答案

编辑:

为了更直接地回答你的问题,最好先在 Rails 中获取结果,然后在你的 JavaScript 中使用它们,只是为了让它更好地组织。

此外,与使用 Rails 相比,在页面加载时进行 AJAX 调用以获取数据是(根据我的经验),异步调用将无法在 JavaScript 代码尝试访问数据之前加载数据(如果时间太长)。您必须将 AJAX 调用设置为同步,以便 AJAX 将首先返回数据,然后它将执行任何以下代码。如果返回的数据很多,可能会导致页面加载时间过长,这对用户体验不利。


您可能需要使用 RestClient gem。

在您的 Gemfile 中:

gem 'rest-client'

然后运行bundle install

然后,创建一个模型来使用您的 API:

rails g model ModelForMyApi

然后运行 ​​rake db:migrate

在您的 ModelForMyApi 模型中:

class ModelForMyApi < ActiveRecord::Base
require 'rest_client'

@url

def self.getData
response = RestClient(@url, { :content_type => :json, "Api-Key" => "put your API key here" }
end

def self.retrieve_results(myParameter)
@url = "myApiUrl.com/stuff/?putYourParamNameHere=#{myParameter}"
JSON.parse(ModelForMyApi.getData)
end
end

因此,在您的 Controller 中,您可以执行以下操作:

class ExamplesController < ApplicationController
def index
@results = ModelForMyApi.retrieve_results("superCoolParameter")
end
end

并在您的 index.html.erb 文件中显示结果:

<%= @results %>

这将显示整个 JSON 响应。如果要访问键值对中的值,请使用此示例。

假装你的回复是这样的:

// This is a Rails JSON object, it has arrows.
// See below for how to incorporate this in your JavaScript
{
"fruit" => "banana",
"juice" => "orange juice"
}

使用

<%= @results['fruit']  %>

在您看来将显示“香蕉”。这就是我使用 Rails 进行 API 调用的方式。我不知道如何使用 d3.js 实现,但我认为最好的方法是先从 API 获取结果,然后将这些结果包含在您的 JavaScript 中。

编辑

由于您需要将它与 JavaScript 一起使用,因此在 Rails 中解析 JSON 响应可能不是最好的方法。在这种情况下,最好完全按照我上面所说的去做,但是从 self.retrieve_results 方法中删除 JSON.parse() 函数。这将返回一个普通的 JSON 对象而不是 Rails JSON 对象。

所以在 ModelForMyApi 中,从返回行中删除 JSON.parse:

class ModelForMyApi < ActiveRecord::Base
require 'rest_client'

@url

def self.getData
response = RestClient(@url, { :content_type => :json, "Api-Key" => "put your API key here" }
end

def self.retrieve_results(myParameter)
@url = "myApiUrl.com/stuff/?putYourParamNameHere=#{myParameter}"
ModelForMyApi.getData #JSON.parse was removed
end
end

在你的 JavaScript 中,你所要做的就是:

var jsonObj = #{@results};

// Output to log to see all the results you can play with
console.log(jsonObj);

然后,使用上面相同的 JSON 示例({"fruit": "banana", "juice": "orange juice"}),您可以在 JavaScript 中访问 JSON,例如所以:

jsonObj.fruit  // Will output "banana"

现在您可以在 d3.js 代码中使用您的 API 结果。


您需要从 Rails 方法中删除 JSON.parse 的原因是,当您在 Rails 方法中使用它时,它会使您的响应看起来像这样:

//Javascript cannot interpret the arrows
{
"fruit" => "banana",
"juice" => "orange juice"
}

但你需要它看起来像这样:

//JavaScript likes colons. No pun intended.
{
"fruit": "banana",
"juice": "orange juice"
}

关于ruby-on-rails - ruby on rails web 应用程序的第三方 API 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29832088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com