Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-为几个API构建适配器_Ruby On Rails_Ruby_Api - Fatal编程技术网

Ruby on rails Rails-为几个API构建适配器

Ruby on rails Rails-为几个API构建适配器,ruby-on-rails,ruby,api,Ruby On Rails,Ruby,Api,关于在Rails中为几个API构建适配器的想法,我需要帮助。 让我先解释一下: 我希望我的客户能够向我的应用程序添加第三方扩展。 我有一个型号的扩展和另一个自定义扩展 我自己创建扩展,然后出现在“可用扩展”部分。当用户单击“添加扩展名”时,它会转到“我的扩展名”部分(由CustomExtension表示) 我创建了一个名为API Connector的扩展,我希望它能按如下方式工作: 当用户单击“添加扩展”时,他会选择API所属的类别(我自己定义的类别)(如“客户评论”)。然后,用户将输入一些字段

关于在Rails中为几个API构建适配器的想法,我需要帮助。 让我先解释一下:

我希望我的客户能够向我的应用程序添加第三方扩展。 我有一个型号的
扩展
和另一个
自定义扩展

我自己创建扩展,然后出现在“可用扩展”部分。当用户单击“添加扩展名”时,它会转到“我的扩展名”部分(由
CustomExtension
表示)

我创建了一个名为
API Connector
的扩展,我希望它能按如下方式工作: 当用户单击“添加扩展”时,他会选择API所属的类别(我自己定义的类别)(如“客户评论”)。然后,用户将输入一些字段,如
api\u键
api\u端点
。然后,我希望能够连接到此api并显示与该api相关的其他一些字段(例如,它来自何处的名称,例如:对于客户评论,如果用户为它连接了Google api,我希望将扩展从api Connector重命名为Google Customer Reviews)

简单地说,我希望能够用同一个接口连接多个不同的API,并让用户不用在我的项目中实现API就可以做到这一点

编辑-更多信息:

这些API可能没有相同的身份验证过程或相同的属性。它们之间可能非常不同


技术要求是基于RESTful API和JSON的。

据我所知,您想为用户创建一种方法,根据用户定义的参数连接到运行时之前未知的API吗?如果是这样的话,有一个Ruby库(现在从Rails中删除)是为了方便连接到RESTAPI而构建的,这可能会有帮助吗

因此,假设我想从Cat API中提取品种信息。下面是一些示例代码,可以让我在运行时定义:

需要“活动资源”
需要“ostruct”
##
#这只是一个数据存储。它可以是ActiveRecord对象或其他集合
#API所需的值的集合。你必须建立自己的标准
#对于您可以支持的API配置类型
@config=OpenStruct.new(
#我们需要设置一个自定义标题和值
标题名称:“x-api-key”,
#在此处获取您自己的密钥:https://docs.thecatapi.com
标题_值:“96120fe6-0846-41c6-9a1d-8a70e691dd47”,
基本url:“https://api.thecatapi.com/v1/",
#这个资源的路径是什么
资源名称:“繁殖”,
#不要在URL中添加“.json”
使用扩展名:false,
)
##
#在运行时创建从ActiveResource::Base继承的匿名类
@自定义扩展=Class.new(ActiveResource::Base)
##
#根据用户提供的值配置我们的类。
@自定义扩展名.class\u评估do
self.include_format_in_path=@config.use_json_扩展名
self.site=@config.base\u url
self.headers[@config.header\u name]=@config.header\u值
self.element\u name=@config.resource\u name
#在此记录错误
self.logger=logger.new(“./output.log”)
结束
将@custom_extension.all.to_
如果运气好的话,你可以下载一份猫的品种列表。这应该足以证明这个概念。ActiveResource的文档可在此处找到:

注意不要从用户提供的源中导入危险内容


希望这就是您想要的?

每个API是否具有相同的属性?例如,它们是否都以相同的方式进行身份验证(
api\u key
)?他们都很安静吗?它们都是基于JSON或XML的吗?你能提供更多的信息,并用一个特定的问题改写你的帖子吗?@Bodicious我提供了更多信息并回答了你的问题。谢谢,这是我一直在寻找的方法。我会研究它,我希望它能满足我的所有要求。事实上,我在考虑一个用户可能会给我的应用程序带来的危险内容。我会尽力阻止它祝你好运:)你认为这可以通过使用诸如RestClient或HttpParty之类的gem来实现吗?是的,两者都可以。这里真正的挑战是在应用程序和未知的第三方API之间定义自己的API层。因为有许多不同的方法来验证和构造API查询,所以您的工作将是决定要支持哪些常见模式。您使用的库是一个实现细节。谢谢您的回答,我想我会选择restclient或HttpParty。我支持通过api密钥进行身份验证,但也支持oauth(因为许多api使用这种身份验证模式)