这似乎很天真,但严重的是我没有看到解释如何使用API的资源。基础。更具体地说,是使用API启动的过程。
文档中有很多东西。但是如何使用RoR应用程序。就像在db中放入的变量一样,在attr-accessible中。或甚至是必需的。
然后在模型中解析它。从控制器管理并在视图中显示/调用。不要误会我的意思,我知道RoR,我已经制作了应用程序,但使用API,似乎令人困惑。需要了解所有基础知识。
是否有任何资源可以使用API。 对于我的场景,我想使用travel API。应该是第一个程序(在获取API密钥之后)。
答案 0 :(得分:3)
如何使用API主要由API如何暴露自身以及您必须处理的代码库来定义。
许多API都显示为HTTP端点,您可以使用CURL
,OpenURI
,HTTParty
或类似的东西来使用资源,或处理发送给您的数据,为JSON
或XML
。
以下列出了Ruby-Toolbox上一些比较流行的Ruby HTTP API客户端库。
选择其中一个并编写一些获取该API端点的代码,然后使用该数据执行您需要的任何操作。将API视为数据库。
Codeschool有一个很酷的课程,你可以从这里开始,并在这里免费做几个级别:
答案 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等方法?等等。基本上是每个响应的一个类,并为每个响应实例化一个类。该类的构造函数将解析响应并公开您需要的任何属性