使用 ActiveResource::Base 向 API 发送获取请求
Using ActiveResource::Base to send get requests to API
我是 Rails 的新手,所以请多多包涵。
我们正在为荷兰市场构建一个 Rails 4
应用程序。在注册过程中,要求用户填写邮政编码并自动生成地址是很常见的。这是可行的,因为在荷兰,每扇门都有一个独特的邮政编码,由 4 个数字和 2 个字母 (6828WQ) 组成。
位于 postcodeapi.nu. The api works pretty simple. In order for me to receive the address, I need to send a get
request to http://api.postcodeapi.nu/5041EB 的 API 将 return 我的地址对应于 5041EB
邮政编码。以后我会把地址做成动态的,但是让我们以这个link为例。
一切都清楚了,但现在我不知道如何使用 ActiveResource 发送请求和缓存响应。这是我的模型的外观:
class Postcode < ActiveResource::Base
self.site = "http://api.postcodeapi.nu/5041EB"
headers['Api-Key'] = "495237e793d10330c1db0d57db9d3c7e6e485af7"
end
我从控制台做了一些测试,但我不太确定我应该如何处理它。我尝试使用简单的 Postcode.new
但 return 是一个空响应:
=> #<Postcode:0x00000006b5c178 @attributes={}, @prefix_options={}, @persisted=false>
我已经尝试了我所知道的一切,但没有成功。也许 ActiveResource 甚至不是我获取数据的正确方法?
由于 API 没有 return ActiveResources 期望的 JSON,您必须实施新的解析器。
class Postcode < ActiveResource::Base
self.site = "http://api.postcodeapi.nu/"
headers['Api-Key'] = "495237e793d10330c1db0d57db9d3c7e6e485af7"
self.element_name = ''
self.include_format_in_path = false
class PostcodeParser < ActiveResource::Collection
def initialize(elements = {})
@elements = [elements['resource']]
end
end
self._collection_parser = PostcodeParser
end
这应该适用于以下查询 Postcode.find('5041EB')
,但不适用于 Postcode.where(id: '5041EB')
。主要原因是 API 与 id
的参数键不同。 API 文档引用了 type
,但没有用。
我不确定 ActiveResources 是否适合这种情况。
我是 Rails 的新手,所以请多多包涵。
我们正在为荷兰市场构建一个 Rails 4
应用程序。在注册过程中,要求用户填写邮政编码并自动生成地址是很常见的。这是可行的,因为在荷兰,每扇门都有一个独特的邮政编码,由 4 个数字和 2 个字母 (6828WQ) 组成。
位于 postcodeapi.nu. The api works pretty simple. In order for me to receive the address, I need to send a get
request to http://api.postcodeapi.nu/5041EB 的 API 将 return 我的地址对应于 5041EB
邮政编码。以后我会把地址做成动态的,但是让我们以这个link为例。
一切都清楚了,但现在我不知道如何使用 ActiveResource 发送请求和缓存响应。这是我的模型的外观:
class Postcode < ActiveResource::Base
self.site = "http://api.postcodeapi.nu/5041EB"
headers['Api-Key'] = "495237e793d10330c1db0d57db9d3c7e6e485af7"
end
我从控制台做了一些测试,但我不太确定我应该如何处理它。我尝试使用简单的 Postcode.new
但 return 是一个空响应:
=> #<Postcode:0x00000006b5c178 @attributes={}, @prefix_options={}, @persisted=false>
我已经尝试了我所知道的一切,但没有成功。也许 ActiveResource 甚至不是我获取数据的正确方法?
由于 API 没有 return ActiveResources 期望的 JSON,您必须实施新的解析器。
class Postcode < ActiveResource::Base
self.site = "http://api.postcodeapi.nu/"
headers['Api-Key'] = "495237e793d10330c1db0d57db9d3c7e6e485af7"
self.element_name = ''
self.include_format_in_path = false
class PostcodeParser < ActiveResource::Collection
def initialize(elements = {})
@elements = [elements['resource']]
end
end
self._collection_parser = PostcodeParser
end
这应该适用于以下查询 Postcode.find('5041EB')
,但不适用于 Postcode.where(id: '5041EB')
。主要原因是 API 与 id
的参数键不同。 API 文档引用了 type
,但没有用。
我不确定 ActiveResources 是否适合这种情况。