Ruby on rails rails与第三方API交互?

Ruby on rails rails与第三方API交互?,ruby-on-rails,api,redmine,Ruby On Rails,Api,Redmine,我的应用程序通常需要与第三方API配合使用,并使用响应中的大量数据,redmine就是其中之一。(可能会使用3~43rd API) 我尝试使用Net::HTTP,例如: 我的控制器: class ApplicationController < ActionController::Base protect_from_forgery with: :exception def get_request (request) uri = URI.parse(request)

我的应用程序通常需要与第三方API配合使用,并使用响应中的大量数据,redmine就是其中之一。(可能会使用3~43rd API) 我尝试使用Net::HTTP,例如:

我的控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def get_request (request)
    uri = URI.parse(request)
    res = Net::HTTP.get_response(uri)
  end
end

require 'net/http'
class LogsController < ApplicationController
    def new
        redmine_api_key = 'key=' + 'my key'
        redmine_api_url = 'http://redmine/users/1.json?'
        request_user = redmine_api_url + redmine_api_key
        @user_get = get_request(request_user)
        @user_data = JSON.parse(@user_get.body)['user']
    end
end
class ApplicationController
我的观点:(只是测试一下,看看我得到了什么)


帐户数据




身份证件 登录 名字 姓氏 邮件 创建于 上次登录 api_密钥
我可以得到我想要的数据,但我不知道我的方法是正确的还是愚蠢的(我指的是一些类似JSON.parse(@user\u get.body)['user'])。 我做了一些研究,在一些文章中,他们说:如果应用程序与多个API一起工作,在lib文件夹中编写是一种更好的方法。 一些人建议:从第三个API获取所有数据,并创建自己的数据库来管理数据。
但是我找不到关于如何使用第三方API的完整教程…

因为您可能需要经常对第三方进行API调用。您可以在
lib
文件夹中编写该代码。 在
Api.rb中

module Api

def self.do_get_request(url, params={})
  request = request + '?' + params.to_query
  uri = URI.parse(request)
  response = Net::HTTP.get_response(uri)
  JSON.parse(response) if response
end
现在,您可以在控制器中调用此函数:

require 'net/http'
class LogsController < ApplicationController
    def new
        params = {key: 'my key'}
        redmine_api_url = 'http://redmine/users/1.json'
        response = Api.do_get_request(redmine_api_url, params)
        @user_data = response['user'] if response.present?
    end
end
需要“net/http”
类LogsController<应用程序控制器
def新
params={key:'my key'}
redmine_api_url='1〕http://redmine/users/1.json'
response=Api.do\u get\u请求(redmine\u Api\u url,参数)
@user_data=response['user']如果response.present?
结束
结束
do\u get\u请求可以是一个通用函数。您还可以在库中的API模块中创建特定于第三方的函数,这样就不必在每个请求的末尾添加密钥。
无论响应是什么,您总是使用JSON.parse解析它,因此可以将代码推送到Api模块


如果您经常使用这些数据,可以将其存储在数据库中。为此,您必须创建一个模型(请阅读rails指南:)。

非常感谢!谢谢你的建议,我会更认真地研究这份文件。
require 'net/http'
class LogsController < ApplicationController
    def new
        params = {key: 'my key'}
        redmine_api_url = 'http://redmine/users/1.json'
        response = Api.do_get_request(redmine_api_url, params)
        @user_data = response['user'] if response.present?
    end
end