Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 在RoR中使用API_Ruby On Rails_Ruby On Rails 3_Api - Fatal编程技术网

Ruby on rails 在RoR中使用API

Ruby on rails 在RoR中使用API,ruby-on-rails,ruby-on-rails-3,api,Ruby On Rails,Ruby On Rails 3,Api,这样问似乎很幼稚,但说真的,我还没有看到一个资源来解释如何使用API。基础知识。更具体地说,是使用API启动的过程 文档中有很多东西。但如何让它与RoR应用程序一起工作。比如在数据库中,在attr accessible中放入哪些变量。甚至是必须的 然后在模型中解析它。从控制器进行管理,并在视图中显示/调用。别误会,我确实知道RoR,我已经制作了应用程序,但使用API,似乎令人困惑。需要知道所有的基础知识 有没有教你如何使用API的资源。 对于我的场景,我想使用一个。获取API密钥后的第一个过程应

这样问似乎很幼稚,但说真的,我还没有看到一个资源来解释如何使用API。基础知识。更具体地说,是使用API启动的过程

文档中有很多东西。但如何让它与RoR应用程序一起工作。比如在数据库中,在attr accessible中放入哪些变量。甚至是必须的

然后在模型中解析它。从控制器进行管理,并在视图中显示/调用。别误会,我确实知道RoR,我已经制作了应用程序,但使用API,似乎令人困惑。需要知道所有的基础知识

有没有教你如何使用API的资源。
对于我的场景,我想使用一个。获取API密钥后的第一个过程应该是什么。

如何使用API在很大程度上取决于API如何公开自身,以及必须处理哪些代码库

许多API作为HTTP端点提供,您可以使用
CURL
OpenURI
HTTParty
或类似的方式来使用资源,或处理发送给您的数据,通常是
JSON
XML

下面列出了一些最流行的RubyHTTPAPI客户端库

选择其中一个并编写一些代码来获取该API的端点,然后使用该数据执行您需要的任何操作。将API视为数据库

Codeschool有一个很酷的课程,您可以从这里开始免费学习前几个级别:


如何使用API在很大程度上取决于API如何公开自身,以及必须处理哪些代码库

许多API作为HTTP端点提供,您可以使用
CURL
OpenURI
HTTParty
或类似的方式来使用资源,或处理发送给您的数据,通常是
JSON
XML

下面列出了一些最流行的RubyHTTPAPI客户端库

选择其中一个并编写一些代码来获取该API的端点,然后使用该数据执行您需要的任何操作。将API视为数据库

Codeschool有一个很酷的课程,您可以从这里开始免费学习前几个级别:


首先,在选择是否使用API之前,我强烈建议尝试使用REST API,因为这类API通常遵循相同的结构(甚至有一本关于REST API的书),然后您就知道应该期待什么了

让我们以虚构的电影DB REST API为例

所以RESTAPI就是关于资源的。每部电影都可以创建、读取、更新或删除(CRUD)

因此,您知道您可以使用这些命令—如果您想在应用程序中获取电影,您可以使用api提供的读取命令。它通常看起来像GET/movie/13(HTTP GET请求)

因此,在你的应用程序中,你必须在任何你想要的地方插入该行(可能在某个面板中,用户搜索一部电影,然后你访问电影数据库以获取其详细信息)

所以你会有一个

def movie_panel
  #some stuff

@movie = MovieDB::get(movie_name)
end 
现在你有了这部电影。现在怎么办?解析真的很烦人。幸运的是,大多数API都有gem,你可以使用,所以他们为你做解析。这里我使用了假的gem MovieDB,但是如果没有gem,你需要自己查询API,在这种情况下,我建议你构建自己的gem,或者至少有一个带有一些类和方法的模块来实现让你的生活更轻松,比如

module MovieDB

 class Movie

  attr_accesor :name, :year, etc...

 def initialize(movie_params)
  #initizalize the movie attributes from a given movie params
  @name = movie_params["name"]
  etc..
 end

end
end
    uri = URI.parse(@url)
    https = Net::HTTP.new(uri.host,uri.port)
    req = Net::HTTP::Get.new(uri.path)
    req.body = ["format=" + @format, "apiKey=" + @apikey]
    res = https.request(req)
因此,在本例中,您将使用自己的API包装器。因此,一旦从外部API中获得movie参数,您就可以执行MovieDB::movie.new(movie_params),这将创建一个movie对象,该对象具有代码中所需功能的方法(您需要编写)

在该模块中,您可以处理有关该API的所有内容,并从应用程序的核心抽象出所有内容

总而言之-

RESTAPI-简单、可预测、可管理 非rest api-确保有适当的文档 使用api提供给您的资源,并问自己一些问题-我想从api中得到什么?我将如何处理这些资源(如电影、facebook页面或推特)?api文档是否表示它能够处理您想处理的资源

随着文档的发展,你需要阅读它来理解要做什么。不是所有的文档都清晰,也不是所有的东西在第一次阅读时都清晰,因为你不知道从哪里开始。所以从一开始就开始-你为什么要使用API?API承诺做什么?你需要验证?有教程吗?有人已经为它制作了宝石吗API

以一些著名的API和不太著名的API为例

Facebook Graph API有很好的文档记录。你确切地知道你从每个命令中得到了什么以及期望得到什么。你不需要自己编写它,因为考拉宝石已经介绍过了。在API彩虹的另一方面,有一个Pinterest API,你可能想知道它的用途。没有人知道,因为它几乎不可用,你需要访问它因此,如果你想使用Pinterest API,请确保你了解它提供了什么和没有提供什么(提示-它没有)。这对于每个API都是正确的,无论它有好的文档还是坏的文档

祝你好运,我建议你读一读,也许还有这个-

使用实际的API进行更新

好的,那么您想要的api已经有了很好的文档记录

它说的第一件事是检查API速率

得到

因此,您可以在这里开始构建代码。您需要将apiKey保存在某个位置,并在url中预先填充参数,参数是格式和apiKey

您可以创建一个帮助器方法来实现这一点

def check_rate(format, apiKey)
...
end
在内部,您需要发送一个请求,获取响应,并对其进行如下解析

module MovieDB

 class Movie

  attr_accesor :name, :year, etc...

 def initialize(movie_params)
  #initizalize the movie attributes from a given movie params
  @name = movie_params["name"]
  etc..
 end

end
end
    uri = URI.parse(@url)
    https = Net::HTTP.new(uri.host,uri.port)
    req = Net::HTTP::Get.new(uri.path)
    req.body = ["format=" + @format, "apiKey=" + @apikey]
    res = https.request(req)
这就向前推进了一步。获取结果并对其进行解析。在这种情况下,最好是创建一个类f