如何解决Rails-用于多个API的构建适配器
在为Rails中的多个API构建适配器方面,我需要帮助。 让我先解释一下:
我希望我的客户能够将第三方扩展添加到我的应用中。
我有一个模型Extension
和另一个CustomExtension
。
我自己创建扩展,然后出现在“可用扩展”部分。当用户单击“添加扩展名”时,它将转到“我的扩展名”部分(由CustomExtension
表示)。
我创建了一个名为API Connector
的扩展名,并且希望它的工作方式如下:
当用户单击“添加扩展名”时,他选择了API所属的类别(我已经定义了自己)(例如“客户评论”)。然后,用户将输入一些字段,例如api_key
或api_endpoint
。然后,我希望能够连接到该api并显示与该api相关的其他一些字段(例如它的来源名称,例如:对于客户评论,如果用户为此连接了Google API,将扩展名从API连接器重命名为Google客户评论)。
简而言之,我希望能够使用相同的接口连接多个不同的API,并让用户无需在我的项目中实现该API就可以做到这一点。
编辑-更多信息:
API可能没有相同的身份验证过程或相同的属性。它们可以彼此非常不同。
技术要求是RESTful API和基于JSON的
解决方法
据我了解,您想基于用户定义的参数创建一种方法,供用户连接到运行时之前未知的API。如果是这样,那么有一个Ruby库(现在已从Rails中删除)是为允许轻松连接到REST API而构建的,也许对您有所帮助?
https://github.com/rails/activeresource
因此,假设我想从Cat API中获取品种信息。以下是一些示例代码,可让我在运行时进行定义:
require "active_resource"
require "ostruct"
##
# This is just a data-store. It could be an ActiveRecord object or some other set
# of values that you need for the API. You'll have to establish your own criteria
# for types of API configuration you can support
@config = OpenStruct.new(
# We need to set a custom header and value
header_name: 'x-api-key',# get your own key here: https://docs.thecatapi.com
header_value: '96120fe6-0846-41c6-9a1d-8a70e691dd47',base_url: "https://api.thecatapi.com/v1/",# What's the path where this resource can be found
resource_name: "breeds",# don't add ".json" to the URLs
use_json_extension: false,)
##
# Create an anonymous class at runtime that inherits from ActiveResource::Base
@custom_extension = Class.new(ActiveResource::Base)
##
# Config our class based on the user-provided values.
@custom_extension.class_eval do
self.include_format_in_path = @config.use_json_extension
self.site = @config.base_url
self.headers[@config.header_name] = @config.header_value
self.element_name = @config.resource_name
# Log errors here
self.logger = Logger.new("./output.log")
end
puts @custom_extension.all.to_s
如果有运气,应该可以为您下载猫的品种清单。足以证明这一概念。可以在以下位置找到ActiveResource的文档:https://rubydoc.info/gems/activeresource
请注意,不要从用户提供的来源导入危险内容!
希望这就是您想要的吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。