Ruby API包装模块
我正在使用HTTParty为第三方Ruby API包装模块,ruby,oop,Ruby,Oop,我正在使用HTTParty为第三方RESTAPI编写包装。我希望能够通过调用本地模块调用第三方API,如下所示: APIWrapper::APIObject::APIMethod params = { 'format' = 'json', 'object' = api_object, 'method' = api_method, } get(APIWrapper::BASE_URI, {:query => params}) 我想在APIWrapper中编写一个神奇的函数,
REST
API编写包装。我希望能够通过调用本地模块调用第三方API,如下所示:
APIWrapper::APIObject::APIMethod
params = {
'format' = 'json',
'object' = api_object,
'method' = api_method,
}
get(APIWrapper::BASE_URI, {:query => params})
我想在APIWrapper中编写一个神奇的函数,它接受函数调用并解码对象和方法以调用第三方API。因此,上面的调用将执行以下操作:
APIWrapper::APIObject::APIMethod
params = {
'format' = 'json',
'object' = api_object,
'method' = api_method,
}
get(APIWrapper::BASE_URI, {:query => params})
我希望能够根据调用的方法自动填充
api_对象
和api_方法
,这样我就不必为我希望能够进行的每个api调用都显式地编写方法。在PHP
中,这将使用magic\uuu-get方法完成。Ruby中是否有一个等价物?这肯定可以在Ruby中实现。您需要在APIWrapper上实现const_missing
,它将返回一个实现method_missing
的对象以获取API方法部分:
module APIWrapper
def const_missing(const_name)
anon_class = Class.new do
def method_missing(name, *params, &block)
params = {
'format' = 'json',
'object' = const_name.to_s,
'method' = name.to_s,
}
get(APIWrapper::BASE_URI, {:query => params})
end
end
end
end
查找
method\u missing
。api\u对象是否应作为字符串作为对象的名称?与api_方法相同?是的,APIObject将是对象的名称。因此,它将类似于“用户”或“帐户”。APIMethod将类似于“create”、“update”或“getAll”。