Ruby on rails rails与第三方API交互?
我的应用程序通常需要与第三方API配合使用,并使用响应中的大量数据,redmine就是其中之一。(可能会使用3~43rd API) 我尝试使用Net::HTTP,例如: 我的控制器: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)
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