在RoR中使用API

时间:2014-06-09 13:31:50

标签: ruby-on-rails ruby-on-rails-3 api

这似乎很天真,但严重的是我没有看到解释如何使用API​​的资源。基础。更具体地说,是使用API​​启动的过程。

文档中有很多东西。但是如何使用RoR应用程序。就像在db中放入的变量一样,在attr-accessible中。或甚至是必需的。

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

是否有任何资源可以使用API​​。 对于我的场景,我想使用travel API。应该是第一个程序(在获取API密钥之后)。

2 个答案:

答案 0 :(得分:3)

如何使用API​​主要由API如何暴露自身以及您必须处理的代码库来定义。

许多API都显示为HTTP端点,您可以使用CURLOpenURIHTTParty或类似的东西来使用资源,或处理发送给您的数据,为JSONXML

以下列出了Ruby-Toolbox上一些比较流行的Ruby HTTP API客户端库。

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

Codeschool有一个很酷的课程,你可以从这里开始,并在这里免费做几个级别:

Surviving APIs with Rails

答案 1 :(得分:2)

首先,在选择使用API​​之前,我强烈建议尝试使用REST API,因为这些类型通常都遵循相同的结构(甚至还有一本关于REST API的书),然后你知道怎么做期望的。

让我们看一个虚构的Movie DB REST API示例

因此REST API完全与资源有关。每部电影都可以创建阅读,更新或删除(CRUD)。

所以你知道你可以使用这些命令 - 如果你想在你的应用程序中获得一部电影,你将使用api提供的读命令。它通常看起来像GET / movie / 13(HTTP GET请求)

所以在你的应用程序中,你必须在你想要的地方插入那一行(可能在用户搜索电影的某个面板中,你可以访问电影数据库以获取它的详细信息

所以你会有一个

def movie_panel
  #some stuff

@movie = MovieDB::get(movie_name)
end 

所以现在你有电影..现在怎么样?解析它确实很烦人。幸运的是,大多数API都有你可以使用的宝石,所以他们为你做了解析。在这里我使用了伪造的宝石MovieDB但是如果没有宝石你需要自己查询api,在这种情况下我建议你建立自己的宝石,或者至少有一个模块包含一些类和方法让你的生活更轻松。

之类的东西
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

所以在这种情况下,你可以使用自己的API包装器。因此,一旦从外部API获得电影参数,您就可以执行MovieDB :: Movie.new(movie_params),这将创建一个电影对象,其中包含您在代码中所需功能的方法(需要编写) 。

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

总结起来 -

REST API - 简单,可预测,可管理 非/休息api - 确保有适当的文件 使用api为您提供的资源,并问自己问题 - 我想从API中获得什么?我将如何处理资源(例如电影,Facebook页面或推文)? API文档是否说它能够执行您想要对资源执行的操作?

随着文档的发展,您需要阅读它以了解该做什么。没有所有的文档都清楚,并且在一读时并不是一切都清楚,因为你不知道从哪里开始。从一开始就开始 - 你为什么要API? API承诺做什么?你需要进行身份验证吗?有教程吗?有人已经为API制作了宝石吗?

以一些着名的API和不那么着名的API为例。

Facebook Graph API已有详细记录。您确切地知道从每个命令得到什么以及期望什么。您不需要自己编写,因为考拉宝石可以让您满意。在API彩虹的另一方面,有一个Pinterest API,你可能想知道它是什么。没有人知道,因为它几乎无法使用,你需要访问它,即使那时它非常有限。因此,如果您想要加入Pinterest API,请确保您了解它为您提供的内容以及它不具备的内容(提示 - 它不会)。对于每个具有良好文档或错误文档的API都是如此。

祝你好运,我可以建议阅读http://shop.oreilly.com/product/0636920028468.do,也许这也是 - https://github.com/interagent/http-api-design

使用实际API进行更新

好的,所以你想要的api http://www.wego.com/api/flights/docs记录得很好

它首先说的是获得API费率检查

获取http://www.wego.com/api/flights/usage.html?format=json&apiKey=testAPIKey

所以就在这里,您可以开始构建代码。你需要在某个地方保存apiKey,并且有一个预填充http://www.wego.com/api/flights/usage.html的网址,参数是格式和apiKey

你可以创建一个帮助方法来做到这一点。

def check_rate(format, apiKey)
...
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)

这会让你前进一步。获取结果并解析它。在这种情况下,最好是为这种响应创建一个类,并添加rate_ok等方法?等等。基本上是每个响应的一个类,并为每个响应实例化一个类。该类的构造函数将解析响应并公开您需要的任何属性