我有几个类向网站发出请求。例如,一个类用于抓取www.example.com/albums
,另一个类用于www.example.com/singles
等。
/lib
/classes
/example
album_request.rb
singles_request.rb
在每个类中,我都有一个定义外部URL的常量。 e.g。
module Example
class AlbumRequest
BASE_URL = 'http://www.example.com/albums'
end
end
这意味着我要在所有课程中重复example.com
。如果主机名突然改变怎么办?
我认为我的代码会更好:
module Example
class AlbumRequest
ALBUM_URL = "#{BASE_URL}/albums"
end
end
BASE_URL
在其他地方定义的地方。我应该在哪里定义这样的常数?如果我在较低级别的模块中定义它,我是不是打破了依赖倒置原则?我应该把它放在配置中吗? (即使我可以假设网址不会改变)
我还想在所有请求之间共享请求标头哈希。
REQUEST_HEADERS = {
'Content-Type' => 'application/json',
...
}
感谢。
答案 0 :(得分:0)
每个其他类继承的MainRequest
类怎么样,比如
# lib/classes
class MainRequest
BASE_URL = 'http://www.example.com/albums'
HEADERS = {
header1: 'value1',
header2: 'value2'
}
end
因此,你可以这样做,
module Example
class AlbumRequest < MainRequest
ALBUM_URL = "#{BASE_URL}/albums"
end
end
我认为,你可能也在重复执行请求的逻辑,因为上面的代码,你也可以集中处理这些代码。
#lib/classes/main_request.rb
def execute_request(url, method = 'GET', params = {})
# common logic of request and return response where params include headers, body, params
end
module Example
class AlbumRequest < MainRequest
ALBUM_URL = "#{BASE_URL}/albums"
response = execute_request(ALBUM_URL, 'GET', some_params)
end
end
答案 1 :(得分:0)
也许您可以使用ENV文件来管理您的应用,